0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分布式中灰度方案就该这样设计

jf_ro2CN3Fa 来源:知了一笑 2023-06-09 15:38 次阅读

一、背景简介

分布式系统中会存在这样的开发场景,不同需求可能涉及到对同一个服务的开发,那么该服务在研发期间就会存在多个版本并行的状态,为了保持不同版本之间的隔离性,验收需要将请求路由到指定版本号的服务上处理;

56f37828-05d9-11ee-962d-dac502259ad0.png

假设存在三个服务:A、B、C,且服务B和C都存在多个版本,那么让请求按照即定的路由规则执行,即可保证研发期间的验收是版本间隔离的,并且可以实现灰度部署的策略;

二、负载策略

在微服务系统架构中,请求在服务间转发时会执行负载的策略,尤其当服务存在多版本号的集群模式时,很显然常规的轮询、权重、随机等策略无法满足需求;进行路由规则的自定义设计和开发是常见方式;

经典应用场景:在请求发起时,可以通过Header、Cookie、Parameter等不同的方式,携带路由规则的方式与参数执行匹配逻辑,从而将请求路由到指定版本的服务;

默认主分支路由

5703a608-05d9-11ee-962d-dac502259ad0.png

通常来说请求会在主干分支上执行,或者其他分支路由规则不匹配,也可以通过标识配置,判断是否由主分支兜底,甚至是存活的任意服务兜底;

存活的服务中可能存在多个版本,但是主分支Master是否存活是服务健康与否的基本标志,常规应用中路由规则如果不匹配,会由Master服务进行兜底;

版本号统一路由

571959e4-05d9-11ee-962d-dac502259ad0.png

请求通过携带分支号进行统一版本路由是常用的轻量级方案,即如果请求携带的是2.0.0的分支,则在路由时优先匹配相关版本的服务,不匹配时由Master服务处理即可;

服务定制化路由

5727e5ea-05d9-11ee-962d-dac502259ad0.png

在请求或配置中指定各个服务的路由分支号,也是常见的匹配方案,如上图在请求时指定服务B由1.0.0分支执行,服务C由3.0.0分支执行,其余服务在主干分支执行;

路由规则可以看做是对可用服务的匹配筛选,如果筛选出来的服务存在集群部署时,还要去执行相应的负载均衡策略,例如上图中当服务C的3.0.0分支是集群时,路由匹配到该版本后,再通过负载均衡的策略选中其中一个服务处理请求;

三、灰度部署

当负载均衡的策略可以按照定制化开发的规则执行时,那服务的灰度发布就会容易很多,在不影响现有服务的情况下发布新版本,同时将请求按照规则分流,完成对新服务的验收后,替换掉旧版本即可;

57327e92-05d9-11ee-962d-dac502259ad0.png

分布式系统中子服务的拆分非常多,版本开发通常只会涉及其中部分子服务,通过灰度模式将相关服务部署到线上,并且不会影响主干的服务,只有开启特定的配置才会将请求分流到灰度服务;

流程细节

1、做好路由配置和管理,请求默认在主干服务执行;

2、部署版本涉及的相关服务,灰度层面默认不会处理请求;

3、验收阶段基于配置,将指定规则的请求路由到灰度层;

4、常用规则:携带分支号、灰度用户群、比例分流、IP等;

5、完成灰度服务验收后,将相关服务标记为主干服务;

6、将旧的主干服务下线后,即本次上线流程完整结束;

7、若发现灰度服务验收失败,撤掉灰度层或修改都可以;

灰度发布的模式即依赖于自定义的路由规则,以及服务在负载均衡时权重比例倾斜,这些都可以在配置中心管理,在测试时动态修改即可;

在这种模式下,灰度服务的上线或者下线几乎是没有明显感知的,如果是相对简单的流程,由测试人员验收灰度层服务即可,如果是复杂的流程,放开一定比例的用户流量,流程观察没有问题后完成升级;

四、实践方案

1、流程设计

5741c0aa-05d9-11ee-962d-dac502259ad0.png

在灰度方案落地实践的过程中,通常客户端会携带路由规则的标识,从而将请求发送到指定服务,在规则无法正常匹配的时候,由主干服务处理,对于一些核心的开关标识在配置中心统一维护;

2、路由标识

标识获取

通常情况下,路由的标识是在请求头中携带的,这样比较方便统一管理,常用的传递格式如下:

版本号统一路由:routeId:2.0.0,即所有请求优先在2.0.0分支执行;

服务定制化路由:serverC:3.0.0,请求服务C时优先在3.0.0分支执行;

在微服务的组件中获取请求头的方式很多,比如Gateway网关中的路由过滤器,或者服务中的拦截器,都可以获取请求的相关参数信息,从而执行路由规则;

标识管理

自定义路由规则需要客户端标识,虽然获取请求中的标识并不复杂,但是将标识传递到路由规则中就涉及到上下文参数管理:

57572b2a-05d9-11ee-962d-dac502259ad0.png

写阶段:在过滤或拦截中获取路由标识,写入上下文容器;

读阶段:路由时从容器中读取标识,基于配置信息执行规则;

请求从进入网关开始,在服务间通信时会涉及负载均衡的策略,在过滤或拦截器中将标识写到上下文容器,执行路由规则需要读取上下文容器,如果标识不存在则默认选择主干服务执行请求;

3、服务选中

