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