做为微服务架构系统,UAVStack的主要服务组件包括:前端
随着业务量的增加,部署在业务系统及后台的组件也会相应增长。当总量达到必定量级后,组件升级迭代的成本和效率都会面临很大挑战:git
人工迭代:人工/时间成本高,错误率也高github
对接发布系统:shell
优势:流程化、标准化架构
缺点:对接成本高,每次装卸组件都要一一对接。并发
所以,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次。
官方网站:https://uavorg.github.io/main/
开源地址:https://github.com/uavorg
做者:刘波安野
首发: UAVStack智能运维