ELVES自動化運維開發(fā)平臺
介紹
Elves為一套 開源自動化運維開發(fā)平臺(IT Automatic Develop Platform),面向開發(fā),注重以編程實現(xiàn)運維自動化,致力于為運維研發(fā)人員提供便捷的運維自動化業(yè)務編程實現(xiàn)環(huán)境, Elves自身不提供業(yè)務性功能,運維開發(fā)人員可根據自身的業(yè)務進行應用(APP)的開發(fā)來實現(xiàn)相應業(yè)務的自動化管理。
特性
靈活的業(yè)務(App)編程設計:Elves主要面向運維開發(fā)人員,以編程方式實現(xiàn)某業(yè)務的自動化操作,Elves與用戶間交互以RESTful方式進行,與Apps間交互以進程調用方式進行,理論上支持所有的編程語言,目前Elves提供Python與C#版開發(fā)SDK
任務模式:Elves提供及時任務(同步),隊列任務(異步,支持依賴),計劃任務(異步) 三種任務調度模式,且允許開發(fā)者直接將App-worker的執(zhí)行結果直接反饋至App-processor,以構建C/S架構服務
高可用與高性能:在Elves的設計中各組件為可拔插形式,且極大程度的降低各組件間依賴關系,幾乎所有組件均可以獨立使用與集群部署
數據交互傳輸:Elves-Center間各組件的數據傳輸使用RABBITMQ以隊列形式進行交互,Elves-Center與Elves-Agent間數據傳輸使用Thrift進行交互,開發(fā)人員操作Elves(App)使用RESTful方式交互
開發(fā)語言與結構:Elves自身以C/S架構設計,Elves-Center(SERVER)由JAVA實現(xiàn),Elves-Agent(CLIENT)由Golang實現(xiàn)
定位
可能看完以上的介紹甚至看完以下的架構還會有些人有疑問,ELVES到底能做什么,它在運維自動化中扮演什么樣的角色,這里來簡單介紹一下,了解完后結合[ELVES實踐案例]能對ELVES有一個更清晰的認識。
站在運維自動化系統(tǒng)實現(xiàn)角度,運維自動化系統(tǒng)正走在向平臺化,更優(yōu)質的用戶體驗提升的道路上,往往此類產品均為WEB端或桌面的形式提供運維使用, 這類運維自動化系統(tǒng)若需要與業(yè)務操作系統(tǒng)OS或與操作系統(tǒng)上的服務進行交互的時候往往需要自己定義通訊以及調用的實現(xiàn)方式。通過ELVES后,此類運維自動化系統(tǒng)將可以全部面向統(tǒng)一的EVELS API接口,ELVES API的背后為運維所開發(fā)的各種業(yè)務的實現(xiàn)腳本。
站點運維團隊與開發(fā)(前端)團隊合作角度,運維團隊更懂系統(tǒng),更懂業(yè)務并但產品感不強,前端等技能欠缺,開發(fā)(前端)團隊產品感強,有較好的產品實現(xiàn)技能如前端JS,CCS等,但其不熟悉運維業(yè)務,更不了解具體業(yè)務實現(xiàn)。通過ELVES,開發(fā)(前端)團隊將面向面向的ELVES API接口,運維團隊將更加專注的面向腳本,面向具體功能的
架構
Elves邏輯上以三大核心組成,分別為"Elves-Center","Elves-Agent","Elves-Apps"
Elves-Apps
Apps的便捷開發(fā)為整個系統(tǒng)的核心關注點,Elves-App分為兩部分組成,分別為worker與processor,其中Worker運行在Agent端,簡單點說如果想實現(xiàn)一個C/S架構的App則需要實現(xiàn)Worker與Processor,若只需要一個C架構的App則僅需要實現(xiàn)Worker。在Worker的指令調用中,我們采用進程調用方式,為進一步簡化開發(fā)人員的工作,我們在SDK內置了Agent入口,入口接收到指令后,將指令轉換為方法以及參數并采用動態(tài)加載的方式調用App并將APP執(zhí)行結構格式化后反饋至Elves。
以Python為例,開發(fā)人員只需要確定方法名、參數(Dictionary)實現(xiàn)自身邏輯即可。
App "apptest" Worker 實現(xiàn)
class apptest():
def helloword(self,param):
flag = "false"
try:
result = param["my"]
flag = "true"
except Exception,e:
result = e
return flag,result
如下用戶只需要告知Elves,我要執(zhí)行apptest的helloword方法,參數為{"my":"toryzen"}即可得到toryzen的反饋結構
APP的執(zhí)行后需要返回兩個執(zhí)行結構,分別為flag與result,均為string類型,flag為枚舉:true,false用于確定app的執(zhí)行狀態(tài),result為執(zhí)行反饋結果。
若想獲取反饋結果可以通過Elves API或者實現(xiàn)一個Processor直接由Agent端主動反饋,Processor的實現(xiàn)也非常簡單,可以在后續(xù)的使用手冊中查看。(調試HelloWork示例)
Elves-Center
Elves-Center簡單點說就是Elves的Server端,我們采用微服務為整個Elves提供高可用的服務,所有組件均注冊至Zookeeper檢測存活與部分組件集群化部署選舉,組件間的數據交互使用RABBITMQ以隊列方式進行交互,各組件功能單一且耦合度極低。
Scheduler
任務調度組件:負責發(fā)送APP任務至Elves-Agent
Cron
計劃任務組件:負責以Elves-Center為起點的計劃任務調用組件
Queue
隊列任務組件:負責隊列任務的調度執(zhí)行
Heartbeat
心跳組件:負責獲取Agent的運行狀態(tài),且Elves-agent通過此組件獲取其可執(zhí)行的APP清單
Supervisor
權限控制組件:負責ElvesAPP的管理與各Agent上APP的權限管理,此組件提供WEB化管理
OpenAPI
API:提供HTTP RESTfulAPI方式操作Elves的各項接口
*CMDBProxy
CMDB數據提供代理:為Elves中各組件提供自身CMDB數據信息,便于Elves與自身運維體系的融合
Watcher & Dashbord
Watcher實現(xiàn)對Elves-Center的各組件監(jiān)控:監(jiān)聽Elves-Center中各組件的運行狀態(tài),數據的傳輸等,便于運維Elves與進行Elves指令審計,Watcher的監(jiān)聽方式以RabbitMQ bind *.*的方式進行,對Elves-Center的業(yè)務處理無影響,并將監(jiān)聽結果存儲至MangoDB供后續(xù)查詢。Dashbord為運維Elves的運維人員提供一套方便的WEB化管理界面
Elves-Agent
Elves-agent負責APP的下載與調用,執(zhí)行結果的反饋與上報,以及當前Elves-Agent運行狀態(tài)的監(jiān)控,同時ElvesAgent也提供自身Cron功能、一個Web面板,且為了方便APP的開發(fā),Elves-Agent提供開發(fā)者模式,提供簡易版API直接供開發(fā)交互。
任務模式
在了解任務模式及類型前,我們先來了解一下Elves有哪些實現(xiàn)
- 以發(fā)起方式角度來看:一次APP的執(zhí)行有兩種方式:1、由Elves-Agent端發(fā)起,2、由Elves-Center發(fā)起;
- 從任務的執(zhí)行方式開看有:1、異步執(zhí)行,2、同步執(zhí)行;
- 從APP執(zhí)行的后續(xù)處理來看有:1、處理型,2、非處理型,處理型即APP執(zhí)行結果將反饋至用戶自定義的Processor,非處理型即執(zhí)行結果不反饋至用戶Processor
從上面三個角度出發(fā)共組裝成了 5種 工作模式,并由歸屬于不同的任務
- AANP Agent端發(fā)起,異步執(zhí)行,非處理型
- AAP Agent端發(fā)起,異步執(zhí)行,處理型
- CANP Center端發(fā)起,異步執(zhí)行,非處理型
- CAP Center端發(fā)起,異步執(zhí)行,處理型
- CSNP Center端發(fā)起,同步執(zhí)行,非處理型
任務類型
Elves中共有三種類型的任務,分別為及時任務,隊列任務與計劃任務,從字面就可以理解其含義。
及時任務
及時任務只支持CSNP模式,用戶通過API發(fā)送即時任務后將阻塞等待APP執(zhí)行結果的反饋
隊列任務
隊列任務支持2種模式,1、CANP模式,2、CAP模式 用戶需要使用API先創(chuàng)建隊列,添加隊列中任務,提交隊列后任務開始執(zhí)行,如需獲取執(zhí)行結果,使用方需要另行發(fā)起請求,Elves的隊列任務支持任務間的依賴。
計劃任務
計劃任務支持4種模式,1、AANP模式,2、AAP模式,3、CANP模式,4、CAP模式。其中由Agent端發(fā)起的任務Elves-Center無法進行監(jiān)控與追蹤。用戶可以根據規(guī)則設置有Elves-Center端發(fā)起的計劃任務
----------------------------------
Community & ELVES-WIKI
https://gy-games.gitbooks.io/elves/