微服务之间通信时,选中一个服务执行请求的逻辑比较复杂,尤其在灰度模式下涉及到对路由规则的改造,即策略指定的服务优先被选中;

5761c88c-05d9-11ee-962d-dac502259ad0.png

1、从注册中心查询相应服务的可用列表;

2、基于路由规则,匹配符合请求标识的服务;

3、对筛选的结果列表执行负载均衡,选中服务;

在整个路由机制中,会涉及到匹配规则自定义改造,从常规的手段来看,将版本的分支号加载到服务的元数据信息中,再结合服务名称或者IP地址,来实现对服务列表的多维度过滤,可以支撑大部分轻量级灰度策略的实现。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 路由器
    +关注

    关注

    22

    文章

    3707

    浏览量

    113541
  • MASTER
    +关注

    关注

    0

    文章

    103

    浏览量

    11262

原文标题:分布式中灰度方案就该这样设计!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分布式软件系统

    。更重要的是,NI LabVIEW 8的分布式智能提供的解决方案不仅令这些挑战迎刃而解,且易于实施。LabVIEW 8的分布式智能具体包括: 可对分布式系统
    发表于 07-22 14:53

    LED分布式恒流原理

    需要恒流,但是电流的大小取决于应用环境,LED照明智能化发展是关键,分布式恒流技术充份预留智能化接口。在分布式LED驱动设计,驱动回搜、色温可调、灰度控制都要变得方便。这是
    发表于 03-09 16:47

    一行代码,保障分布式事务一致性—GTS:微服务架构下分布式事务解决方案

    解决方案----GTS。方案中提到的GTS是目前业界第一款,也是唯一的一款通用的解决微服务分布式事务问题的中间件,而且可以保证数据的强一致性。2 SOA
    发表于 06-05 19:14

    分布式系统的优势是什么?

    当讨论分布式系统时,我们面临许多以下这些形容词所描述的 同类型: 分布式的、删络的、并行的、并发的和分散的。分布式处理是一个相对较新的领域,所以还没有‘致的定义。与顺序计算相比、并行的、并发的和
    发表于 03-31 09:01

    HarmonyOS应用开发-分布式设计

    设计理念HarmonyOS 是面向未来全场景智慧生活方式的分布式操作系统。对消费者而言,HarmonyOS 将生活场景的各类终端进行能力整合,形成“One Super Device”,以实现
    发表于 09-22 17:11

    Qorvo分布式Wi-Fi网格解决方案

    实现互联世界的创新RF解决方案提供商Qorvo宣布,正使用 802.11ax 产品组合扩大分布式 Wi-Fi 解决方案在住宅的适用范围。
    发表于 11-02 07:01

    求一种分布式光伏发电监测系统解决方案

    分布式电站的形成基础,在碳中和方案的可选项分布式光伏由于其灵活性必将被大力发展,目前已有河北、甘肃、安徽、浙江、
    发表于 09-10 06:33

    HarmonyOS分布式应用框架深入解读

    各种各样的传感器,像手表里每天监测睡眠、每天的步行等健康的一个状态,如果这些设备仅局限在一个设备上使用那就是一个极大的限制。所以在分布式环境的编程,系统从硬件的角度提供了两个能力,第一个是全局的虚拟化,将
    发表于 11-22 15:15

    HDC2021技术分论坛:分布式调试、调优能力解决方案

    性能调优的问题,同样也困扰着很多的开发者。DevEco Studio也将新增HarmonyOS分布式性能Profiler的整体方案,在每个设备上会自动部署一个Profiler的代理,这个代理将通过
    发表于 11-22 17:17

    HDC2021技术分论坛:如何高效完成HarmonyOS分布式应用测试?

    2.0发布以来,开发者在测试和上架HarmonyOS分布式应用过程遇到很多挑战和困难。总体可归纳为以下三点:分布式应用上架测试通过率低:开发者提交上架的分布式应用基础质量较差。如图
    发表于 12-13 14:55

    如何高效完成HarmonyOS分布式应用测试?

    2.0发布以来,开发者在测试和上架HarmonyOS分布式应用过程遇到很多挑战和困难。总体可归纳为以下三点:分布式应用上架测试通过率低:开发者提交上架的分布式应用基础质量较差。如图
    发表于 12-13 18:07

    【学习打卡】OpenHarmony的分布式任务调度

    、同步、注册、调用)机制。分布式任务调度程序是能够跨多个服务器启动调度作业或工作负载的软件解决方案,整个过程是不需要人来值守的。举个例子,我们可以在一台或多台机器上安装分布式调度器,用户可以通过它在
    发表于 07-18 17:06

    分布式对象调试的事件模型

    针对事件的分布式程序调试过程,需处理大量的事件消息,如果处理不当,则会影响分布式程序的执行,提出了一种分布式对象的事件模型,采用这种模型
    发表于 12-10 17:29 8次下载

    springcloud 分布式事务解决方案实例

    么都执行成功,要么都执行失败。本文将介绍如何使用Spring Cloud来实现分布式事务。 在分布式系统,使用数据库事务来保证数据一致性是常见的做法。Spring Cloud通过集成各种分布
    的头像 发表于 12-03 16:32 1094次阅读

    分布式光纤测温解决方案

    分布式光纤测温解决方案
    的头像 发表于 11-12 01:02 82次阅读
    <b class='flag-5'>分布式</b>光纤测温解决<b class='flag-5'>方案</b>