写点什么

工具介绍 | 百度开源 Server-Agent:高性能、高效率的任务调度执行引擎

发布于: 2021 年 01 月 29 日
工具介绍 | 百度开源Server-Agent:高性能、高效率的任务调度执行引擎

一、项目介绍

Server-Agent(简称 SA)系统,是百度工程效能部实现的一种高性能、高效率的任务调度执行引擎。其核心能力是管理宿主机器资源,并调度任务在这些宿主机上执行。其功能与 Jenkins+Slave 类似,但有如下优点:


  • 高性能:可容纳百倍在线资源和任务并发,同时任务调度效率也更高

  • 高可用:Server 是分布式架构;单个任务或 agent 的异常,不影响系统全局

  • 安全性:不同业务可在物理资源上进行隔离,在最底层就将不同业务分隔开来

  • 易用性:与百度流水线产品深度融合,只需要一条简单的命令启动,无复杂配置


二、Agent 是什么


Agent 即上述 SA 系统的客户端,其功能类似 Slave,可在宿主机上执行 shell 命令并收集执行状态、执行日志。其主要功能如下:


  • 在宿主机上监听 Server 下发的 shell 任务,执行并上报结果

  • 能够并发执行多任务,且能够控制任务的并发数

  • 上传执行日志到云存储

  • 上传报告到云存储(例如单元测试报告)

  • 上传制品到制品库

  • Agent 可实现自升级(基于 jvm 的 shutdown hook 实现)


三、Agent 怎么做


Agent 在 SA 系统架构中的位置如下:



Agent 启动后,会向 Server 发送注册消息,同时定期汇报心跳,如果一定时间内心跳异常,Server 可认为 Agent 异常,将不再向该 Agent 调度任务,直到下一次心跳到来为止。


此外,Agent 定期轮询 Redis,获得任务通知消息,然后向 Server 拉取 Job 信息,执行过程汇总,也会定期更新 Job 执行状态。


Agent 的结构分层如下:



  • 核心模块:该模块的主要功能是对任务监听、管理, 心跳检查、状态机管理、插件中心等

  • 子模块:包含一些功能模块, 支持报告、日志、制品的上传等


四、Agent 的优势


  • Agent 和 Server 通过单向 https 短连接通信,Server 无状态可横向扩缩容量

  • Server 通过 Redis 通知 Agent 执行任务,不是通过 Redis 订阅,而是由 Agent 轮询(100K+qps)

  • Server 维护的 Redis 和任务的状态信息通过 Redis 缓存,保证 Server 挂掉重启后,任务的状态信息不会丢失

  • 支持多操作系统(Linux、Mac、Windows)


五、快速开始


1)、环境要求


jdk(1.6 及以上),mvn


2)、启动


  • agent-core 下执行 mvn package 生成 agent.jar

  • 启动命令:java -jar -s https://${domain} -t ${agent_uuid},其中 agent_uuid 是配置 agent 时候自动生成的唯一标示,可以对比资源管理页面的启动命令-t 参数查到

  • 或者直接在 IDE 中启动,主类为:com.baidu.agile.agent.Main


六、代码与测试


1)、代码包结构


agent


| —agent-core # agent 核心工具


| |—classload # 类加载工具


| |—common # 公共类


| |—context # agent 执行上下文


| |—execute # 任务执行


| |—heart # 心跳检查


| |— hook # 任务执行后 hook


| |— java # java 信息工具


| |— jna # GNU C library


| |— job # 任务管理


| |— log # 日志处理及上传等


| |— os # 各操作系统适配


| |— plugin # 插件中心


| |— process # 进程管理


| |— register # 任务注册


| |— run # 任务获取


| |— upgrade # 自动更新


| |— wrapper # 任务执行前后环境准备


| |— Main # 启动函数


| — README.md


| — build.sh


| —— LICENSE


2)、测试


单元测试用例统一维护在 src/test/main 目录,mvn test 执行单测,mvn cobertura:cobertura 可执行测试并出覆盖率结果报告。


七. 如何贡献


gitee 地址:

https://gitee.com/baidu/ipipe-agent

github 地址:

https://github.com/baidu/ipipe-agent

代码库中 agent-core 目录为主程序,内置执行 shell 任务能力

agent-core 必须在本代码库开发,扩展任务能力插件建议放在本代码库独立子目录开发


更多有关百度的技术文章,欢迎关注“百度开发者中心”微信公众号


发布于: 2021 年 01 月 29 日阅读数: 80
用户头像

关注百度开发者中心,收获一手技术干货。 2018.11.12 加入

汇聚百度所有对外开放技术、平台和服务资源,提供全方位支持,助力开发者加速成功,实现开发者、消费者和百度三方共赢。https://developer.baidu.com/

评论

发布
暂无评论
工具介绍 | 百度开源Server-Agent:高性能、高效率的任务调度执行引擎