流量染色与gRPC服务托管 微服务协作开发、灰度发布之流量染色 灰度发布与流量染色
大规模微服务场景下灰度发布与流量染色实践 https://mp.weixin.qq.com/s/UBoRKt3l91ffPagtjExmYw
【go-micro】微服务协作开发、灰度发布之流量染色 - HB-技术实践 http://hbchen.com/post/microservice/2019-11-30-go-micro-service-chain/
约 1831 字 预计阅读 4 分钟
协作开发与灰度发布是微服务框架在流量治理能力方面的两个体现,本文结合go-micro实践对流量进行染色,实现开发环境的多分支协作, 以及生产环境的灰度发布。

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链路
生产环境灰度发布

流量染色
流量染色核心:
- 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服务托管-社区博客-网易数帆 https://sq.163yun.com/blog/article/331977098249682944
网易轻舟微服务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 控制台,查看服务注册结果。
流量染色与gRPC服务托管 微服务协作开发、灰度发布之流量染色 灰度发布与流量染色的更多相关文章
- grpc应用于微服务的分析,基于python
grpc应用于微服务的分析 gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,目前提供 C.Java 和 Go 语言版本,分别是:grpc, grpc-java, g ...
- [转]系统架构演变--集中式架构-垂直拆分-分布式服务-SOA(服务治理)-微服务
一.系统架构演变 1.1. 集中式架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键. 存在的 ...
- SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么
从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...
- Chris Richardson微服务翻译:重构单体服务为微服务
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署 ...
- Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
- CODING DevOps 系列第五课:微服务测试——微服务下展开体系化的微服务测试
微服务测试的痛点与挑战 这张图可以形象地展示单体服务和微服务的对比,单体应用就像左边巨大的集装箱,软件模块和应用都包括其中:而微服务就像是由一个小集装箱组成,微小的服务组成一个庞大.完整的系统.单体服 ...
- 腾讯高性能RPC开发框架Tars实现服务治理(微服务)
Github:https://github.com/Tencent/Tars 1. 介绍 Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快 ...
- Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务
实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- SpringCloud与微服务Ⅳ --- Rest微服务构建案例工程模块
一.父工程搭建 父工程pom: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=& ...
随机推荐
- JavaScript 正则匹配中文,中文符号,空格,全数字,以https:// 开头的url,用于各种场景的输入校验
业务场景1: 密码输入框需要验证输入中文,中文符号,空格等情况,以便于给出错误提示 业务场景2: 输入框只允许输入数字的情况 业务场景3: 输入框允许输入均为数字或以https:// 开头的url的情 ...
- Xtrabackup备份与恢复
一.Xtrabackup介绍 MySQL冷备.mysqldump.MySQL热拷贝都无法实现对数据库进行增量备份.在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况 ...
- CentOS7下常用安装服务软件源码编译安装方式的介绍
简介:介绍源码编译安装软件包的管理 源码安装优点:编译安装过程,可以设定参数,指定安装目录,按照需求进行安装,指定安装的版本,灵活性比较大. 源码安装的缺点:需要对依赖包一个一个的进行安装,不敢随便升 ...
- Redis基础篇(五)AOF与RDB比较和选择策略
RDB和AOF对比 关于RDB和AOF的优缺点,官网上面也给了比较详细的说明redis.io/topics/pers- RDB 优点: RDB快照是一个压缩过的非常紧凑的文件,保存着某个时间点的数据集 ...
- 【超级经典】程序员装B指南(转)
一.准备工作 "工欲善其事必先利其器." 1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好.一个用来查资料,一个用来写代码.总之要显得信息量很大,效率 ...
- Javascript 获得数组中相同或不同的数组元素
Javascript 获得数组中相同或不同的数组元素 在Javascript中,偶尔会用到获取数组中相同或不同的元素值的情况,以下提供了获得数组中相同或不同的 元素函数供参考学习使用. // 数字类型 ...
- JavaScript入门-学习笔记(一)
JavaScript入门(一) 学习js之前,我们先来了解一下,什么是JavaScript? JavaScript是一种解释型语言.在运行的时候,一边读一边编译一边执行.简单来说就是,在执行js代码时 ...
- git基础-远程仓库的使用
远程仓库的使用 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库. 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以 ...
- Java中常用修饰符浅谈
一.public.protected.default和private修饰符的作用域 public:在java程序中,如果将属性和方法定义为 public 类型,那么此属性和方法所在的类和及其子类,同一 ...
- Liunx运维(十)-网络管理命令
文档目录: 一.ifconfig:配置或显示网络接口信息 二.ifup:激活网络接口 三.ifdown:禁用网络接口 四.route:显示或管理理由表 五.arp:管理系统的arp缓存 六.ip:网络 ...