Skip to content

如何设计全链路智能编排高级蓝绿灰度发布界面

HaojunRen edited this page Sep 12, 2024 · 24 revisions

全链路蓝绿灰度发布管理界面

管理界面的元素数据,通过数据库存储

表格元素

① 〔发布名称〕,全局唯一

② 〔发布类型〕,包括三个:蓝绿灰度混合。其中,混合指蓝绿灰度混合发布

③ 〔发布状态〕,包括四个:兜底发布回滚结束,指当前发布执行到哪个状态。其中,回滚兜底等效

④ 〔订阅模式〕,包括两个:局部订阅全局订阅。其中,局部订阅需要同时具备应用,全局订阅只需要具备

⑤ 〔组〕,订阅的组主键

⑥ 〔应用〕,订阅的应用主键。其中, + 应用全局唯一

⑦ 〔创建时间〕,新建发布的时间

⑧ 〔创建者〕,新建发布的人

⑨ 〔执行时间〕,最近一次执行发布的时间

⑩ 〔执行者〕,最近一次执行发布的人

工具栏元素

① 〔新建发布〕,弹出下面〔全链路蓝绿灰度发布界面〕,从数据库里插入该发布数据,同时把创建的界面元素的值存入到数据库

② 〔打开发布〕,选中表格中的一条数据进行打开,跳到下面〔全链路蓝绿灰度发布界面〕,在该界面上〔订阅模式〕、〔组〕、〔应用〕和〔应用列表中只显示网关〕等界面元素不可再更改,直接灰掉。界面元素的值从数据库中读取,执行发布相关操作后,把〔发布类型〕的数据库字段进行更新,同时把修改的界面元素的值更新到数据库

③ 〔删除发布〕,选中表格中的一条数据进行删除,从数据库里删除该发布数据。只有〔发布状态〕处于结束的发布,才可以被删除

全链路蓝绿灰度发布界面

执行蓝绿灰度发布的入口组和应用

① 〔局部订阅〕所选应用订阅策略发布,〔全局订阅〕所选〔组〕下的所有应用都订阅策略发布,〔应用〕下拉菜单可以不必选择,建议灰掉或者隐藏掉

标签〔局部订阅〕右边的“?”,鼠标移上去弹出“所选应用订阅策略发布”的提示。标签〔全局订阅〕右边的“?”,鼠标移上去弹出“所选组下的所有应用都订阅策略发布”的提示

② 〔组〕下拉框的数据,通过查询服务组名列表接口获取到全部的组列表

〔刷新〕按钮点击,即通过该接口重置〔组〕下拉框的数据

③ 〔应用〕包括网关或者服务,如果选择网关,即蓝绿灰度发布策略推送到网关,如果选择服务,即蓝绿灰度发布策略推送到服务。〔应用〕下拉框的数据,根据上面选中的〔组〕,〔服务类型〕为[ "service", "gateway"],通过根据组名和服务类型查询服务名列表接口获取到所属组下所有网关和服务;如果〔应用列表中只显示网关〕开启,仍旧调用上面那个接口,〔服务类型〕则改为["gateway"]

〔刷新〕按钮点击,即通过该接口重置〔应用〕下拉框的数据,以及下面〔参与蓝绿灰度发布的服务列表〕

参与蓝绿灰度发布的服务列表

① 列表中〔参与蓝绿灰度发布的服务列表〕,根据上面选中的〔组〕,服务类型为[ "service"],通过根据组名和服务类型查询服务名列表接口获取到所属组下所有服务

② 列表中多个选中的服务不能包含〔应用〕下拉列表选择的服务,需要弹出对话框提示。例如,在〔应用〕下拉列表中选择了discovery-guide-service-a,那么〔参与蓝绿灰度发布的服务列表〕中就不能包含discovery-guide-service-a

标签〔域网关模式〕右边的“?”,鼠标移上去弹出“服务列表显示属于所选组下的服务”的提示。标签〔非域网关模式〕右边的“?”,鼠标移上去弹出“服务列表显示所有服务”的提示

注意:〔应用〕的下拉框和〔参与蓝绿灰度发布的服务列表〕的列表需要跟〔组〕的下拉框进行联动

建议:在存在多个〔组〕的情况下了,可以实现基于组的权限控制,一般来说,组的地位等同于部门,例如,有A组(部门)和B组(部门),等于用户张三属于A部门,那他无权对B部门的服务实施灰度蓝绿发布

③ 查看服务的版本列表,通过选中列表中参与蓝绿灰度发布的服务,以ToolTip或者在左下角显示版本列表。通过根据服务名查询实例列表接口获取到全部的实例列表,再从实例中拿到版本值,拼装成版本列表,例如,1.0;1.1,在界面上表现出来

该步骤的意义是,新/旧的服务实例版本上线/下线,注册中心可能需要短暂的时间来同步数据,上线/下线信息可能无法第一时间在DiscoveryConsole缓存中被感知,会影响全链路智能编排的功能

当前生效的策略

该区域显示目前配置中心正在生效的蓝绿灰度发布的规则策略,通过Xml格式显示。如果用拓扑图来展现,就更直观

当前发布的状态

当前发布执行到哪个状态,包括四个:兜底发布回滚结束。从管理界面进入后,需要在比该标签上显示状态。如果是新建的发布,状态显示为

蓝绿灰度发布条件

支持蓝绿发布、灰度发布和蓝绿灰度混合发布,支持内置参数。需要通过勾选启动对应的功能,未勾选的功能项默认灰掉

