天天看点

流量染色与gRPC服务托管 微服务协作开发、灰度发布之流量染色 灰度发布与流量染色

文章目录

  • ​场景​
  • ​​开发环境多服务、多分支协作​​
  • ​​生产环境灰度发布​​
  • ​流量染色​
  • ​​染色​​
  • ​调用链路管控​
  • ​​网关服务筛选-坑​​
  • ​​服务筛选​​
  • ​​Ref​​

协作开发与灰度发布是微服务框架在流量治理能力方面的两个体现,本文结合go-micro实践对流量进行染色,实现开发环境的多分支协作, 以及生产环境的灰度发布。

流量染色与gRPC服务托管 微服务协作开发、灰度发布之流量染色 灰度发布与流量染色
  • ​QA​

    ​组测试​

    ​v1.2​

    ​和​

    ​v2.0​

    ​链路
  • ​v2.0​

    ​ + ​

    ​v1.2​

  • ​v1.1​

    ​组仅关注​

    ​v1.1​

    ​的版本开发
  • ​v1.1​

    ​master​

  • ​v1.2​

    ​组在​

    ​v1.1​

    ​开发新版​

    ​srv-2​

    ​服务
  • ​v1.2​

    ​v1.1​

    ​master​

  • ​v2.0​

    ​v2.0​

  • ​v2.0​

    ​master​

    ​链路 

生产环境灰度发布

流量染色与gRPC服务托管 微服务协作开发、灰度发布之流量染色 灰度发布与流量染色

流量染色

流量染色核心:

  • gateway对请求进行染色
  • 染色规则可以是​

    ​host​

    ​、​

    ​header​

    ​字段、​

    ​agent​

    ​终端信息、用户筛选、流量比例等等
  • 染色信息在服务间传递
  • ​go-micro​

    ​中​

    ​http​

    ​请求的​

    ​header​

    ​以及​

    ​rpc​

    ​metadata​

  • 服务调用时根据染色信息对服务进行筛选,实现调用链路的管控

我们基于​

​go-micro​

​实践的是实现多链路染色,染色链路带有优先级,如开发环境多服务、多分支协作的​

​v1.2​

​组, 虽然​

​v1.1​

​v1.2​

​都有​

​srv-2​

​服务,但我们在染色信息中​

​v1.2​

​在前优先选择,所以可以实现多分支同时染色(PS:如果两个分支中两个服务的优先级相反无法实现,需要设计更复杂的染色方案)

网关染色及​

​client wrapper​

​实现参考我实现的两个​

​chain​

​插件

染色

在网关对流量进行染色,基于​

​mciro​

​的插件,可以方便的实现,具体染色规则需要根据自身需求实现。

1

2

3

4

5

6

7

8

// 链路染色

api.Register(chain.New(chain.WithChainsFunc(func(r *http.Request) []string {

return []string{"v2.0", "v1.2"}

})))

web.Register(chain.New(chain.WithChainsFunc(func(r *http.Request) []string {

return []string{"v2.0"}

调用链路管控

​go-micro​

​实现调用链路管控,最大的障碍就是网关,​

​API​

​及​

​Web​

​均不支持服务筛选,需要自己二次开发,相关问题也反馈给社区看后续计划#1003。

网易轻舟微服务9月重大更新:流量染色与gRPC服务托管

特性简介

根据流量协议设置对应的流量染色规则,对指定的流量进行染色标记,并在整个调用链中携带该标记,以便于对染色流量进行跟踪和路由。 

典型使用场景

• 全链路灰度发布 

新版本在正式发布前,可以使用流量染色控制先进行小规模验证,通过收集使用体验的数据,对应用新版本的功能、性能、稳定性等指标进行评判,然后再全量升级。即使某个新版本出现问题,也只会影响已染色流量,不会蔓延至整个系统,从而保证业务的正常运行。 

• 多测试环境管理 

当用户需要在一个测试环境中管理多个测试分支时,可以通过流量染色标记不同的测试分支流量,将该流量路由至测试版本,从而提供整体测试环境的复用性的同时,避免了不同测试分支的互相干扰。 

产品优势

• 支持多种协议类型:包括 HTTP、RPC 等; 

• 流量入口:支持以 NSF 服务或 API 网关为流量入口; 

• 支持 MQ 等中间件流量染色; 

• 支持流量穿梭:对于染色链路中未指定的服务,仍允许再请求中携带染色标记并在下一跳路由回染色链路。 

• 支持多个流量染色配置:允许对一套微服务系统的不同流量进行染色,甚至允许同一个微服务同时参与多个流量染色。 

gRPC 服务托管

将 gPRC服务托管到 NSF微服务框架,用户只需要关注 gRPC服务自身的逻辑,无需再关注注册中心、配置中心和元数据中心的搭建和维护。托管后还可以使用 NSF提供的限流降级、拓扑关系、路由、及监控等能力,而且整个托管过程是无侵入的,不会增加用户的理解成本和开发成本。 

gRPC 治理能力

• 支持 gRPC服务的注册与发现; 

• 查看 gRPC 服务实例列表; 

• 查看 gRPC 服务监控; 

• 支持动态配置; 

• 查看 gRPC 服务依赖关系和服务拓扑; 

• 支持 gPRC 服务的限流、降级、容错等治理能力; 

• 支持 gRPC 服务的路由管理; 

• 支持 gRPC 服务的流量染色; 

• 通过知识库管理 gRPC 服务元数据; 

gRPC 服务托管方式

以 Java 应用为例,基于无侵入的设计方式,将 gPRC 服务托管到 NSF 只需要以下操作: 

1、从 NSF 控制的开发工具页面下载 NSF Agent; 

2、在开发工具页面,按照指引生成 Agent 配置文件;其中,服务类型选择 gPRC;将配置文件放入工程下的配置文件夹中; 

3、启动 gRPC 服务,在启动命令中,通过-jar引入 NSF Agent 的 JAR文件; 

4、登录轻舟 NSF 控制台,查看服务注册结果。 

继续阅读