一种基于事件驱动和水平触发的灰度发布方法技术

技术编号:33700737 阅读:14 留言:0更新日期:2022-06-06 08:09
本发明专利技术公开了一种基于事件驱动和水平触发的灰度发布方法,包括:创建灰度发布,创建灰度实例,根据灰度的策略设置流量网关路由规则;更新CanaryDeployment的对象,对灰度实例的配置根据请求情况进行缺陷修复,然后根据请求量进行扩容或缩容,根据灰度范围从小到大逐步多次调整灰度的策略,将最新的CanaryDeployment的对象采用水平触发更新灰度实例,根据灰度的策略设置流量网关路由规则;开启CanaryDeployment的对象的灰度替换开关,将容器编排服务获取原服务对应的无状态服务升级成更新的灰度实例的配置。本发明专利技术基于事件驱动和水平触发,两者结合,实时性更好,效率更高。更高。更高。

【技术实现步骤摘要】
一种基于事件驱动和水平触发的灰度发布方法


[0001]本专利技术涉及灰度发布
,具体涉及一种基于事件驱动和水平触发的灰度发布方法。

技术介绍

[0002]灰度发布,是当产品需要更新时,先将一部分请求流量引导到产品新的版本上,观察这部分请求是否符合预期,如果符合预期,则完成灰度,即将产品完整更新到最新版本上;如果不符合预期,则取消灰度,将灰度的流量重新引导回老产品上。这种发布方式,可以有效回避产品发布可能出现的风险,有效保证产品发布的准确性,因此,灰度发布,是目前企业在生产环境中实施发布时的常用手段。灰度发布一般包含创建灰度服务、更新灰度服务、完成灰度以及取消灰度等实施过程阶段。
[0003]创建灰度服务阶段,是灰度发布的第一个阶段,一次灰度发布只会经历一次。在该阶段中,会依次实施创建灰度服务、等待灰度服务启动完成、修改流量网关路由规则等过程。
[0004]更新灰度服务阶段,是灰度发布的中间阶段,一次灰度发布可能不经历该阶段也可能会经历多次。在该阶段中,会依次实施更新灰度服务版本、等待灰度服务完成升级、修改流量网关路由规则等过程。该阶段的目的是针对最新版本的存在缺陷可进行紧急修复并发布,如新版本没有缺陷则不会经历该阶段。
[0005]完成灰度阶段,是灰度发布的结束阶段。在经过一定时间对灰度流量的监控,发现产品新老功能运行正常,便会进入该阶段。在该阶段中,会依次实施更新原服务到新版本、等待原服务升级完成、修改流量网关路由规则、删除灰度服务等过程。该阶段结束意味着本次发布成功完成。
[0006]取消灰度阶段,是灰度发布的结束阶段。不同于完成灰度阶段,该阶段意味着新功能存在无法快速修复的缺陷、或者新功能存在致命缺陷需要立即中止灰度。在该阶段中,会依次执行修改流量网关路由规则、删除灰度服务等过程。
[0007]在依托于 Kubernetes 的云原生灰度发布中,现有技术一般采用以下方案:一、在创建灰度服务阶段(1)实施创建灰度服务过程,通过 K8s 创建一个灰度的无状态服务,并将该记录在数据库中;(2)实施等待灰度服务启动过程,通过定时器轮询的方式,查看灰度的无状态服务是否启动完成,如未完成则继续等待,否则执行下一步。只有当灰度的无状态服务启动完成,才能确保其能够承载灰度流量;(3)实施修改流量网关路由规则过程,根据灰度策略,修改流量网关路由规则。例如,灰度策略为将 HTTP User

Agent 头部中包含 Chrome 的请求,按 10% 的比例,引导到灰度的无状态服务中去。
[0008]二、在更新灰度服务阶段
(1)实施更新灰度服务版本过程,通过 K8s 更新灰度的无状态服务,并将状态记入到对应的灰度服务数据库记录中;(2)实施等待灰度服务完成升级过程,通过定时器轮询的方式,查看灰度的无状态服务是否升级完成,如未完成则继续等待,否则执行下一步;(3)实施修改流量网关路由规则过程,根据灰度策略,修改流量网关路由规则。
[0009]三、在完成灰度阶段(1)实施更新原服务到新版本过程,通过 K8s 更新原服务到新版本,并将状态记入到对应的灰度服务数据库记录中;(2)实施等待原服务升级完成过程,通过定时轮询的方式,查看原服务是否升级完成,如未完成则记录等待,否则执行下一步;(3)实施修改流量网关路由规则过程,修改流量网关路由规则,将灰度流量重新引导到升级后的原服务中,至此所有流量都被引导到升级后的原服务中;(4)实施删除灰度服务过程,通过 K8s 删除灰度的无状态服务。
[0010]四、在取消灰度阶段(1)实施修改流量网关路由规则过程,修改流量网关路由规则,将灰度流量重新引导到升级后的原服务中,至此所有流量都被引导到升级后的原服务中;(2)实施删除灰度服务过程,通过 K8s 删除灰度的无状态服务。
[0011]现有的技术方案中,存在以下几个缺点:(1)性能差。通过定时轮询的方式来,来判断服务是否完成启动、升级,效率低下,当灰度服务个数较多时,会出现性能瓶颈,最终可能导致灰度发布异常;(2)无法保证一致性。单纯通过数据库来维护相关状态,可能会出现不一致的情况。例如,在创建灰度阶段实施后,连续提交两次更新灰度请求,进入到更新灰度服务阶段的等待灰度更新完成升级过程后,会出现无法准确识别按哪次更新灰度请求来等待的问题,以及按按此更新灰度请求来实施修改流量网关路由规则的问题。

