初探-Discovery开源框架-gateway灰度方案

简介: Discovery 框架比较成熟的开源框架,可以参考里面实现方案。Discovery实现了Eureka、Nacos等等注册中心灰度,以及通过redis、Nacos、Etcd来实现配置中心(为了网关动态配置)还有类似apm全链路变量传递功能,以及改写fegin、resttemplate负载均衡

前言

在上一篇介绍了自定义实现网关灰度方案

Discovery 框架比较成熟的开源框架,可以参考里面实现方案。Discovery实现了Eureka、Nacos等等注册中心灰度,以及通过redis、Nacos、Etcd来实现配置中心(为了网关动态配置)还有类似apm全链路变量传递功能,以及改写fegin、resttemplate负载均衡

Discovery

官网

逻辑架构图

image.png

个人理解

打标过程

打标类型 操作
主动打标 自身带上特定的header,比如说postman请求的时候自动带上灰度标识
被动打标 流量经过网关的时候,判断req符合什么条件,给它打标,然后再路由

网关路由

协议 操作
lb 就是在loadBalance选择serverInstance的时候判断,对应注册中心里面的服务的metaData标识,然后将他们过滤,然后再进行负载算法
http 可以通过不同域名来实现负载,比如说灰度用户->网关->灰度路由->灰度pod

需要重写代码

  1. Fegin、restTemplate负载需要重写
  2. 全链路需要把变量传递下去(apm是最基础部分就体现在这里)
  3. 实现网关动态配置(灰度开始跟灰度结束都需要用到)

源码解读(网关路由相关)

AbstractGatewayStrategyRouteFilter

image.png

各种标识

image.png

image.png

这两个方法就是疯狂往header头塞数据

image.png

把exchange塞到context里头,方便后续拿到

我相信读者跟我一样闷逼,为啥塞一堆header但是网关怎么根据header来路由呢?直到......

DiscoveryEnabledAdapter

DiscoveryEnabledAdapter这个类Ribbon路由规则器,网关在gateway比较旧的版本是采用ribbon来进行负载均衡

注意点!!!

网关在gateway比较旧的版本是采用ribbon来进行负载均衡,所以在新版的话是采用loadbalance来实现,可以看下初探灰度发布系列--AB Test以及栗子

它的实现类是DefaultDiscoveryEnabledAdapter

DefaultDiscoveryEnabledAdapter

image.png

image.png

com.nepxion.discovery.plugin.strategy.adapter.DefaultDiscoveryEnabledAdapter#applyVersion

image.png

serviceId为何物?

image.png

PredicateBasedRuleDecorator

com.nepxion.discovery.plugin.framework.decorator.PredicateBasedRuleDecorator#getServerList

image.png

image.png

在这里就需要用到上面那个apply,会将所有serverId符合条件的筛选出来

到这里我们就懂了,其实就是负载的时候,apply去筛选符合条件的serverInstance然后进行路由

总结

跟我之前写的自定义灰度方案,思想是一样的,不外乎是一个协议lb,然后拿到serverList,然后根据metaData以及header来路由

当然在新版gateway版本已经不采用ribbon来转发了,这个要注意下,好像能给社区提个issue,美滋滋~

给社区提issue

来着大佬的回复:

image.png

开源版本只兼容gateway版本,想要好东西加钱,哈哈

当然大家可以参照我这篇来改

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
缓存 负载均衡 监控
nacos+ribbon+feign+gateway设计实现灰度方案 (上)
nacos+ribbon+feign+gateway设计实现灰度方案
1508 0
nacos+ribbon+feign+gateway设计实现灰度方案  (上)
|
9月前
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
|
前端开发 Java 应用服务中间件
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
|
存储 缓存 NoSQL
Spring Cloud实战 | 最七篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案
Spring Cloud实战 | 最七篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案
|
消息中间件 负载均衡 算法
Spring Cloud Gateway 网关如何实现灰度发布?
Spring Cloud Gateway 网关如何实现灰度发布?
|
负载均衡 关系型数据库 MySQL
nacos+ribbon+feign+gateway设计实现灰度方案 (下)
nacos+ribbon+feign+gateway设计实现灰度方案 (下)
732 0
nacos+ribbon+feign+gateway设计实现灰度方案 (下)
|
Web App开发 前端开发 JavaScript
Spring Cloud Gateway CORS 方案看这篇就够了
Spring Cloud Gateway CORS 方案看这篇就够了
Spring Cloud Gateway CORS 方案看这篇就够了
|
Web App开发 编解码 网络协议
基于声网的音视频SDK和FreeSWITCH开发WebRTC2SIP Gateway 方案和思路(一)
基于声网音视频SDK开发WebRTC2SIP Gateway的思路和步骤
1342 0
 基于声网的音视频SDK和FreeSWITCH开发WebRTC2SIP Gateway 方案和思路(一)
|
Java 测试技术 应用服务中间件
Spring Cloud Gateway 扩展支持多版本控制及灰度发布
灰度发布 什么是灰度发布,概念请参考,我们来简单的通过下图来看下,通俗的讲: 为了保证服务升级过程的平滑过渡提高客户体验,会一部分用户 一部分用户递进更新,这样生产中会同时出现多个版本的客户端,为了保证多个版本客户端的可用需要对应的多个版本的服务端版本。
2964 0
|
3月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南

热门文章

最新文章