使用 ZadigX 实现全链路灰度解决方案
01、微服务架构下的灰度发布挑战
在传统的单体应用架构中,灰度发布相对简单。只需要在服务的流量入口处进行分流,通过使用 K8s Service 或各种类型的网关即可实现。然而,微服务架构引入了新的复杂性,服务之间的依赖关系错综复杂。有时候,某个功能的发布可能依赖于多个服务,要求灰度流量在整个调用链中准确路由到灰度版本的服务。传统的单个服务流量入口设置分流的做法无法满足这一需求。为了解决微服务架构下的灰度发布问题,全链路灰度发布引入了泳道(Lane)的概念。泳道将灰度视角从单个服务扩展到整个请求的调用链上,确保流量能够精确地在一组指定规则的服务之间流动,就像在预先设置好的泳道中一样。全链路灰度发布方案专为微服务架构设计,旨在应对微服务架构下的灰度发布挑战。
02、全链路灰度发布的实现思路
全链路灰度发布的核心在于流量泳道概念的实现,而泳道正如上文所说,是对满足指定规则的流量定下一个活动范围,它有以下两种实现思路:
第一种思路:完整环境隔离
泳道实现的主要难点在于,流量在服务间调用的过程中如何路由到正确的服务版本,但有一个简单的实现思路可以规避这个问题:复制一个包含所有微服务的完整环境,将需要灰度的服务替换为灰度版本。然后只需要在两个环境的流量入口处通过网关对流量进行规则分流,由于两套环境间存在网络隔离,灰度环境天然成为了一个灰度流量泳道。
然而,对于服务数量较多的微服务项目来说,这种方法会浪费资源,因为在灰度环境中创建非灰度服务会消耗额外的资源。如果要同时灰度多个版本,就需要创建多套完整环境,进一步增加了资源的浪费。
第二种思路:服务流量路由
若能赋予每个服务路由流量的能力,泳道的设置就可以共用正常服务从而充分利用资源,多版本的全链路灰度发布也可以同时在同一个环境中进行。具体而言,需要两个能力:全链路流量路由和全链路数据透传。
全链路流量路由
流量路由指的是服务本身发送流量时,可以根据指定规则将其路由到正确的目的地,例如带有灰度标的流量应该优先发往灰度版本的服务,全链路流量路由则要求每个服务都具备这种能力。
全链路流量路由目前有两种主流实现:
-
基于 Istio:采用 Istio 这个开源 Service Mesh 组件,通过在每个服务的容器中部署 Envoy 透明代理,拦截服务之间的网络通信并按指定规则转发,从而实现了全链路流量路由,无需对现有代码进行修改。
-
基于服务发现组件:通过支持为服务设置元数据的服务注册中心,如 Nacos,可以标记服务实例的特征,例如灰度版本。每个服务可以通过注册中心获取其他服务实例的版本信息,并通过修改代码逻辑或 Java Agent 实现流量路由。
全链路数据透传
为了实现全链路灰度发布,流量路由规则基于流量染色标记,因此需要将染色标记传递到整个请求链路中,即实现全链路数据透传能力。简单的数据透传可以基于原生的 HTTP Header、Query Parameters 等资源来实现,但在复杂的微服务场景下,应该使用 Tracing Baggage 机制。Tracing Baggage 是分布式链路跟踪工具提供的一种能力,可以携带用户自定义的键值对,主流的跟踪工具如 Skywalking 和 OpenTelemetry 都支持该功能。使用分布式链路追踪框架可以方便地进行日志记录和问题排查,特别适用于灰度发布场景下的需求。
03、企业发布现状的痛点分析
目前企业在选择和实施发布策略时面临以下困境:
1. 从传统部署模式转变为云原生模式后,缺乏相关能力的人才进行技术架构改造,使得企业在发布策略方面难以入手。
2. 已经找到适合产品现状的发布策略,但缺乏自动化平台或工具的支持,仍然依赖手工逐步执行,可能导致流程遗漏或人工操作失误,造成生产事故。
3. 仅实现了服务级别的灰度能力,逐个发布服务耗时长,导致发布过程缓慢,验证效果不佳。
针对以上问题,ZadigX 提供了灰度发布的解决方案,帮助企业应对这些痛点。
04、全链路灰度发布的实现方案
主要有 Istio、JavaAgent 等主流方案,基于流量路由的能力,ZadigX 提供了两套通用方案:
阿里云 MSE + ZadigX
阿里云 MSE 为 Java 应用提供了便捷实现全链路灰度的能力。MSE 微服务引擎是基于 Java Agent 实现的无侵入式企业生产级服务治理产品,不需要修改任何一行业务代码,即可拥有不限于全链路灰度的治理能力,并且支持近 5 年内所有的 Spring Boot、Spring Cloud 和 Dubbo。使用 MSE 进行灰度发布的过程中,ZadigX 可以便捷得创建灰度环境和灰度 K8S 资源、结合发布工作流编排能力,自动为 K8S 资源设置 MSE 所需的资源标记,集成了 MSE API 降低重复工作量。
Istio + Distributed Tracing + ZadigX
Istio 可以无侵入得实现全链路流量路由能力,同时还可以设置基于比例、权重、HTTP Header 等条件的流量路由,但全链路数据透传需要服务本身实现,为此需要服务接入支持 Baggage 的分布式链路追踪框架,若还没接入则会涉及到一定的改造成本。ZadigX 可以根据指定的灰度任务与灰度标记规则,结合发布工作流编排能力与环境的监测管理能力,自动创建 Istio VirtualService 与 DistinationRule 资源以实现相应的泳道,达到了让开发者轻松进行全链路灰度发布的效果。
持续关注 KodeRover 公众号,后续文章将详细介绍以上两种方案的细节及实践过程。
周边放送
「 ZadigX Connects Everything 」贴纸ZadigX 定制 T 恤
获取方式
-
原文转发朋友圈,截图联系公众号客服,获得贴纸三张。
-
阅读公众号原文并在公众号评论区留言,点赞数最高的一位获得 ZadigX 定制 T 恤。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
我是 Zadig GPT 万能助手:我的名字叫 Pilot 猫
大家好,我是 KodeRover 团队新入职的智能助手 ZadigX Pilot 猫,一只基于 LLM 训练的喵星人。我的使命是成为 Zadig 社区超人,超越 MinMin,盖过凡思,碾压乔克!作为一个专业严肃的 AI Bot,我现在正趴在 KodeRover 官网右下角动着耳朵欢迎大家的召唤~ 什么?你好奇我能帮你解决什么问题?我会的可多了! 对 KodeRover 公司感兴趣?是做什么的怎么还招聘智能猫猫?这题我会🙋🏻♀️! 对 ZadigX 感兴趣?调研下能做什么,和公司现在在用的工具/平台有什么不一样?快问我快问我👻~ 想从 Zadig 升级到 ZadigX,但不确定升级后是不是更香,要是有个课代表就好了🧐~ 产品功能不会用?遇到问题不知道怎么诊断?偏偏社区群里的官方同学今天还请假了,难道就只能等等等了吗🙀!! 我只会和 Zadig 相关的知识?NO🙅🏻♀️NO🙅🏻♀️NO🙅🏻♀️,老板招聘我可是看中了我的 DevOps 专家能力的👍。 当然,我也不是天生就这么机智,刚面试时我一问三不知差点被开除😹。团队成员积极帮助,提供产品文档站、官网、解决方案...
- 下一篇
橙单低代码 v2.9 发布,多租户集成工作流和报表并换装新 UI
新版功能 感谢有 20+ 设计经验的一流设计师,帮助我们换装新版 UI。也感谢用户们耐心的等待和支持,相信橙单团队一定会让多租户支持 工作流、在线表单和报表打印 等平台化功能。在 2.9 版本我们兑现了承诺,不仅如此,橙单低代码生成工具更是能让多租户平台的开发如虎添翼,80% 的前后端代码 (绝非单表 CURD) 我们均能为您生成。如果有兴趣可以访问我们为您提供的多租户演示网站。 前端,全新的样式设计上线。 多租户,集成在线表单。 多租户,集成工作流。 多租户,集成报表打印。 多租户,支持动态多数据源。 多租户,数据同步服务优化后合并。 工作流,支持钉钉风格流程编辑器,目前已同时支持两种高颜值流程编辑器。 工作流,流程工单编号字段,升级为高可靠性的自动编码规则计算处理方式。 基础架构,在线表单、工作流和报表打印等编辑器的 UI 做了进一步的优化和统一。 基础架构,升级自动编码规则计算的高可靠性处理。 生成器,支持可生成 common-flow-online 和 common-report 位于独立的服务。 图和真相
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19