本文整理自: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
上層業務通過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




