一、项目介绍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 {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-agentgithub地址:https://github.com/baidu/ipipe-agent代码库中agent-core目录为主程序,内置执行shell任务能力agent-core必须在本代码库开发,扩展任务能力插件建议放在本代码库独立子目录开发