写点什么

UAVStack 升级系统设计

  • 2020-02-09
  • 本文字数:2022 字

    阅读完需:约 7 分钟

UAVStack升级系统设计

一、背景

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


  • 中间件增强框架(英文名 MonitorFramework,简称 MOF 探针):部署在业务系统

  • 监控代理程序 (英文名 MonitorAgent,简称 MA):部署在业务系统

  • 健康管理服务 (英文名 HealthManager,简称 HM):部署在后台服务群


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


  • 人工迭代:人工/时间成本高,错误率也高

  • 对接发布系统:

  • 优点:流程化、标准化

  • 缺点:对接成本高,每次装卸组件都要一一对接。


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


  • 运维数据实时同步:确保组件基础信息的实效性及对称性

  • 操作便捷:支持版本构建、信息查看、任务下发等

  • 任务粒度清晰:提供任务详情、问题诊断、重试、历史留痕等功能

二、UAVStack 升级系统架构图

1564543971959047445.jpeg


  • Apphub:前端应用,发起升级指令

  • MA/HM:自带升级进程的组件。支持自升级,升级成功后自重启

  • upgrade server(升级中心):存放升级版本,提供下载功能

  • upgrade client(升级进程):执行具体升级任务

三、升级中心与升级进程

upgrade server 升级中心


  • 一个独立的 HM 组件

  • Web 端 CRUD 后台接口支撑,服务端

  • 提供升级动作(action)入口,服务端

  • 分配升级事件(event)

  • 提供升级包下载能力,服务端

  • 提供反馈入口,服务端


1564543979100059203.jpeg


upgrade client 升级进程


  • 独立进程,脚本触发

  • 升级动作,事件驱动

  • 从接收参数中提取 server 地址

  • 升级包下载,客户端

  • 过程留痕、任务反馈,客户端


1564543985320000586.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 事件的单次完整性。

四、升级过程

1564543995470086003.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 天然的实时画像数据则解决了运维信息同步不及时这一问题,不仅不再需要人为干预,还能支持运维信息自动发现。通过画像数据,可以实时查看组件部署情况。


1564544005039005202.jpeg

5.2 操作便捷

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


1564544013540033784.jpeg

5.3 任务粒度清晰

  • 历史留痕


1564544020020084214.jpeg


  • 过程留痕


1564544026530070638.jpeg


  • 问题诊断、重试


1564544033340096243.jpeg

六、总结

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


本文转载自宜信技术学院。


原文链接:http://college.creditease.cn/detail/281


2020-02-09 15:05942

评论

发布
暂无评论
发现更多内容

Comate Agents成团出道,来Pick你的最强C位!

Comate编码助手

前端 Agents Agentic AI vibe coding

腾讯投资 AI 陪伴项目 Born 融资 1500 万美元,主打社交化 AI 陪伴;朱啸虎:AI 语音与视频应用爆发在即丨日报

RTE开发者社区

小红书笔记API实战:笔记详情数据采集Python代码

tbapi

小红书笔记详情接口 小红书API 小红书笔记数据采集 小红书笔记数据分析

MyEMS在行动:揭秘开源能源管理系统如何重塑工业与楼宇的能效未来

开源能源管理系统

开源 能源管理系统

爱玛集团:All In SelectDB 构建极速统一数据平台,领航 AI 数智化实践

SelectDB

人工智能 数据库 实时数仓 MCP 爱玛电动车

还在拼手速抢Mate XTs?Petal One尊享会员优先购通道开启啦!

最新动态

重塑云上 AI 应用“运行时”,函数计算进化之路

阿里巴巴云原生

阿里云 云原生 函数计算

从拖拽到架构:低代码如何兼顾速度、灵活性与可控边界

JeeLowCode低代码平台

低代码 低代码平台 低代码报告 低代码, 低代码工具

LED显示屏vs LCD液晶屏:如何选择

Dylan

广告 广告业 LED LED显示屏 lcd

工具链部署实用技巧 7|模型设计帧率推理时耗时与带宽分析

地平线开发者

自动驾驶 算法工具链 地平线征程6

可可图片编辑 HarmonyOS(5)滤镜效果

万少

HarmonyOS

开源安全与法律争议:OpenSSH枚举、DMCA诉讼与数据泄露事件解析

qife122

网络安全 开源漏洞

更灵活易用、延迟超低、更多情感语音支持!地表最强 Voice Agent 开源框架再进化!丨TEN Framework 更新

RTE开发者社区

企业级 AI Agent 开发指南:基于函数计算 FC Sandbox 方案实现类 Chat Coding AI Agent

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

flink on k8s的基本介绍

天翼云开发者社区

大数据

时序数据库 Apache IoTDB V1.3.5 发布|优化加密算法,优化内核稳定性,修复社区反馈问题

Apache IoTDB

试完豆包Seedream 4.0生图,我只想说,牛逼。。。

苍何

欲穷千里目,它凭什么能问鼎存力之巅?

脑极体

AI 存储

开源能源管理系统的进击:从“免费替代”到“创新引擎”

开源能源管理系统

开源 开源能源管理系统

企业如何利用YashanDB实现数据高可用部署

数据库砖家

新签约 | Oracle 慢到拖垮查询?江西水投换上 TDengine 时序数据库秒回实时监控

TDengine

tdengine 时序数据库 国产时序数据库

AI搜索的黑科技?DeepSearch 究竟“深”藏着什么秘密?

阿里云大数据AI技术

阿里云 OpenSearch DeepSearch

无人机管理系统:巡航系统模块

深圳亥时科技

#开源

Flink 与Flink可视化平台StreamPark教程(时间相关 1)

天翼云开发者社区

大数据 flink 计算

小红书开放平台评论接口全解析:从采集到情感分析

tbapi

小红书API 小红书笔记评论接口 小红书笔记评论api 小红书笔记评论数据采集

MyEMS与开源浪潮:如何重塑全球能源管理的未来格局

开源能源管理系统

开源 能源管理系统

大数据-96 SparkSQL 语句详解:从 DataFrame 到 SQL 查询与 Hive 集成全解析

武子康

Java 大数据 flink spark 分布式

企业如何利用YashanDB实现数据高可用性

数据库砖家

以太坊ABI解析器零尺寸类型漏洞分析与利用

qife122

区块链 以太坊

查收你的技术成长礼包

京东零售技术

UAVStack升级系统设计_文化 & 方法_刘波安野_InfoQ精选文章