Python自動(dòng)化運(yùn)維:分享高性能可擴(kuò)展的實(shí)用框架
一直在用Python寫(xiě)各種腳本,想做自動(dòng)化運(yùn)維平臺(tái)卻有心無(wú)力,沒(méi)有見(jiàn)過(guò)大的運(yùn)維平臺(tái)怎么做,
自己寫(xiě)的腳本在大的場(chǎng)景下是否靠譜,每當(dāng)討論說(shuō)一些基于ssh獲取數(shù)據(jù)執(zhí)行操作的方式都會(huì)被鄙視。
迷茫大半年找不到方向,最近在reboot系統(tǒng)學(xué)習(xí)了下,收獲很多,很多疑惑和疑難問(wèn)題終于解開(kāi)了。
感謝PC老師講解,程序?qū)ο到y(tǒng)利用的深入講解[cpu\內(nèi)存的利用\系統(tǒng)的特性],
幾款典型開(kāi)源軟件源碼的網(wǎng)絡(luò)模型剖析,如何真正控制多線程,守護(hù)進(jìn)程如何fork的,封裝socket非阻塞的框架,如何制定傳輸協(xié)議。
-
監(jiān)控和執(zhí)行命令流程圖
軟件目錄 [根據(jù)需要分分鐘復(fù)制出一個(gè)server,改改操作就好了]
任務(wù)控制服務(wù)的傳輸數(shù)據(jù)
flask數(shù)據(jù)接口的請(qǐng)求日志
agent的執(zhí)行日志
agent的4個(gè)線程,可隨意擴(kuò)展需求
后臺(tái)請(qǐng)求頁(yè)面和數(shù)據(jù)接口
![高性能可擴(kuò)展的Python自動(dòng)化運(yùn)維框架[作業(yè)] 高性能可擴(kuò)展的Python自動(dòng)化運(yùn)維框架](http://www.vfuj.cn/wp-content/themes/module/themer/assets/images/lazy.png)
-
頁(yè)面ajax調(diào)用數(shù)據(jù)接口
![高性能可擴(kuò)展的Python自動(dòng)化運(yùn)維框架[作業(yè)] 高性能可擴(kuò)展的Python自動(dòng)化運(yùn)維框架](http://www.vfuj.cn/wp-content/themes/module/themer/assets/images/lazy.png)
-
監(jiān)控?cái)?shù)據(jù)出圖
![高性能可擴(kuò)展的Python自動(dòng)化運(yùn)維框架[作業(yè)] 高性能可擴(kuò)展的Python自動(dòng)化運(yùn)維框架](http://www.vfuj.cn/wp-content/themes/module/themer/assets/images/lazy.png)
哎!前面的數(shù)據(jù),6個(gè)server同時(shí)在一個(gè)機(jī)器上跑,毫無(wú)壓力,監(jiān)控圖不好看。。。。我來(lái)搞幾百個(gè)并發(fā)shell進(jìn)程跑跑,把load壓上來(lái)。
-
執(zhí)行命令 [發(fā)出ajax請(qǐng)求,agent異步處理,傳回入庫(kù)后,再用ajax動(dòng)態(tài)調(diào)用數(shù)據(jù)接口顯示]
![高性能可擴(kuò)展的Python自動(dòng)化運(yùn)維框架[作業(yè)] 高性能可擴(kuò)展的Python自動(dòng)化運(yùn)維框架](http://www.vfuj.cn/wp-content/themes/module/themer/assets/images/lazy.png)
總結(jié)
此架構(gòu)非常靈活,任意拆裝拼接,如果小,可功能集成于一點(diǎn),如果大,可隨意擴(kuò)展瓶頸,server全部守護(hù)進(jìn)程方式。
一切魔法都封裝在nbNet模塊中,socket非阻塞,自定義傳輸協(xié)議,QPS幾萬(wàn)毫無(wú)壓力,所有模塊全部導(dǎo)入這個(gè)nbNet模塊,收發(fā)接口全部統(tǒng)一,就可隨意拼接,3分鐘就可以擴(kuò)展出一個(gè)不同功能的server。得此神器,只有想不到?jīng)]有做不到。
nbNet模塊中2個(gè)重要功能,已經(jīng)全部封裝好了,只需要調(diào)用即可。
sendData(sock_a, "reboot", 50003, input) # 發(fā)送數(shù)據(jù),也可任意發(fā)多份給不同server nbNet(self.host, self.port, transfer) # 接收數(shù)據(jù)
flask_web 就是極簡(jiǎn)單的幾個(gè)數(shù)據(jù)接口和html頁(yè)面,不得不承認(rèn)大家確實(shí)都覺(jué)得一些比較炫的web頁(yè)面就很牛,不會(huì)過(guò)多關(guān)注后臺(tái)怎么回事,有張漂亮的臉也確實(shí)吸引 人,不過(guò)確實(shí)需要花不少時(shí)間折騰,像我這種根本不懂審美,時(shí)間又有限,只能做成這個(gè)熊樣了,真心不喜歡折騰web頁(yè)面,啥時(shí)候用啥時(shí)候看,看過(guò)了還是忘, 這里緊緊做了一些監(jiān)控出圖和執(zhí)行命令的ajax調(diào)用。底層框架有了,頁(yè)面隨便找個(gè)做前端的小妹紙配合下就好了。
其他的server流程基本一致,不做過(guò)多重復(fù)展示了,文件傳輸在另外一個(gè)分支上做了,暫時(shí)沒(méi)有合并,有這套框架,業(yè)務(wù)和功能比較好擴(kuò)展了。
這里關(guān)于諸多實(shí)際情況都做出了考慮,比如agent睡眠時(shí)間漂移,監(jiān)控?cái)?shù)據(jù)丟失后時(shí)間戳不連續(xù),報(bào)警動(dòng)態(tài)加載配置,網(wǎng)絡(luò)狀態(tài)不好等等。但還是有很多細(xì)節(jié)需要逐步完善的地方