技术实现思路

[0012]本专利技术提供了一种基于事件驱动和水平触发的灰度发布方法,本专利技术基于事件驱动和水平触发,两者结合,实时性更好,效率更高。
[0013]一种基于事件驱动和水平触发的灰度发布方法,包括以下步骤:1)创建灰度发布,基于创建灰度发布该事件创建灰度实例,根据灰度的策略设置流量网关路由规则;创建灰度发布具体包括:在容器编排服务中基于原服务创建一个CanaryDeployment的对象;2)更新CanaryDeployment的对象,对灰度实例的配置根据请求情况进行缺陷修复,然后根据请求量进行扩容或缩容,根据灰度范围从小到大逐步多次调整灰度的策略,基于更新CanaryDeployment的对象事件,将最新的CanaryDeployment的对象采用水平触发方式更新灰度实例,根据灰度的策略设置流量网关路由规则;水平触发为 Level Triggered,简称 LT,为现有技术,水平触发关心的是缓冲区的状态,当缓冲区可读的时候,就会发出通知,也就是当缓冲区中只要有数据就会发出通
知。本专利技术中采用了水平触发方式更新灰度实例,当对象数据是可读时,系统通过水平触发感知到对象数据,并根据当前对象状态做出响应并继续执行灰度发布流程。采用水平触发方式更新灰度实例,即使系统宕机,或者因为其他某些原因错过了部分事件,也可以根据当前对象的状态做出正确的响应,大大提升了系统的可靠性;根据灰度实例的反馈情况,如符合发布要求,则进入步骤3);根据灰度实例的反馈情况,如不符合发布要求,则进入到步骤4);3)开启CanaryDeployment的对象的灰度替换开关,将容器编排服务获取原服务对应的无状态服务升级成步骤2)更新的灰度实例的配置,请求容器编排服务获取原服务对应的无状态服务下的所有实例状态,即对应的实例是否已经全部启动完成;如果全部启动完成,调整流量网关路由规则,将流量 100% 引导到原服务的无状态服务上,删除CanaryDeployment的对象,完成灰度发布;如果没有全部启动,则等待CanaryDeployment的对象的更新事件,再请求容器编排服务获取原服务对应的无状态服务下的所有实例状态,即对应的实例是否已经全部启动完成;4)删除CanaryDeployment的对象,调整流量网关路由规则,将流量 100% 引导到原服务的无状态服务上,删除灰度实例,取消灰度发布。
[0014]步骤1)中,CanaryDeployment的对象包括:对根据灰度的需要设置相关的字段。相关的字段包括:灰度实例的配置、灰度的策略、灰度替换开关。
[0015]与现有技术相比,本专利技术本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于事件驱动和水平触发的灰度发布方法,其特征在于,包括以下步骤:1)创建灰度发布,基于创建灰度发布该事件创建灰度实例,根据灰度的策略设置流量网关路由规则;2)更新CanaryDeployment的对象,对灰度实例的配置根据请求情况进行缺陷修复,然后根据请求量进行扩容或缩容,根据灰度范围从小到大逐步多次调整灰度的策略,基于更新CanaryDeployment的对象事件,将最新的CanaryDeployment的对象采用水平触发方式更新灰度实例,根据灰度的策略设置流量网关路由规则;根据灰度实例的反馈情况,如符合发布要求,则进入步骤3);根据灰度实例的反馈情况,如不符合发布要求,则进入到步骤4);3)开启CanaryDeployment的对象的灰度替换开关,将容器编排服务获取原服务对应的无状态服务升级成步骤2)更新的灰度实例的配置,请求容器编排服务获取原服务对应的无状态服务下的所有实例状态,即对应的实例是否已经全部启动完成;4)删除CanaryDeployment的对象,调整流量网关路由规则,将流量 100% 引导到原服务的无状态服务上,删除灰度实例,取消灰度发...

【专利技术属性】
技术研发人员:莫红波
申请(专利权)人:杭州又拍云科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1