本文整理自:EasyAgent正式开源啦丨开源送“粽”礼
2018年,袋鼠云技术团队决定在技术社区上开源项目,为开源社区贡献力量。
同年FlinkX、FlinkStreamSQL相继上线,经过三年的发展,Star数分别达到2.2k和1.5k,位列Flink生态领域前茅,获得广泛的社区支持。
三年多的时间里,袋鼠云数栈技术团队一直以技术为核心,坚持开源开放、将数字化技术红利回馈社区的理念,不断的为大家分享成果。
在今年4月份的ArchSummit2021年全球架构师峰会上,数栈技术团队为大家分享了《云原生大数据系统架构的实践和思考》,并承诺将陆续开源数栈在云原生方面的实践。
一、EasyAgent是什么
EasyAgent是为远程统一管理主机端Agent生命周期而设计的系统,从2017年上线至今,已累计在金融、政企等生产环境平稳运行超过数千万小时。
在大规模日志收集系统里,通过EasyAgent可以集中管控10000+数量的日志采集器(如elastic filebeat),实现采集器的安装、升级、启停管理和配置更新。
在数栈运维管家EasyManager里,通过EasyAgent可以实现数栈服务的安装、升级、卸载、启停和配置管理。EasyAgent是数栈运维管家的关键组件,是实现数栈自动化部署的基础组件。
二、EasyAgent解决了什么问题
如果说现在“炙手可热”的kubernetes是容器的编排调度者,那么基于EasyAgent则可以实现对传统主机进程(服务)的编排调度。EasyAgent如同部署在各个主机上的Daemonset,以Sidecar的方式管控所纳管进程(服务)的生命周期。
在Linux里,通过service和systemctl可以实现服务(进程)的开机自启和手动启停管理,开源库supervisor也能实现对服务(进程)的守护和手动启停,但是这两者都无法原生支持对服务(进程)的远程调度和管控。
对于系统级服务(可打进OS 镜像)的服务,使用系统原生和supervisor等开源方案基本可以满足需求,但在需要动态对服务进程进行调度(安装、卸载、迁移)、启停、变更配置时,系统原生和supervisor的方案就无法满足了。
EasyAgent就是在这样的需求背景下产生的,它在服务端和网络主机之间打通了一条链路,实现对目标主机服务(进程)的编排和生命周期的管理。
在企业级软件系统交付行业里,交付软件的第一步是部署,如何快速实现自研商业软件的自动化部署和运维,往往代表着一家ToB企业的交付效率和交付成本。
成熟的商业公司选择自研自动化部署和运维工具。EasyAgent是实现数栈云原生部署的基础组件,解决了部署和监控等环节的自动化问题。
三、EasyAgent如何解决上述问题
EasyAgent是为目标主机和上层应用之间搭起一座桥梁。接下来,我们从上层应用和目标主机的角度来说明如何解决上述问题。
1、从上层应用角度
EasyAgent初衷是为远程统一管理主机端服务(进程)生命周期提供一种解决方案,所以我们首先对服务(进程)的生命周期进行了抽象。
参考service和supervisor等,我们把服务(进程)的生命周期抽象为查询、安装、配置、启动、停止、执行、卸载七个过程,对应的我们封装了七个API供上层业务系统调用,上层业务根据业务要求,组织并调用对应的API来满足需求,如自动化部署平台业务视角。
2、从远程主机角度
主机端运行的Sidecar采用Golang语言开发,可同时兼容多种OS和Arch的主机。为了降低对网络策略的要求,EasyAgent采用Push模式,主机端单向注册到server端。
主机端sidecar的部署过程即是主机的接入过程,主机接入之后sidecar与server端建立TCP即可实时响应server端发送过来的管控指令。sidecar和server之间通过gRPC进行通信,主要有三个通信接口,详情请参考:
https://github.com/DTStack/easyagent/blob/master/docs/protoc.md
#syntax = "proto3";
service EasyAgentService {
rpc registerSidecar (RegisterRequest) returns (RegisterResponse);
rpc readyForControl (ControlRequest) returns (stream ControlResponse);
rpc reportEvent (Event) returns (EmptyResponse);
}
上层业务通过install安装的服务,在目标主机上以sidecar的子进程形式存在,sidecar守护并控制服务进程的启停。同样,上层业务通过exec和config接口可远程实现服务的配置查看和更新。在sidecar端实时采集的服务状态/性能等信息通过接口reportEvent实时同步到server端,server端可选择性把服务状态/性能数据同步到第三方存储,例如Elasticsearch、influxdb等,这样可以实现对服务状态的动态观测。
四、如何体验EasyAgent
EasyAgent开源项目地址:
https://github.com/DTStack/easyagent
如果你想要更好的了解 EasyAgent 项目,前往学习Quick Star(新手教程),三步了解 EasyAgent 使用方法:
https://github.com/DTStack/easyagent/blob/master/docs/quickstart.md
如果你有任何关于扩展 EasyAgent 的奇妙想法,欢迎前往 github 社区通过 Issue 来进行讨论。
数栈是云原生—站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变化的数据,是全域、异构、批流一体的数据同步引擎。大家喜欢的话请给我们点个star!star!star!
github开源项目:https://github.com/DTStack/flinkx
gitee开源项目:https://gitee.com/dtstack_dev_0/flinkx