- 《架构世界》2020微服务刊:微服务分布式事务实战
- 普元信息
- 1171字
- 2020-11-18 15:22:42
二、灰度发布实践
下面主要介绍下
微服务平台里灰度发布的流量控制。概念介绍
![](https://epubservercos.yuewen.com/AF849A/17853815408903006/epubprivate/OEBPS/Images/image072.jpg?sign=1739632357-zmnfkQYAbQ63BPMhNDSnPxt4JHQNhvpp-0-0111337754aa64c4d22e0fb11ffa3b9b)
这是
里的【系统】相关的概念模型:.一个系统有多个应用组成,一个应用就是一个微服务,一个应用可以有多个实例组
.一个系统有一个网关,跨系统之间的 调用需要经过该网关
.一个系统上可以配置多个流量策略,该流量策略对系统内应用和网关同时起作用
实例组注册
![](https://epubservercos.yuewen.com/AF849A/17853815408903006/epubprivate/OEBPS/Images/b3.png?sign=1739632357-qRwt3tQYvhMhG1Jl6d6gPlW3jziEKcOp-0-ec0040f2b432e34fe5bf25a78d1cf2d2)
实例组是一个逻辑概念。
通过在应用的 . 文件里的注册中心相关配置里,增加一个 为 . - - 的自定义的 ,用来指定分组, 可以是应用版本或其它值。流量策略设置
![](https://epubservercos.yuewen.com/AF849A/17853815408903006/epubprivate/OEBPS/Images/b4.png?sign=1739632357-fZ3oJFSsSLIjrUMYKx9IzI7ajbqNNznP-0-4a76faa3632fb0d9741b9a984737b231)
通过
的 页面可以设置一个系统的流量策略。一个系统内可以有多个流量策略,流量策略可以设置优先级以及是否启用。一个策略主要由 部分组成:.规则:用于定义的用于匹配请求来源,支持 _ 、源应用以及 段 种规则。
.目标应用:用于定义满足【规则】的请求会被路由到本系统的哪个应用以及哪个实例组。
![](https://epubservercos.yuewen.com/AF849A/17853815408903006/epubprivate/OEBPS/Images/b5.png?sign=1739632357-UD3IUaKkSEChimbuPlajgrbUgALuMSkD-0-8d07c26e6401c6cd6a411ed8d73ef8af)
流量策略会保存在
的配置中心,这样可以方便应用和网关监听流量策略配置的变化。我们会给每个系统在
上创建一个项目,项目名称为“ .”+系统编码,系统编码要求全局唯一。在该项目下,我们会创建一个 公共的 ,名称为 ” .”+系统编码,使用公共 是为了让应用和网关都可以使用该 的配置。保存在
上的配置,是以目标应用编码为 , 是和该目标编码相关的流量策略集合。请求路由
![](https://epubservercos.yuewen.com/AF849A/17853815408903006/epubprivate/OEBPS/Images/b6.png?sign=1739632357-8lbGEhk86AZvT1fWgvZ82Rjpc8Y4uXtf-0-28ba41c5ad57ec8d97aff9b93ae114d0)
调用请求分类分为
部分:.系统内调用:系统内应用互相调用,这种调用不需要经过网关,由应用之间直接互调,支持 和
.跨系统调用:跨系统的应用互相调用,需要经过网关路由转发
的微服务平台里使用的是 和 ,所以以上 种情况可以归纳为如何在 上实现流量策略的路由转发,不同点在于:
.系统内调用时,如果规则是 _ ,匹配的是 ( 或者 )发送时的请求头
.跨系统调用时,如果规则是 _ ,匹配的是网关收到的请求头
![](https://epubservercos.yuewen.com/AF849A/17853815408903006/epubprivate/OEBPS/Images/b7.png?sign=1739632357-RlYz7puFWWMhLJ4J9pLHRUePaHdGAQAs-0-3ced0cf4aaf38d154d41a221828285e2)
是一种客户端负载,配合注册中心一起使用时,可以根据被调用的服务名选取合适的实例进行服务调用。 也提供了比较方便的扩展,可以自定义 并通过 自动注入。
可以在自定义的
里实现根据流控策略选择合适应用实例进行服务调用,配合 一起使用,可以达到动态修改流控策略的效果。需要注意的是如果是
和 一起使用的时候,可能会遇到跨线程传递数据的问题,可以有以下几种方案选择:.使用
.自定义
.使用
实现流程
![](https://epubservercos.yuewen.com/AF849A/17853815408903006/epubprivate/OEBPS/Images/b8.png?sign=1739632357-3cRBptK4diSmckDpyBwlqjnWUfRYFc2u-0-3544b9841c2df032ab416d4da6d6f99e)
总结一下,灰度发布的大概实现流程:
.应用启动时指定实例分组,并注册到注册中心
.应用连接到 ,获取本系统的流量策略,并设置 的监听器,监听流量策略配置的变化
. 修改流量策略并保存到配置中心
.当有请求访问时,不论 还是 都会在 上做负载均衡,做负载均衡时就会根据要访问的应用编码查看是否有流控策略,如果有流控策略则按流控策略路由,如果所有流控策略都不满足会就会路由到默认组;如果没有流控策略也是路由到默认组