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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 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版本,想要好东西加钱,哈哈

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

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
缓存 负载均衡 监控
nacos+ribbon+feign+gateway设计实现灰度方案 (上)
nacos+ribbon+feign+gateway设计实现灰度方案
1259 0
nacos+ribbon+feign+gateway设计实现灰度方案  (上)
|
6月前
|
前端开发 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设计实现灰度方案 (下)
595 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的思路和步骤
1121 0
 基于声网的音视频SDK和FreeSWITCH开发WebRTC2SIP Gateway 方案和思路(一)
|
Java 测试技术 应用服务中间件
Spring Cloud Gateway 扩展支持多版本控制及灰度发布
灰度发布 什么是灰度发布,概念请参考,我们来简单的通过下图来看下,通俗的讲: 为了保证服务升级过程的平滑过渡提高客户体验,会一部分用户 一部分用户递进更新,这样生产中会同时出现多个版本的客户端,为了保证多个版本客户端的可用需要对应的多个版本的服务端版本。
2761 0
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway