执行上传shell_百度开源ServerAgent:一种高性能、高效率的任务调度执行引擎

38df96b10c31c8e0111a4f0f264b7d93.png

一、项目介绍

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

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

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

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

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

二、Agent是什么

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

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

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

  • 上传执行日志到云存储

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

  • 上传制品到制品库

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

三、Agent怎么做

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

eb20b459121f29b8d03ca472ef13c74c.png

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

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

Agent的结构分层如下:

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

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

四、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可执行测试并出覆盖率结果报告。

七、如何贡献

  1. gitee地址:

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

  2. github地址:

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值