① 蓝绿灰度发布版本算法〔根据版本排序〕和〔根据时间戳排序〕,分别对应到Yaml中的sort: versionsort: time字段,默认选中〔根据版本排序〕

标签〔根据版本排序〕右边的“?”,鼠标移上去弹出“版本可排序,取版本值最大的实例为新版本”的提示。标签〔根据时间戳排序〕右边的“?”,鼠标移上去弹出“版本不可排序,取上线时间最晚的实例为新版本”的提示

② 蓝绿发布支持〔绿条件〕和〔蓝条件〕两种条件,分别指旧版本链路和新版本链路的驱动条件,输入格式为SPEL表达式。〔绿条件〕和〔蓝条件〕的文本框不能留空,且两者不能相同

标签〔蓝绿发布〕右边的“?”,鼠标移上去弹出“蓝条件对应为新版本路由”的提示

③ 灰度发布可以支持无限个〔灰度条件〕,输入格式为SPEL表达式,通过右侧的〔+〕和〔-〕进行增减。〔灰度权重〕指新版本链路所占的权重百分比(只允许输入0<=灰度权重<=100的整数值),例如,输入10,表示新版本链路所占的权重百分比为10%,旧版本链路所占的权重百分比为90%

标签〔灰度发布〕右边的“?”,鼠标移上去弹出“灰度权重值对应为新版本路由的权重百分比”的提示

所有灰度条件不能相同,跟蓝绿发布不同之处,灰度条件可以允许空(但只允许一个灰度条件为空)

④ 内置条件,需要首尾判断是否有空格

标签〔灰度发布〕右边的“?”,鼠标移上去弹出“代替外置参数的蓝绿灰度驱动”的提示

蓝绿灰度发布执行

蓝绿灰度发布的操作需要规避同一个发布由不同的人并行操作,建议通过锁的技术手段保证同一时刻只能由一个人操作

① 〔执行兜底〕。点击之前,需要判断上面的条件是否设置正确,如果不正确,弹出对话框提示。点击之后,把界面元素拼装成Yaml格式,并弹出对话框做二次确认,以免策略不符合预期而引起生产环境流量异常

预览项中,Yaml格式需要自行拼装,Xml格式通过校验Yaml格式版本蓝绿灰度发布接口从Yaml转化成Xml

二次确认后,通过根据Yaml格式创建版本蓝绿灰度发布接口把规则策略由控制台从Yaml转化成Xml保存到配置中心

二次确认Xml中的具体路由链路(即节点部分)信息,该步骤很重要,原因即参与蓝绿灰度发布的服务列表的第③步骤

保存到配置中心后,再通过查询规则配置接口向配置中心查询Xml格式的规则策略,并在文本区域显示给用户

Xml规则...

② 〔执行发布〕

Xml规则...

该步骤可以和运维的 “上线新服务” 步骤整合成一个原子操作,在〔执行发布〕之前,通过界面选中的服务列表,自动从GitLab拉取相应的新代码,进行打包部署,流量染色后上线,等新服务实例全部在注册中心注册成功后,等待少许时间后,自动更新蓝绿发布规则策略

③ 〔执行回滚〕

回滚到上一次状态,等效于〔执行兜底〕操作

④ 〔结束发布〕

Xml规则...

该步骤可以和运维的 “下线旧服务” 步骤整合成一个原子操作,在〔结束发布〕之前,通过界面选中的服务列表,下线对应的旧版本服务实例,等旧服务实例全部在注册中心注销成功后,等待少许时间后,自动清除蓝绿发布规则策略

注意:每次执行完,最好把界面相关字段值保存到数据库中,使得下次操作可以重用,不需要手工再输入一遍

蓝绿灰度发布流程

全链路自动化流量侦测测试

侦测策略

用户手工填入Yaml格式的侦测策略,具体内容参考mock-inspector.yaml

流量侦测测试结果

该区域显示流量侦测测试结果,内容来自于日志采集器。如果用拓扑图来展现,就更直观

侦测条件

用户手工选择或者输入侦测条件,具体内容参考application.properties

侦测执行

〔执行侦测〕,调用发起自动化流量侦测测试任务接口,启动自动化流量侦测测试任务,返回测试任务的全局唯一ID(group@@serviceId格式),根据该ID查询日志采集器,结果通过〔流量侦测测试结果〕显示

注意:每次执行完,最好把界面相关字段值保存到数据库中,使得下次操作可以重用,不需要手工再输入一遍

全链路自动化模拟流程测试

执行蓝绿灰度发布的入口组和应用

全链路蓝绿灰度发布界面操作一致

发布策略

用户手工填入Yaml格式的发布策略,三个策略具体内容,分别参考mock-version-release-basic.yamlmock-version-release-1.yamlmock-version-release-2.yaml

模拟流程测试结果

该区域显示模拟流程测试结果,内容来自于日志采集器。如果用拓扑图来展现,就更直观

模拟条件

用户手工选择或者输入模拟条件,具体内容参考application.properties

模拟执行

〔执行模拟〕,调用发起自动化模拟流程测试任务接口,启动自动化模拟流程测试任务,返回测试任务的全局唯一ID(group@@serviceId格式),根据该ID查询日志采集器,结果通过〔模拟流程测试结果〕显示

由于group@@serviceId名称的任务同一时间只允许运行一个,启动自动化模拟流程测试任务之前,通过获取当前正在运行的自动化模拟流程测试任务列表接口预先判断任务是否已经在执行,如果是,需要弹出对话框提示阻止用户启动

注意:每次执行完,最好把界面相关字段值保存到数据库中,使得下次操作可以重用,不需要手工再输入一遍




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally