课程 ID: 16974
描述:
案例背景:
随着近几年微盟业务范围的快速拓展,商家用户不断增多对微盟业务研发团队提出更高的版本迭代速度与质量要求:1.研发团队需要进行多版本并行测试;2.在快速迭代上线的过程中,需要降低对生产环境稳定性的影响,做到又快又稳。
基于此,全链路灰度平台应运而生。借助平台,研发可以根据迭代诉求快速隔离一套测试环境,各个环境之间互不影响。除此之外,平台提供了逐步放流、动态扩容、秒级回滚、灰度平滑转正等一系列能力降低发布风险,保证生产安全。
得益于灰度平台,目前我们研发团队基本可以做到:零故障上线、发布零流量损失,极大的保障了微盟的生产环境稳定性。
解决思路:
1、全链路灰度需要解决哪些问题
- 灰度涉及的资源如何跟生产环境隔离。
- 流量标签如何在链路上透传。
- 如何对不同的框架跟SDK提供支持,快速安全的接入到灰度。
- 灰度的数据一致性问题。
2、针对这些问题有哪些解决方案
- 考虑到灰度跟生产的隔离,我们需要从稳定性、可维护性、成本、性能、实施复杂度等多方面进行考虑,由于涉及的资源类型不同,我们也需要采取不同的方案。
大体可以分为物理隔离跟逻辑隔离两种方式。通常来说如果采用物理隔离的方式,隔离程度高,对生产环境的稳定性影响小,安全,但同时会带来新的问题,例如成本过高、跨集群访问实现复杂,维护难度增大;如果采用逻辑隔离的方式,隔离程度相对较低,好处是成本降低,实现简单,但是由于隔离程度低,导致灰度环境可能对生产环境产生影响,同时灰度监控的实现难度也增大
- 流量标签的透传。可以借助分布式链路的思路,实现流量标签的跨进程、跨线程透传
全链路灰度涉及到的框架及SDK往往比较多,通常有两种方式:对每个SDK进行改造;使用JavaAgent对不同的框架及SDK做统一增强。二者各有优劣,如果框架及SDK数量少,推荐使用前者,如果框架及SDK较多,并且版本复杂,推荐使用agent的方式
- 灰度的数据一致性问题。灰度的数据分为两部分:业务数据、灰度策略信息。
灰度过程中业务数据的一致性指的是
1、灰度产生的数据需要被灰度处理;
2、生产产生的数据可以被灰度或生产处理(灰度需要向前兼容)
灰度策略一致性指的是,当灰度平台下发策略到各个运行实例时,要尽量保证不同实例策略生效差异小,甚至为0。
业务数据的一致性通常需要使用方来保证,而灰度策略的一致性可以通过添加统一生效时间戳或二阶段提交的方式实现
3、微盟已落地的全链路灰度平台介绍
- 架构设计
- 灰度生命周期介绍,一个完整的灰度需要经历哪些阶段
- 如何完成快速回滚
- 如何完成平滑转正
- 如何按需扩容
成果:
灰度平台上线后,研发可以根据迭代诉求快速隔离一套测试环境,各个环境之间互不影响。除此之外,平台提供了逐步放流、动态扩容、秒级回滚、灰度平滑转正等一系列能力降低发布风险,保证生产安全。
得益于灰度平台,目前我们研发团队基本可以做到:零故障上线、发布零流量损失,极大的保障了微盟的生产环境稳定性。