写点什么

任务分发系统 -Qcmd-http 详解

  • 2019-11-28
  • 本文字数:2166 字

    阅读完需:约 7 分钟

任务分发系统-Qcmd-http详解

Qcmd 是 360 云平台底层的命令执行系统,为了让 Qcmd 能够更好的为业务提供服务,我们在 Qcmd 的上层封装了一层 Qcmd-http 任务分发系统,Qcmd-http 系统同样采用 Golang 编写。它主要负责以下几个事情:


1.实现 qcmd 的集群分布式,维护 qcmd 集群的高可用。


2.支持更复杂的任务类型以满足复杂的业务场景。


3.将业务与底层的 qcmd 彻底解耦。

1 360 云平台任务执行的流程图

首先,让我们在 360 云平台上,从页面的视角来观察一下整个执行的过程吧。


1.选择脚本,选择要执行的主机,执行任务。



注:zjl.sh 脚本是我随手写的,里面执行的是查看当前主机名的命令


2.任务的状态会经过处理中到执行成功,在任何时候,你都可以点击查看按钮来观察任务执行的当前状态以及每个 minion 的任务执行结果。




2 名词解释

1.minion,直译过来是奴才的意思,表示最终要执行任务的主机。比如你要执行一个 hostname 的命令,最终是在 minion 主机上执行的。


2.master,直译过来是主人的意思,表示接收业务方任务请求,下发给 minion 主机执行,并收集 minion 执行结果,将结果反馈给业务方的主机。


3.集群,为了维护系统的高可用,通常我们不会将 master 的系统只部署在一台机器上,实际上,我们目前是部署在 2 台主机上,这两台 master 主机以及他们下面连接的 minion,我们称它为一个集群,具体集群的状态以及工作机制,稍后会有详细地介绍。


4.分布式,如果只有一个集群,当 minion 的主机数据日渐增多时,master 的压力会比较大,而且北京的 master 给上海的 minion 下发任务,理论上肯定不如北京的 master 下发到北京的 minion 来的快,所以为了高性能并且去中心化,我们以机房为维度搭建了多个集群, 以达到不同的集群服务于不同的 minion 的作用,详见下面的分布式集群拓扑。

3 分布式集群

1.分布式集群拓扑



2.集群拓扑


4 集群的状态

  1. master 的状态

  2. master 的结构是一主一从(也可以是一主多从),minion 与集群中的所有 master 都保持着连接,只有主 master 提供对外服务,qcmd-http 系统在数据库维护着 master 与集群的关系,以及 master 的主从状态,一旦主 master 出现故障,可以将从 master 与主 master 的角色互换,新的主 master 会继续提供对外的服务。

  3. minion 的状态

  4. minion 的状态也有两种,up 和 down,主 master 每隔一段时间会给已经通过认证的 minion 主机发送 test-ping 心跳包,来获取当前 minion 的存活状态,如果 minion 主机 down 掉了,会通知 qcmd-http 分发系统,分发系统在数据库中将此 minion 的状态置为 down。

5 任务的类型

线上业务的任务不只是执行 hostname 这样简单的一条命令,为了满足绝大多数的业务使用场景,qcmd-http 分发系统支持了 4 种不同类型的任务


  1. 单任务-串行阻塞,比如你要在 minion-01,minon-02,minion-03 三台主机上执行命令 hostname,但是你想让 minion-01 主机先执行,如果 minion-01 主机执行成功了,再执行 minion-02 主机,如果 minion-01 主机执行失败了,那么任务就终止了。



  1. 单任务-串行非阻塞,与单任务的串行阻塞的原理相似,只不过当 minion-01 主机执行失败时,任务会继续往下执行,并不会终止,直到所有的 minion 执行完。



  1. 单任务-并行,线上业务的串行单任务场景并不多,大部分是并行任务。比如你想要同时在 minion-01,minion-02,minion-03 三台主机上执行任务,那么并行的单任务就比较合适了。



  1. 组任务-串行,有时候业务的任务并不是简单的执行一行命令或者是一个脚本,而是很复杂的一个过程。拿我们 mysql 的实例创建来说,它需要初始化主,初始化从,申请 lvs,初始化 failover 等等一系列的子任务,那么业务可以把整个 mysql 实例的创建包装成一个组任务,把其中的每个步骤当成一个子任务。整个组任务是串行执行的,只有当上一个子任务执行成功后,才执行下一个子任务,如果子任务执行失败,组任务就会终止。


