全链路灰度在微盟的落地

本文介绍了微盟全链路灰度的背景、挑战及解决方案。面对多环境需求,微盟需要解决资源隔离、流量标签传递和多框架支持等问题。在K8s、RPC和MQ等方面实现逻辑隔离,利用JavaAgent进行无侵入增强。通过灰度平台,微盟实现了灵活的策略调整,支持流量逐步放大和一键回滚,未来规划包括强化监控能力和开放灰度能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、设计背景

  • 随着近几年微盟业务范围的快速拓展,商家用户不断增多对微盟业务研发团队提出更高的版本迭代速度与质量要求。在多环境推出之前,业务研发团队进行产品并行迭代开发时,因测试环境单一无法满足并行提测,而建设多套测试环境的维护与实际成本又过于高昂,遂转向对多环境灰度进行立项研发。

  • 微盟业务线众多且存在相互依赖,而微盟所有应用均采用微服务模式。以上导致微盟一次发布迭代涉及的应用数众多,需要上下游人力协调进行发布,且发布过程中出现问题时需要挨个回滚。整个发布极不灵活且存在不可控风险。

二、全链路灰度带来的挑战

一次发布往往对应一次业务迭代,在单体架构盛行的时候,由于一次迭代往往都只涉及一个服务,灰度发布通常也只针对单个应用。但随着微服务的发展,单个服务的职责越来越单一,服务的拆分越来越细,服务的数量越来越多,一次业务迭代往往涉及到多个服务,这个时候为了实现一次迭代的灰度上线,我们需要考虑的不再是单个应用的灰度,而是满足了灰度策略的流量在全链路上的每个应用都需要进入对应的灰度环境,即:全链路灰度。二者区别如下所示:

image-20230216194346805

相比传统的灰度发布,全链路灰度复杂度更高,需要解决的问题更多。

1、资源隔离

资源隔离的必要性在于

  1. 实现全链路灰度的前提在于能够区分灰度环境跟生产环境,根据流量标签确保灰度流量进入灰度环境,这就要求我们对灰度环境内的资源进行隔离。当然这里说的隔离并不意味着要重新部署一套环境,而是基于各种资源的差异性、实际的需求以及成本各方面考虑决定的隔离方案,也有可能是逻辑上的隔离
  2. 尽可能避免灰度环境影响生产环境的稳定性。隔离程度越高,对生产环境影响更低
  3. 我们需要对灰度环境建立完善的监控。隔离程度越高,监控成本更低,更方便建立完善的监控机制
  4. 合适的隔离机制,会让我们管理维护更加方便
K8s

对于K8s集群有两种隔离方式

  1. 物理隔离,灰度环境跟生产环境使用两套不同的集群。

这种方案的缺陷在于在其中部署服务的灰度版本,由于与正式环境隔离,正式环境中的其他服务无法访问到需要灰度的服务,所以需要在灰度环境中冗余部署这些线上服务,以便整个调用链路正常进行流量转发。此外,注册中心等一些其他依赖的中间件组件也需要冗余部署在灰度环境中,保证微服务之间的可见性问题,确保获取的节点 IP 地址只属于当前的网络环境。

这个方案一般用于企业的测试、预发开发环境的搭建,对于线上灰度发布引流的场景来说其灵活性不够。况且,微服务多版本的存在在微服务架构中是家常便饭,需要为这些业务场景采用堆机器的方式来维护多套灰度环境。如果应用数目过多,会造成运维、机器成本过大,成本和代价远超收益

  1. 目前业界常见的做法是通过标签对K8s中的资源:Deployment、Svc、Pod等做逻辑隔离,灰度跟生产使用同一套物理集群,如下图所示:

image-20230218175045537

RPC

对于PRC来说,涉及Provider(服务提供者)、Con

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微盟技术中心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值