前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UAVStack升级系统设计

UAVStack升级系统设计

作者头像
宜信技术学院
发布2019-08-02 09:28:18
4880
发布2019-08-02 09:28:18
举报
文章被收录于专栏:宜信技术实践宜信技术实践

一、背景

作为微服务架构系统,UAVStack的主要服务组件包括:

  • 中间件增强框架(英文名MonitorFramework,简称MOF探针):部署在业务系统
  • 监控代理程序 (英文名MonitorAgent,简称MA):部署在业务系统
  • 健康管理服务 (英文名HealthManager,简称HM):部署在后台服务群

随着业务量的增长,部署在业务系统及后台的组件也会相应增加。当总量达到一定量级后,组件升级迭代的成本和效率都会面临很大挑战:

  • 人工迭代:人工/时间成本高,错误率也高
  • 对接发布系统:
    • 优点:流程化、标准化
    • 缺点:对接成本高,每次装卸组件都要一一对接。

因此,UAVStack基于自身特点开发了一套升级系统,实现了下列功能:

  • 运维数据实时同步:确保组件基础信息的实效性及对称性
  • 操作便捷:支持版本构建、信息查看、任务下发等
  • 任务粒度清晰:提供任务详情、问题诊断、重试、历史留痕等功能

二、UAVStack升级系统架构图

1.jpeg
1.jpeg
  • Apphub:前端应用,发起升级指令
  • MA/HM:自带升级进程的组件。支持自升级,升级成功后自重启
  • upgrade server(升级中心):存放升级版本,提供下载功能
  • upgrade client(升级进程):执行具体升级任务

三、升级中心与升级进程

upgrade server升级中心

  • 一个独立的HM组件
  • Web端CRUD后台接口支撑,服务端
  • 提供升级动作(action)入口,服务端
  • 分配升级事件(event)
  • 提供升级包下载能力,服务端
  • 提供反馈入口,服务端
2.jpeg
2.jpeg

upgrade client升级进程

  • 独立进程,脚本触发
  • 升级动作,事件驱动
  • 从接收参数中提取server地址
  • 升级包下载,客户端
  • 过程留痕、任务反馈,客户端
3.jpeg
3.jpeg

在分配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事件的单次完整性。

四、升级过程

4.jpeg
4.jpeg

(状态机)

4.1 upgrade server通过event判断是否UAV自升级

1)UAV自升级:具备接收升级指令,自升级,自重启(HM、MA)

  • upgrade server作为HM也可以被升级

2)第三方升级:不能接收升级指令,升级后不能自重启(MOF以及其他软件目录)

  • 升级工作过程和原理与UAV自升级一致。
  • 任何安装了MA的软件都可以使用升级功能

4.2 upgrade server分配任务

  • NEW:action数据落地,解析event数据
  • ALLOCATION:扫描event数据,获取升级事件(发送修改指令占坑,标明当前HM负责的event)
    • 成功获取的event放入队列,等待派送
    • 队列消费:读取event信息,获取单次升级目标等信息;打包event信息,同时附加当前HM Server回调地址等;最后对指定升级目标发起升级指令。

4.3 upgrade client执行升级任务

基于业务代码实现事件驱动:每个处理过程被视为一个事件。升级成功后,将事件标识为成功;否则默认为失败。升级成功或失败都需要指定下一个动作,从而实现灵活处理并形成业务闭环。

  • BEGIN (文件锁获取) >

BACKUP >

PACKAGE_DOWN_LOAD >

OVERRIDE_FILE >

STOP_UAV_PRO(UAV自升级)>

START_UAV_PRO(UAV自升级)>

END_ACTION(释放文件锁、现场清理、反馈回调)>

END

  • 处理过程发生异常/错误:

OVERRIDE_FILE_CALLBACK(回刷备份文件)> END_ACTION (同理)>END

  • 多次并发event事件:若无法获取文件锁,则进程执行失败,任务直接结束。文件锁释放后,方可继续处理event事件

4.4 upgrade client重启MA、HM

  • 优先stop>start,停止不成功则kill pid
  • 利用crontab启动应用进程,关键解决按原有启动参数启动
    • MSCP程序启动时,会利用crontab的特性添加值守
    • 基于liunx本身的命令,获取到进程pid即可完成以上操作

五、UAVStack升级系统亮点

5.1 运维数据实时同步

同步业务系统的节点信息与当前组件的版本信息时,往往主要依赖人工维护或相关发布系统。而UAVStack天然的实时画像数据则解决了运维信息同步不及时这一问题,不仅不再需要人为干预,还能支持运维信息自动发现。通过画像数据,可以实时查看组件部署情况。

5.jpeg
5.jpeg

5.2 操作便捷

不需要人为干预即可实现信息自动维护,支持实时过滤与查看、批量操作及任务下发。

6.jpeg
6.jpeg

5.3 任务粒度清晰

  • 历史留痕
7.jpeg
7.jpeg
  • 过程留痕
8.jpeg
8.jpeg
  • 问题诊断、重试
9.jpeg
9.jpeg

六、总结

这套基于UAVStack自身特色的升级系统降低了运维成本、提升了迭代效率,单人迭代数十个组件迭代只需几分钟即可完成,已成功支持测试版本切换与迭代约400次,支持线上版本迭代约350次。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、UAVStack升级系统架构图
  • 三、升级中心与升级进程
  • 四、升级过程
    • 4.1 upgrade server通过event判断是否UAV自升级
      • 4.2 upgrade server分配任务
        • 4.3 upgrade client执行升级任务
          • 4.4 upgrade client重启MA、HM
          • 五、UAVStack升级系统亮点
            • 5.1 运维数据实时同步
              • 5.2 操作便捷
                • 5.3 任务粒度清晰
                • 六、总结
                相关产品与服务
                消息队列 TDMQ
                消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档