作为微服务架构系统,UAVStack的主要服务组件包括:
随着业务量的增长,部署在业务系统及后台的组件也会相应增加。当总量达到一定量级后,组件升级迭代的成本和效率都会面临很大挑战:
因此,UAVStack基于自身特点开发了一套升级系统,实现了下列功能:
upgrade server升级中心
upgrade client升级进程
在分配event的同时,upgrade server升级中心会将详细的event信息一起发送给MA/HM。MA/HM接收到指令event后调用shell,拉起独立的进程upgrade client,同时附带详细的event信息。upgrade client作为独立进程完成对指定组件的升级。
upgrade server具备扩容能力,能够处理海量组件升级任务。当多个HM对同一个event做分配时,需要做特殊处理,保证event只会被派发一次。当多个作业人提交action时,若对同一个组件提交了多次不同的event事件,也需要做特殊处理,保证一个组件的event事件的单次完整性。
为降低代码复杂程度,提高功能可靠性,减少对第三方的依赖,同时考虑到action数据已经落地,最终决定通过存储实现event分配,即对存储并发下发修改指令,确保只有一条指令可以成功。而升级进程则通过文件锁保证了event事件的单次完整性。
(状态机)
1)UAV自升级:具备接收升级指令,自升级,自重启(HM、MA)
2)第三方升级:不能接收升级指令,升级后不能自重启(MOF以及其他软件目录)
基于业务代码实现事件驱动:每个处理过程被视为一个事件。升级成功后,将事件标识为成功;否则默认为失败。升级成功或失败都需要指定下一个动作,从而实现灵活处理并形成业务闭环。
BACKUP >
PACKAGE_DOWN_LOAD >
OVERRIDE_FILE >
STOP_UAV_PRO(UAV自升级)>
START_UAV_PRO(UAV自升级)>
END_ACTION(释放文件锁、现场清理、反馈回调)>
END
OVERRIDE_FILE_CALLBACK(回刷备份文件)> END_ACTION (同理)>END
同步业务系统的节点信息与当前组件的版本信息时,往往主要依赖人工维护或相关发布系统。而UAVStack天然的实时画像数据则解决了运维信息同步不及时这一问题,不仅不再需要人为干预,还能支持运维信息自动发现。通过画像数据,可以实时查看组件部署情况。
不需要人为干预即可实现信息自动维护,支持实时过滤与查看、批量操作及任务下发。
这套基于UAVStack自身特色的升级系统降低了运维成本、提升了迭代效率,单人迭代数十个组件迭代只需几分钟即可完成,已成功支持测试版本切换与迭代约400次,支持线上版本迭代约350次。