大规模微服务场景下灰度发布与流量染色实践 https://mp.weixin.qq.com/s/UBoRKt3l91ffPagtjExmYw

【go-micro】微服务协作开发、灰度发布之流量染色 - HB-技术实践 http://hbchen.com/post/microservice/2019-11-30-go-micro-service-chain/

2019-11-30

约 1831 字  预计阅读 4 分钟

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

  • QA组测试v1.2v2.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链路

生产环境灰度发布

流量染色

流量染色核心:

  • gateway对请求进行染色

    • 染色规则可以是hostheader字段、agent终端信息、用户筛选、流量比例等等
  • 染色信息在服务间传递
    • go-microhttp请求的header以及rpc请求的metadata
  • 服务调用时根据染色信息对服务进行筛选,实现调用链路的管控

我们基于go-micro实践的是实现多链路染色,染色链路带有优先级,如开发环境多服务、多分支协作v1.2组, 虽然v1.1v1.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实现调用链路管控,最大的障碍就是网关,APIWeb均不支持服务筛选,需要自己二次开发,相关问题也反馈给社区看后续计划#1003

网易轻舟微服务9月重大更新:流量染色与gRPC服务托管-社区博客-网易数帆 https://sq.163yun.com/blog/article/331977098249682944

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

网易云社区2019-09-16 17:07

流量染色

特性简介

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

典型使用场景

• 全链路灰度发布 
新版本在正式发布前,可以使用流量染色控制先进行小规模验证,通过收集使用体验的数据,对应用新版本的功能、性能、稳定性等指标进行评判,然后再全量升级。即使某个新版本出现问题,也只会影响已染色流量,不会蔓延至整个系统,从而保证业务的正常运行。 
• 多测试环境管理 
当用户需要在一个测试环境中管理多个测试分支时,可以通过流量染色标记不同的测试分支流量,将该流量路由至测试版本,从而提供整体测试环境的复用性的同时,避免了不同测试分支的互相干扰。

产品优势

• 支持多种协议类型:包括 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 控制台,查看服务注册结果。 

 
 

最新文章

  1. HTML5 学习笔记(五)——WebSocket与消息推送
  2. 云计算之路-阿里云上:遭遇CDN问题
  3. eclipse 插件之Code Folding
  4. 实现mysql的分组排名问题
  5. Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration
  6. 照片提取GPS 转成百度地图坐标
  7. 多个code.csdn.net账号切换
  8. Windows API教程文件系统
  9. NOIP2018联赛总结
  10. 【OpenGL】【计算机图形学原理】撸课本系列一
  11. C#生成Excel保存到服务器端并下载
  12. Maven实战(八)——常用Maven插件介绍(下)
  13. 【Spark-core学习之三】 Spark集群搭建 & spark-shell & Master HA
  14. MarkDown 排版测试
  15. Java连接Oracle/MySQL数据库教程
  16. Redis客户端集群
  17. smyfony2-curd-数据库创建
  18. Linux下的进程间通信-详解
  19. angular directive restrict 的用法
  20. 036——VUE中表单控件处理之动态绑定文章的属性的处理方法

热门文章

  1. python初学者-输入一个数判断奇偶性
  2. maven版本仲裁原则
  3. Qt类库介绍
  4. Failed to create Spark client for Spark session
  5. MariaDB Galera Cluster集群搭建
  6. Oracle 模糊查询 优化
  7. TensorFlow 基础概念
  8. Lagom 官方文档之随手记
  9. 关于 RNN 循环神经网络的反向传播求导
  10. 基于Python实现的系统SLA可用性统计