6 任务的状态

  1. 主机的执行状态,不管是什么任务类型,最终都会落在 minion 主机上去执行,任务刚创建时,minion 处理等待执行的状态,master 收到任务请求后,会通知 minion 执行任务,并通知 qcmd-http 将 minion 的状态标记为处理中,minion 执行完后,将执行结果返回给 master ,master 再通知 qcmd-http 将 minion 的状态标记为成功或者失败。

  2. 单任务的状态,单任务的状态是根据该任务下的 minion 的状态和单任务的类型来更新的,分为等待处理,处理中,成功,失败和超时等几个状态。

  3. 组任务的状态,组任务的状态是根据其子任务的状态来更新的,组任务分为等待处理,处理中,成功,失败和超时等几个状态。

7 任务的回调

由于所有的任务都是异步执行的,单任务执行完会返回给调用方一个 job_id,组任务执行完会返回一个 group_id,qcmd-http 分发系统提供查询接口来支持查看任务的执行结果,同时,也支持任务回调的方式,业务在调用执行任务的接口时,可以同时指定一个回调地址,当任务执行结束,成功或者失败都会回调指定的回调地址通知对方任务的执行结果。

8 Qcmd 任务系统整体设计

总结

最初设计 qcmd-http 的主要目的是将业务与底层的 qcmd 彻底解耦,让整个系统结构更清晰,责任也更明确。


上线至今,qcmd-http 已经提供服务一年多了,目前执行过的单任务总数达到 50 多万,组任务数 20 多万。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/sxSqgFCf1tA2yGlayj1hXA


2019-11-28 15:541656

评论

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

POKT Network 开启周期性通缩,该计划将持续至 2025 年

股市老人

2023 IoTDB Summit:湖南大唐先一科技有限公司主任架构师舒畅《IoTDB 在发电领域的应用实践》

Apache IoTDB

听GPT 讲Rust源代码--compiler(27)

fliter

海外项目管理工具 Jira 宣布Data Center版涨价5%-15%,6年内第8次提价

爱吃小舅的鱼

Atlassian Jira

技术分享| 利用 Google MFA 实现 Amazon linux 2023 身份校验

伊克罗德信息科技

C# 数据类型与类型转换:包含教程与示例

小万哥

C# 程序人生 编程语言 软件工程 后端开发

Java核心技术·卷I(原书第12版)PDF

程序员李木子

Databend x HuggingFace,海量数据,随心分析

Databend

奶茶上云,原生的更好喝

阿里巴巴云原生

阿里云 云原生

听GPT 讲Rust源代码--compiler(26)

fliter

跨境电商的税收政策:卖家需关注的合规问题

技术冰糖葫芦

“元”启未来 · 万象“新”生!合肥少荃湖畔等你来

声网

听GPT 讲Rust源代码--compiler(24)

fliter

听GPT 讲Rust源代码--compiler(25)

fliter

开发一个体育直播软件和网站平台需要哪些东西

软件开发-梦幻运营部

首次公开发声,OpenAI CEO 奥特曼回忆“宫斗门”丨 RTE 开发者日报 Vol.129

声网

为什么在数学的意义上GraphQL严格的优于REST?

canonical

DDD 低代码 graphql

图像处理-Java-去噪/高斯模糊/套红

alexgaoyh

Java 图像处理 去噪 高斯模糊 套红

构建坚固网络,SD-WAN网络配置指南

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

AI智能大模型与低代码:现代应用开发的潮流趋势

EquatorCoco

人工智能 低代码 AI模型 智能模型

阿里云云原生弹性方案:用弹性解决集群资源利用率难题

阿里巴巴云原生

阿里云 云原生 弹性

图像处理锐化-Java-Prewitt算子叠加

alexgaoyh

图像处理 锐化 prewitt算子 噪点 叠加

【智驾未来】低代码开发:加速创新交融的利器

快乐非自愿限量之名

人工智能 车联网 低代码 智能驾驶

稳定币智能分析:未来加密领域策略的关键!

Footprint Analytics

区块链 Token 稳定币

基于 Hologres+Flink 的曹操出行实时数仓建设

Apache Flink

用过都说好!FigJam在线白板使用技巧&替代软件推荐!

彭宏豪95

效率工具 在线白板 办公效率 在线协作 boardmix

Spring Boot 单体应用升级 Spring Cloud 微服务

阿里巴巴云原生

阿里云 云原生 Spring Cloud

2024年了,为什么我还是舍弃不掉 RSS?

伤感汤姆布利柏

云原生微服务:现代化应用开发的支柱

不在线第一只蜗牛

微服务 云原生 架构开发

X Winner受邀出席泰国政府加密峰会,上演未来独角兽的独角戏

股市老人

任务分发系统-Qcmd-http详解_文化 & 方法_袁方叔叔_InfoQ精选文章