-
Notifications
You must be signed in to change notification settings - Fork 1.4k
如何设计全链路智能编排高级蓝绿灰度发布界面
管理界面的元素数据,通过数据库存储
① 〔发布名称〕,全局唯一
② 〔发布类型〕,包括三个:蓝绿
、灰度
、混合
。其中,混合
指蓝绿灰度混合发布
③ 〔发布状态〕,包括四个:兜底
、发布
、回滚
、结束
,指当前发布执行到哪个状态。其中,回滚
和兜底
等效
④ 〔组〕,订阅的组主键
⑤ 〔应用〕,订阅的应用主键。其中,组
+ 应用
全局唯一
⑥ 〔创建时间〕,新建发布的时间
⑦ 〔创建者〕,新建发布的人
⑧ 〔执行时间〕,最近一次执行发布的时间
⑨ 〔执行者〕,最近一次执行发布的人
⑩ 〔备注〕,备注
① 〔新建发布〕,弹出下面〔全链路蓝绿灰度发布界面〕,从数据库里插入该发布数据,同时把创建的界面元素的值存入到数据库
② 〔打开发布〕,选中表格中的一条数据进行打开,跳到下面〔全链路蓝绿灰度发布界面〕,在该界面上〔组〕、〔应用〕和〔应用列表中只显示网关〕等界面元素不可再更改,直接灰掉。界面元素的值从数据库中读取,执行发布相关操作后,把〔发布类型〕的数据库字段进行更新,同时把修改的界面元素的值更新到数据库
③ 〔删除发布〕,选中表格中的一条数据进行删除,从数据库里删除该发布数据。只有〔发布状态〕处于结束
的发布,才可以被删除
①〔组〕下拉框的数据,通过查询服务组名列表接口获取到全部的组列表
〔刷新〕按钮点击,即通过该接口重置〔组〕下拉框的数据
② 〔应用〕包括网关或者服务,如果选择网关,即蓝绿灰度发布策略推送到网关,如果选择服务,即蓝绿灰度发布策略推送到服务。〔应用〕下拉框的数据,根据上面选中的〔组〕,〔服务类型〕为[ "service", "gateway"]
,通过根据组名和服务类型查询服务名列表接口获取到所属组下所有网关和服务;如果〔应用列表中只显示网关〕开启,仍旧调用上面那个接口,〔服务类型〕则改为["gateway"]
〔刷新〕按钮点击,即通过该接口重置〔应用〕下拉框的数据,以及下面〔参与蓝绿灰度发布的服务列表〕
① 列表中〔参与蓝绿灰度发布的服务列表〕,提供两个接口
- 根据上面选中的〔组〕,服务类型为
[ "service"]
,通过根据组名和服务类型查询服务名列表接口获取到所属组的服务 - 服务类型为
[ "service"]
,通过根据服务类型查询服务名列表接口获取到所有服务
②〔显示所属组的服务〕指服务列表只显示属于所选组下的服务,〔显示所有服务〕指服务列表显示注册中心里所有的服务,不管它们归属哪个组
〔显示所有服务〕适用于跨组(部门)的蓝绿灰度发布,虽然更为方便,但存在职权不明带来的风险。如果用户不存在此场景,可以去掉这〔显示所属组的服务〕和〔显示所有服务〕选取项,默认采用〔显示所属组的服务〕
域网关部署模式下,〔组〕的地位等同于部门,每个部门拥有一个独立的网关和一群业务服务,从公司维度来看,存在多个〔组〕的情况下,可以实现基于〔组〕的权限控制,例如,有A组(部门)和B组(部门),如果用户张三属于A部门,那他无权对B部门的服务实施灰度蓝绿发布
非域网关部署模式下,〔组〕的地位等同于公司,整个公司拥有一个大的网关和一群业务服务,则不需要实现基于〔组〕的权限控制
③ 列表中多个选中的服务不能包含〔应用〕下拉列表选择的服务,需要弹出对话框提示。例如,在〔应用〕下拉列表中选择了discovery-guide-service-a
,那么〔参与蓝绿灰度发布的服务列表〕中就不能包含discovery-guide-service-a
注意:〔应用〕的下拉框和〔参与蓝绿灰度发布的服务列表〕的列表需要跟〔组〕的下拉框进行联动
此为重要步骤,执行其它所有步骤前,必须执行一遍该步骤
在〔参与蓝绿灰度发布的服务列表〕的列表至少选择一个服务,如果未选,弹出对话框提示。通过根据元数据键名和服务名列表查询服务名对应单个元数据值列表的哈希表接口,传入的参数为version
和选中的服务列表,把返回结果显示在下图对话框中,让用户确认。如果结果未符合预期,仍需稍等一段时间,再次检测
如果希望显示的信息能更加详细一点,通过根据元数据查询参数对象查询服务名对应多个元数据值列表的哈希表接口,具体用法查看接口文档的示例部分
此步骤的意义:新/旧的服务实例版本上线/下线,注册中心可能需要短暂的时间来同步数据,上线/下线信息可能无法第一时间在
DiscoveryConsole
缓存中被感知,会影响全链路智能编排的功能
该区域显示目前配置中心正在生效的蓝绿灰度发布的规则策略,通过Xml格式显示。如果用拓扑图来展现,就更直观
当前发布执行到哪个状态,包括四个:兜底
、发布
、回滚
、结束
。从管理界面进入后,需要在比该标签上显示状态。如果是新建的发布,状态显示为无
支持蓝绿发布、灰度发布和蓝绿灰度混合发布,支持内置参数。需要通过勾选启动对应的功能,未勾选的功能项默认灰掉
① 蓝绿灰度发布版本算法〔根据版本排序〕和〔根据上线时间排序〕,分别对应到Yaml中的sort: version
和sort: time
字段
〔根据版本排序〕指服务实例的版本号采用数字或者时间戳等可排序形式确定新/旧版本,〔根据上线时间排序〕指服务实例的版本号采用其它等不可排序形式,那么采用上线时间确定新/旧版本。如果用户不存在后一种场景,可以去掉这〔根据版本排序〕和〔根据上线时间排序〕选取项,默认采用〔根据版本排序〕
标签〔根据版本排序〕右边的“?”,鼠标移上去弹出“版本可排序,取版本值最大的实例为新版本”的提示。标签〔根据上线时间排序〕右边的“?”,鼠标移上去弹出“版本不可排序,取上线时间最晚的实例为新版本”的提示
② 蓝绿发布支持〔绿条件〕和〔蓝条件〕两种条件,分别指旧版本链路和新版本链路的驱动条件,输入格式为SPEL表达式。〔绿条件〕和〔蓝条件〕的文本框不能留空,且两者不能相同
标签〔蓝绿发布〕右边的“?”,鼠标移上去弹出“蓝条件对应为新版本路由”的提示
③ 灰度发布可以支持无限个〔灰度条件〕,输入格式为SPEL表达式,通过右侧的〔+〕和〔-〕进行增减。〔灰度权重〕指新版本链路所占的权重百分比(只允许输入0<=灰度权重<=100的整数值),例如,输入10,表示新版本链路所占的权重百分比为10%,旧版本链路所占的权重百分比为90%
标签〔灰度发布〕右边的“?”,鼠标移上去弹出“灰度权重值对应为新版本路由的权重百分比”的提示
所有灰度条件不能相同,跟蓝绿发布不同之处,灰度条件可以允许空(但只允许一个灰度条件为空)
④ 内置条件,需要首尾判断是否有空格
标签〔灰度发布〕右边的“?”,鼠标移上去弹出“代替外置参数的蓝绿灰度驱动”的提示
蓝绿灰度发布的操作需要规避同一个发布由不同的人并行操作,建议通过锁的技术手段保证同一时刻只能由一个人操作
① 〔执行兜底〕。点击之前,需要判断界面上的元素是否填写正确,如果不正确,弹出对话框提示。点击之后,弹出对话框做二次确认
确认后把界面元素拼装成Yaml格式,通过根据Yaml格式创建版本蓝绿灰度发布接口把规则策略由控制台从Yaml转化成Xml保存到配置中心
保存到配置中心后,再通过查询规则配置接口向配置中心查询Xml格式的规则策略,确认规则策略已经入库,并在文本区域显示给用户
Xml规则...
② 〔执行发布〕
步骤同 ① 〔执行兜底〕
该步骤可以和运维的 “上线新服务” 步骤整合成一个原子操作,在〔执行发布〕之前,通过界面选中的服务列表,自动从GitLab拉取相应的新代码,进行打包部署,流量染色后上线,等新服务实例全部在注册中心注册成功后,等待少许时间后,自动更新蓝绿发布规则策略
③ 〔执行回滚〕
步骤同 ① 〔执行兜底〕
回滚到上一次状态,等效于〔执行兜底〕操作
④ 〔结束发布〕
步骤同 ① 〔执行兜底〕
该步骤可以和运维的 “下线旧服务” 步骤整合成一个原子操作,在〔结束发布〕之前,通过界面选中的服务列表,下线对应的旧版本服务实例,等旧服务实例全部在注册中心注销成功后,等待少许时间后,自动清除蓝绿发布规则策略
注意:每次执行完,最好把界面相关字段值保存到数据库中,使得下次操作可以重用,不需要手工再输入一遍
上面4个步骤,每个执行步骤执行完后,查询配置中心的Xml格式的规则策略,显示在〔当前生效的策略〕的区域内。如果有条件,可以转化成蓝绿和灰度发布拓扑图来展现(如果是两者混合发布的,需要分开画两张图),更加直观
生产环境下的自动化测试
用户手工填入Yaml格式的侦测策略,具体内容参考mock-inspector.yaml
该区域显示流量侦测测试结果,内容来自于日志采集器
用户手工选择或者输入侦测条件,具体内容参考application.properties
〔执行侦测〕,调用发起自动化流量侦测测试任务接口,启动自动化流量侦测测试任务,返回测试任务的全局唯一ID(group@@serviceId
格式),根据该ID查询日志采集器,结果通过〔流量侦测测试结果〕显示
注意:每次执行完,最好把界面相关字段值保存到数据库中,使得下次操作可以重用,不需要手工再输入一遍
开发环境和测试环境下的全方位自动化测试
跟全链路蓝绿灰度发布界面操作一致
用户手工填入Yaml格式的发布策略,三个策略具体内容,分别参考mock-version-release-basic.yaml、mock-version-release-1.yaml、mock-version-release-2.yaml
该区域显示模拟流程测试结果,内容来自于日志采集器
用户手工选择或者输入模拟条件,具体内容参考application.properties
〔执行模拟〕,调用发起自动化模拟流程测试任务接口,启动自动化模拟流程测试任务,返回测试任务的全局唯一ID(group@@serviceId
格式),根据该ID查询日志采集器,结果通过〔模拟流程测试结果〕显示
由于group@@serviceId
名称的任务同一时间只允许运行一个,启动自动化模拟流程测试任务之前,通过获取当前正在运行的自动化模拟流程测试任务列表接口预先判断任务是否已经在执行,如果是,需要弹出对话框提示阻止用户启动
注意:每次执行完,最好把界面相关字段值保存到数据库中,使得下次操作可以重用,不需要手工再输入一遍
2017-2050 ©Nepxion Studio Apache License
- 如何对接Foundation基础平台实施收敛集成
- 如何对接DevOps运维平台实施流量管控
- 如何部署对接DevOps运维平台的控制台
- 如何对接DevOps运维平台执行半自动化蓝绿灰度发布
- 如何使用DevOps运维平台对接的公共接口
- 如何设计全链路智能编排高级蓝绿灰度发布界面
- 如何实现Windows10下GraalVM本地镜像化
- 蓝绿灰度发布
- 流量染色
- 隔离路由
- 故障转移
- 多活单元化
- 限流熔断降级权限
- 网关动态路由
- 可观测监控
- 如何操作配置中心
- 如何理解框架开关配置
- 如何理解规则策略里内容格式配置
- 如何操作网关和服务的蓝绿灰度发布规则策略配置
- 如何操作网关动态路由规则策略配置
- 如何操作Sentinel规则策略配置
- 如何实施规则策略配置和业务配置在配置中心的合并和分离
- 如何理解自动扫描目录
- 如何自定义流量管控
- 如何自定义实现组合式的防护
- 如何自定义高级配置订阅功能
- 如何自定义订阅框架事件
- 如何自定义解决业务自身跨线程上下文切换的问题
- 如何自定义重用框架内置的Swagger模块
- 如何自定义Header全链路传递
- 如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
- 如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发