CN114579162B - 一种基于事件驱动和水平触发的灰度发布方法 - Google Patents
一种基于事件驱动和水平触发的灰度发布方法 Download PDFInfo
- Publication number
- CN114579162B CN114579162B CN202210490396.7A CN202210490396A CN114579162B CN 114579162 B CN114579162 B CN 114579162B CN 202210490396 A CN202210490396 A CN 202210490396A CN 114579162 B CN114579162 B CN 114579162B
- Authority
- CN
- China
- Prior art keywords
- gray level
- gray
- service
- gray scale
- canarydeployment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0893—Assignment of logical groups to network elements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0896—Bandwidth or capacity management, i.e. automatically increasing or decreasing capacities
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种基于事件驱动和水平触发的灰度发布方法,包括:创建灰度发布,创建灰度实例,根据灰度的策略设置流量网关路由规则;更新CanaryDeployment的对象,对灰度实例的配置根据请求情况进行缺陷修复,然后根据请求量进行扩容或缩容,根据灰度范围从小到大逐步多次调整灰度的策略,将最新的CanaryDeployment的对象采用水平触发更新灰度实例,根据灰度的策略设置流量网关路由规则;开启CanaryDeployment的对象的灰度替换开关,将容器编排服务获取原服务对应的无状态服务升级成更新的灰度实例的配置。本发明基于事件驱动和水平触发,两者结合,实时性更好,效率更高。
Description
技术领域
本发明涉及灰度发布技术领域,具体涉及一种基于事件驱动和水平触发的灰度发布方法。
背景技术
灰度发布,是当产品需要更新时,先将一部分请求流量引导到产品新的版本上,观察这部分请求是否符合预期,如果符合预期,则完成灰度,即将产品完整更新到最新版本上;如果不符合预期,则取消灰度,将灰度的流量重新引导回老产品上。这种发布方式,可以有效回避产品发布可能出现的风险,有效保证产品发布的准确性,因此,灰度发布,是目前企业在生产环境中实施发布时的常用手段。灰度发布一般包含创建灰度服务、更新灰度服务、完成灰度以及取消灰度等实施过程阶段。
创建灰度服务阶段,是灰度发布的第一个阶段,一次灰度发布只会经历一次。在该阶段中,会依次实施创建灰度服务、等待灰度服务启动完成、修改流量网关路由规则等过程。
更新灰度服务阶段,是灰度发布的中间阶段,一次灰度发布可能不经历该阶段也可能会经历多次。在该阶段中,会依次实施更新灰度服务版本、等待灰度服务完成升级、修改流量网关路由规则等过程。该阶段的目的是针对最新版本的存在缺陷可进行紧急修复并发布,如新版本没有缺陷则不会经历该阶段。
完成灰度阶段,是灰度发布的结束阶段。在经过一定时间对灰度流量的监控,发现产品新老功能运行正常,便会进入该阶段。在该阶段中,会依次实施更新原服务到新版本、等待原服务升级完成、修改流量网关路由规则、删除灰度服务等过程。该阶段结束意味着本次发布成功完成。
取消灰度阶段,是灰度发布的结束阶段。不同于完成灰度阶段,该阶段意味着新功能存在无法快速修复的缺陷、或者新功能存在致命缺陷需要立即中止灰度。在该阶段中,会依次执行修改流量网关路由规则、删除灰度服务等过程。
在依托于 Kubernetes 的云原生灰度发布中,现有技术一般采用以下方案:
一、在创建灰度服务阶段
(1)实施创建灰度服务过程,通过 K8s 创建一个灰度的无状态服务,并将该记录在数据库中;
(2)实施等待灰度服务启动过程,通过定时器轮询的方式,查看灰度的无状态服务是否启动完成,如未完成则继续等待,否则执行下一步。只有当灰度的无状态服务启动完成,才能确保其能够承载灰度流量;
(3)实施修改流量网关路由规则过程,根据灰度策略,修改流量网关路由规则。例如,灰度策略为将 HTTP User-Agent 头部中包含 Chrome 的请求,按 10% 的比例,引导到灰度的无状态服务中去。
二、在更新灰度服务阶段
(1)实施更新灰度服务版本过程,通过 K8s 更新灰度的无状态服务,并将状态记入到对应的灰度服务数据库记录中;
(2)实施等待灰度服务完成升级过程,通过定时器轮询的方式,查看灰度的无状态服务是否升级完成,如未完成则继续等待,否则执行下一步;
(3)实施修改流量网关路由规则过程,根据灰度策略,修改流量网关路由规则。
三、在完成灰度阶段
(1)实施更新原服务到新版本过程,通过 K8s 更新原服务到新版本,并将状态记入到对应的灰度服务数据库记录中;
(2)实施等待原服务升级完成过程,通过定时轮询的方式,查看原服务是否升级完成,如未完成则记录等待,否则执行下一步;
(3)实施修改流量网关路由规则过程,修改流量网关路由规则,将灰度流量重新引导到升级后的原服务中,至此所有流量都被引导到升级后的原服务中;
(4)实施删除灰度服务过程,通过 K8s 删除灰度的无状态服务。
四、在取消灰度阶段
(1)实施修改流量网关路由规则过程,修改流量网关路由规则,将灰度流量重新引导到升级后的原服务中,至此所有流量都被引导到升级后的原服务中;
(2)实施删除灰度服务过程,通过 K8s 删除灰度的无状态服务。
现有的技术方案中,存在以下几个缺点:
(1)性能差。通过定时轮询的方式来,来判断服务是否完成启动、升级,效率低下,当灰度服务个数较多时,会出现性能瓶颈,最终可能导致灰度发布异常;
(2)无法保证一致性。单纯通过数据库来维护相关状态,可能会出现不一致的情况。例如,在创建灰度阶段实施后,连续提交两次更新灰度请求,进入到更新灰度服务阶段的等待灰度更新完成升级过程后,会出现无法准确识别按哪次更新灰度请求来等待的问题,以及按按此更新灰度请求来实施修改流量网关路由规则的问题。
发明内容
本发明提供了一种基于事件驱动和水平触发的灰度发布方法,本发明基于事件驱动和水平触发,两者结合,实时性更好,效率更高。
一种基于事件驱动和水平触发的灰度发布方法,包括以下步骤:
1)创建灰度发布,基于创建灰度发布该事件创建灰度实例,根据灰度的策略设置流量网关路由规则;
创建灰度发布具体包括:在容器编排服务中基于原服务创建一个CanaryDeployment的对象;
2)更新CanaryDeployment的对象,对灰度实例的配置根据请求情况进行缺陷修复,然后根据请求量进行扩容或缩容,根据灰度范围从小到大逐步多次调整灰度的策略,基于更新CanaryDeployment的对象事件,将最新的CanaryDeployment的对象采用水平触发方式更新灰度实例,根据灰度的策略设置流量网关路由规则;
水平触发为 Level Triggered,简称 LT,为现有技术,水平触发关心的是缓冲区的状态,当缓冲区可读的时候,就会发出通知,也就是当缓冲区中只要有数据就会发出通知。本发明中采用了水平触发方式更新灰度实例,当对象数据是可读时,系统通过水平触发感知到对象数据,并根据当前对象状态做出响应并继续执行灰度发布流程。采用水平触发方式更新灰度实例,即使系统宕机,或者因为其他某些原因错过了部分事件,也可以根据当前对象的状态做出正确的响应,大大提升了系统的可靠性;
根据灰度实例的反馈情况,如符合发布要求,则进入步骤3);
根据灰度实例的反馈情况,如不符合发布要求,则进入到步骤4);
3)开启CanaryDeployment的对象的灰度替换开关,将容器编排服务获取原服务对应的无状态服务升级成步骤2)更新的灰度实例的配置,请求容器编排服务获取原服务对应的无状态服务下的所有实例状态,即对应的实例是否已经全部启动完成;
如果全部启动完成,调整流量网关路由规则,将流量 100% 引导到原服务的无状态服务上,删除CanaryDeployment的对象,完成灰度发布;
如果没有全部启动,则等待CanaryDeployment的对象的更新事件,再请求容器编排服务获取原服务对应的无状态服务下的所有实例状态,即对应的实例是否已经全部启动完成;
4)删除CanaryDeployment的对象,调整流量网关路由规则,将流量 100% 引导到原服务的无状态服务上,删除灰度实例,取消灰度发布。
步骤1)中,CanaryDeployment的对象包括:对根据灰度的需要设置相关的字段。相关的字段包括:灰度实例的配置、灰度的策略、灰度替换开关。
与现有技术相比,本发明具有如下优点:
一、本发明采用事件驱动,相比原来的基于定时器轮询的方式,实时性更好,一旦有相关修改发生,就会触发对应的处理逻辑,处理时效性更优;
二、采用水平触发,相比原来的同步处理方式,效率更高,只需要对最终期望状态负责,不需要关心中间出现过多少次更新灰度服务请求。
附图说明
图1为本发明基于事件驱动和水平触发的灰度发布方法的流程示意图。
具体实施方式
定义如下 Kubernetes 自定义资源,记录了一次灰度发布相关的信息,包含灰度发布的名称、灰度发布的版本信息、灰度实例的个数、灰度网关路由规则、灰度请求权重、灰度实例对应的配置、是否完成灰度的开关。
CanaryDeployment的对象定义申明如下:
apiVersion: apps.upyun.com/v1alpha1
kind: CanaryDeployment
metadata:
name: nginx-canary
namespace: default
spec:
version: v1
parentDeployment: nginx
replicas: 1
apisix: nginx-80
apisixRouteMatches: $apisixRoute
weight: 40
replace: false
template: $podTemplate。
发布人员对一次发布的增删改查,都被一一对应到对CanaryDeployment这个对象的操作。
(1)创建灰度发布,在 Kubernetes 中创建一个CanaryDeployment的对象,对根据灰度的需要设置相关的字段,例如灰度实例的配置、灰度的策略、灰度替换开关。
(2)更新灰度发布,当灰度发布需要紧急修复时,可以通过修改对应的CanaryDeployment中相关的字段,例如,实例镜像配置,来对灰度服务进行调整。
(3)完成灰度,当灰度发布符合预期后,将原服务发布升级时,更新CanaryDeployment中 replace 字段为 true,即可完成灰度发布。
(4)取消灰度,当灰度发布遇到不可立即修复的缺陷时,删除对应的CanaryDeployment即可完成取消灰度发布。
如图1所示,为本发明实施的流程图,具体包括如下步骤:
一、通过 Kubernetes watch api监听CanaryDeployment(灰度更新对象)资源的创建更新删除等操作事件;
二、获取到操作事件后,判断该事件对应的CanaryDeployment资源处于什么阶段;
三、如果是完成灰度阶段;
3.1)查看CanaryDeployment Annotations 中apps.crd.upyun.com/canary-replaced是否已经被标记为 true,如果未标记,执行以下步骤:
3.1.1)更新CanaryDeployment状态为 Replacing(替换中);
3.1.2)请求 Kubernetes 获取原服务对应的 Deployment 信息,检查原服务对应的 Deployment 是否已经被升级成新版本,如果未升级,则请求Kubernetes 升级Deployment 到指定新版本,并标记 Annotations apps.crd.upyun.com/canary-replaced字段为 true;
3.2)请求 Kubernetes 获取原服务对应的 Deployment 下的所有实例状态,检查原服务对应的 Deployment 是否已经完成升级,即对应的实例是否已经全部启动完成。如果未全部升级完成,则停止继续处理该事件;
3.3)调整流量网关路由规则,将流量 100% 引导到原服务的 Deployment 上;
3.4)将CanaryDeployment状态标记为 Replaced(已替换);
3.5)删除CanaryDeployment资源对象;
四、如果是取消灰度阶段;
4.1)更新CanaryDeployment的状态为 Deleting(删除中);
4.2)请求 Kubernetes 获取原服务对应的 Deployment 下的所有实例状态,检查原服务是否已经为稳定状态。如果未处于稳定状态,则停止继续处理该事件;
4.3)调整流量网关路由规则,将流量 100% 引导到原服务的 Deployment 上;
4.4)删除CanaryDeployment中的删除保护,保证其后续会被 Kubernetes 回收。
五、如果是创建与更新阶段
5.1)检查CanaryDeployment是否包含了删除保护 Finalizer(对象的终止者),如果没有则更新CanaryDeployment增加删除保护;
5.2)请求 Kubernetes 检查CanaryDeployment对应的 Deployment 是否存在,如不存在,则根据CanaryDeployment中灰度服务的定义,请求 Kubernetes 创建Deployment,并停止处理当前事件;
5.3)请求 Kubernetes 检查CanaryDeployment对应的 Deployment 版本是否与CanaryDeployment定义的灰度服务一致,如不一致,则请求 Kubernetes 更新该Deployment,并停止处理当前事件;
5.4)请求 Kubernetes 检查CanaryDeployment对应的 Deployment 的所有实例是否都已经正常运行,如果未正常运行,则停止处理当前事件;
5.5)根据CanaryDeployment中定义的灰度策略,调整流量网关路由规则,将部分请求流量引导到CanaryDeployment对应的 Deployment 中去。
Claims (4)
1.一种基于事件驱动和水平触发的灰度发布方法,其特征在于,包括以下步骤:
1)创建灰度发布,基于创建灰度发布的事件创建灰度实例,根据灰度的策略设置流量网关路由规则;
2)更新CanaryDeployment的对象,对灰度实例的配置根据请求情况进行缺陷修复,然后根据请求量进行扩容或缩容,根据灰度范围从小到大逐步多次调整灰度的策略,基于更新CanaryDeployment的对象事件,将最新的CanaryDeployment的对象采用水平触发更新灰度实例,根据灰度的策略设置流量网关路由规则;
根据灰度实例的反馈情况,如符合发布要求,则进入步骤3);
根据灰度实例的反馈情况,如不符合发布要求,则进入到步骤4);
3)开启CanaryDeployment的对象的灰度替换开关,将容器编排服务获取原服务对应的无状态服务升级成步骤2)更新的灰度实例的配置,请求容器编排服务获取原服务对应的无状态服务下的所有实例状态,即对应的实例是否已经全部启动完成;
如果全部启动完成,调整流量网关路由规则,将流量 100% 引导到原服务的无状态服务上,删除CanaryDeployment的对象,完成灰度发布;
如果没有全部启动,则等待CanaryDeployment的对象的更新事件,再请求容器编排服务获取原服务对应的无状态服务下的所有实例状态,即对应的实例是否已经全部启动完成;
4)删除CanaryDeployment的对象,调整流量网关路由规则,将流量 100% 引导到原服务的无状态服务上,删除灰度实例,取消灰度发布。
2.根据权利要求1所述的基于事件驱动和水平触发的灰度发布方法,其特征在于,步骤1)中,创建灰度发布具体包括:在容器编排服务中基于原服务创建一个CanaryDeployment的对象。
3.根据权利要求2所述的基于事件驱动和水平触发的灰度发布方法,其特征在于,步骤1)中,CanaryDeployment的对象包括:对根据灰度的需要设置相关的字段。
4.根据权利要求3所述的基于事件驱动和水平触发的灰度发布方法,其特征在于,相关的字段包括:灰度实例的配置、灰度的策略、灰度替换开关。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210490396.7A CN114579162B (zh) | 2022-05-07 | 2022-05-07 | 一种基于事件驱动和水平触发的灰度发布方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210490396.7A CN114579162B (zh) | 2022-05-07 | 2022-05-07 | 一种基于事件驱动和水平触发的灰度发布方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114579162A CN114579162A (zh) | 2022-06-03 |
CN114579162B true CN114579162B (zh) | 2022-08-23 |
Family
ID=81769219
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210490396.7A Active CN114579162B (zh) | 2022-05-07 | 2022-05-07 | 一种基于事件驱动和水平触发的灰度发布方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114579162B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110888666A (zh) * | 2019-12-12 | 2020-03-17 | 北京中电普华信息技术有限公司 | 基于应用负载均衡的灰度发布方法在云服务系统中的应用 |
WO2020181684A1 (zh) * | 2019-03-12 | 2020-09-17 | 平安科技(深圳)有限公司 | 管理灰度发布的方法、系统、设备及存储介质 |
CN112073320A (zh) * | 2020-11-12 | 2020-12-11 | 深圳壹账通智能科技有限公司 | 基于云网关的api灰度发布方法、装置及计算机设备 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110365502B (zh) * | 2018-03-26 | 2021-04-09 | 华为技术有限公司 | 一种服务升级管理的方法、装置及存储介质 |
CN110784409B (zh) * | 2019-10-31 | 2022-08-09 | 长沙水羊网络科技有限公司 | 一种基于Spring Cloud的微服务灰度发布方法 |
CN111488159A (zh) * | 2019-12-20 | 2020-08-04 | 杭州当虹科技股份有限公司 | 一种能够动态配置的灰度发布方法 |
CN112000434A (zh) * | 2020-08-14 | 2020-11-27 | 苏州浪潮智能科技有限公司 | 一种基于Kubernetes动态管理服务治理规则配置方法和系统 |
CN112130892A (zh) * | 2020-09-23 | 2020-12-25 | 平安科技(深圳)有限公司 | 产品灰度发布方法、装置、设备及存储介质 |
CN113992740B (zh) * | 2021-10-26 | 2024-03-22 | 超越科技股份有限公司 | 一种基于自主可控的中间件及数据传输方法 |
-
2022
- 2022-05-07 CN CN202210490396.7A patent/CN114579162B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020181684A1 (zh) * | 2019-03-12 | 2020-09-17 | 平安科技(深圳)有限公司 | 管理灰度发布的方法、系统、设备及存储介质 |
CN110888666A (zh) * | 2019-12-12 | 2020-03-17 | 北京中电普华信息技术有限公司 | 基于应用负载均衡的灰度发布方法在云服务系统中的应用 |
CN112073320A (zh) * | 2020-11-12 | 2020-12-11 | 深圳壹账通智能科技有限公司 | 基于云网关的api灰度发布方法、装置及计算机设备 |
Non-Patent Citations (1)
Title |
---|
电子银行系统灰度发布的研究与实现;李晓毅;《金融电子化》;20180115(第01期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114579162A (zh) | 2022-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110321254B (zh) | 软件版本回滚方法、装置、服务器及存储介质 | |
US9311064B1 (en) | Systems and methods for automated centralized build/merge management | |
CN105739968B (zh) | 基于分布式版本控制系统Git的更新内容的评审方法和装置 | |
CN104809025A (zh) | 一种项目上线方法及装置 | |
CN112860313B (zh) | 基于需求条目的文档和版本检查方法及装置 | |
CN105549959A (zh) | 编译检查方法及装置 | |
CN111784292A (zh) | 电子客票的退票方法及装置、航司系统及支付系统 | |
CN114840248A (zh) | 一种基于企业级分布式应用服务的系统灰度发布方法 | |
CN114579162B (zh) | 一种基于事件驱动和水平触发的灰度发布方法 | |
CN106791932B (zh) | 分布式转码系统、方法及其装置 | |
CN115438987A (zh) | 基于交付流水线的应急处理方法、装置、设备及介质 | |
CN112416791B (zh) | 一种测试对象的缺陷信息处理系统和方法 | |
CN111459530A (zh) | 打补丁方法、装置和存储介质 | |
CN112230985B (zh) | 静态文件流程、小程序版本管理方法、装置及计算机设备 | |
CN115309558A (zh) | 一种资源调度管理系统、方法、计算机设备及存储介质 | |
CN111080250B (zh) | 流程回退补偿方法、装置、存储介质及电子设备 | |
CN113791977A (zh) | 代码开发的处理方法、装置、电子设备与存储介质 | |
CN105590377A (zh) | 销售点终端装置及其程序更新方法 | |
CN110262997A (zh) | 用于管理公共文件的方法和系统 | |
CN116319651B (zh) | 报表邮件的推送方法、装置、终端以及存储介质 | |
CN116893834B (zh) | 负载更新方法、装置、系统、电子设备及可读存储介质 | |
CN116167699B (zh) | 一种装备保障资源管理方法及系统 | |
CN114610346B (zh) | 软件升级方法、装置、存储介质和电子设备 | |
CN115291940B (zh) | App发版处理方法、装置、开发处理系统及存储介质 | |
TWI773939B (zh) | 版本管理系統、版本管理方法及非揮發性電腦可讀取記錄媒體 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |