運(yùn)維,請警惕腳本災(zāi)難!
過分依賴是腳本,是運(yùn)維非標(biāo)準(zhǔn)化的體現(xiàn)!腳本災(zāi)難,就是運(yùn)維場景管理上直接依賴大量的腳本來完成事務(wù)。
做運(yùn)維的同學(xué)都知道,腳本是一個必備技能,在每個JD的崗位中必然出現(xiàn)。在我們的日常運(yùn)維過程中,腳本發(fā)揮作用的地方也比比皆是:系統(tǒng)管理的腳本;應(yīng)用發(fā)布的腳本;網(wǎng)絡(luò)管理的腳本;存儲管理腳本等等,更復(fù)雜的場景也有用腳本封裝來實現(xiàn)的都有。仿佛腳本成了運(yùn)維的大殺器,特別是python語言起來之后,更是一發(fā)不可收拾。在某銀行客戶中遇到,他們運(yùn)維積累了近兩千個腳本,這真的是對的?
今天我們過分依賴腳本作為一種最初的操作入口,對各類對象進(jìn)行操作,我形象的給他比喻為是過程編程的模式。在大部分客戶中,由于自動化運(yùn)維平臺的缺失,腳本還處于混亂的管理之中,這種混亂表現(xiàn)在:無版本管理;無測試管理;無集中管理,還散亂在各個運(yùn)維人員手中 。這種情況下,腳本的災(zāi)難不可避免。
隨著這兩年的自動化運(yùn)維平臺被不斷接受,很多客戶開始接受平臺的管理模式,大家更接受了一種形態(tài)是——原子作業(yè)庫和基于原子作業(yè)之上的調(diào)度編排。運(yùn)維開始變一股腦往運(yùn)維平臺中寫原子工具,然后通過運(yùn)維工具來構(gòu)建復(fù)雜場景的運(yùn)維場景編排。這個地方尤其要注意:這種編排還是一種過程編排的模式。
在這種模式下,大家不知道注意到一個有意思的現(xiàn)象沒?復(fù)雜的過程編排,存在大量的復(fù)雜參數(shù)傳遞,每一個工具都有入口參數(shù)和出口參數(shù)的設(shè)置,調(diào)度設(shè)置界面非常難以簡化。
如果這么復(fù)雜,是不是設(shè)計上又是錯的呢?那錯的根源到底在哪兒?方式、方法或者是理念設(shè)計上就出現(xiàn)了錯誤。在這個機(jī)制之下,出于腳本安全的需要,我們有必要強(qiáng)化幾個能力的管理:
1.版本的管理。讓工具的修改有序進(jìn)行,可以回溯,對比等等
2.工具的開放性管理。工具設(shè)置成公開和私有管理,確保工具使用的范圍。
3.工具的審核管理。工具的每一次變更,必須通過審核才能入庫。
4.工具在流程中的引用管理。調(diào)度流程是引用工具,當(dāng)工具產(chǎn)生修改,不直接對流程產(chǎn)生影響。
最后一點,我要把具體的做法明確一下,就是流程引用的是工具的快照,確保工具發(fā)生修改,能夠避免對流程帶來影響。就如同在AppStore中應(yīng)用更新,客戶可以收到更新的通知,但不代表系統(tǒng)給你立即更新了。尤其注意!?。?/span>
這個時候我想說,引起腳本災(zāi)難的核心原因:非標(biāo)準(zhǔn)化的過程管理的思維嚴(yán)重,腳本便是最快的是想工具。
那到底如何解決?如何避免腳本依賴引起的腳本災(zāi)難?
首先我必須得說,大量不標(biāo)準(zhǔn)的IT對象存在,我們需要接受腳本存在的合理性,而我們必須要面向未來做出一些改變。如何更有效的管理腳本?在之前講到的引入version control能力,版本化控制,還不夠。我覺得更需要引入IT對象管理的概念,把所有的方法附著到對象上,讓工具方法自動繼承對象的屬性,簡化工具的參數(shù)管理。何為IT對象?從角色出發(fā),所有行程IT場景管理的都可以稱之為對象,比如說網(wǎng)絡(luò)管理員管理的網(wǎng)絡(luò)設(shè)備;系統(tǒng)管理員管理的OS;DBA管理的數(shù)據(jù)庫等等,是一種業(yè)務(wù)邏輯世界的理解;應(yīng)用看到的應(yīng)用系統(tǒng),應(yīng)用組件等等。
對于任何對象,從技術(shù)的角度來設(shè)定的抽象邏輯是:

01、對象屬性
是一個對象的描述,和面向?qū)ο笠粯?,其中包含很多屬性與對象的關(guān)系。拿主機(jī)做例子,
屬性維度:固定資產(chǎn)編號,采購時間,過保時間;
關(guān)系維度:負(fù)責(zé)人,網(wǎng)卡、CPU、內(nèi)存和IO

02、對象的方法
對象的方法就是我們平時的管理動作或者場景,比如說主機(jī)的重啟,主機(jī)的啟動/停止,主機(jī)的回收,主機(jī)的申請等等。這些動作比如對其狀態(tài)和屬性產(chǎn)生影響。
03、對象的狀態(tài)
對象在服務(wù)支撐過程中,必然會產(chǎn)生一些狀態(tài)信息,是一種運(yùn)行健康狀態(tài)的表達(dá)。
04、對象的事件
事件是一種狀態(tài)變化產(chǎn)生的結(jié)果,比如說狀態(tài)異常產(chǎn)生的簡單事件,如告警,狀態(tài)經(jīng)過模型計算產(chǎn)生的復(fù)雜事件,比如說容量事件。當(dāng)然還有一個維度是人工操作事件。
當(dāng)然提到了IT對象管理能力,如何降低對象復(fù)雜度的表述?這就轉(zhuǎn)換成一個IT對象標(biāo)準(zhǔn)化的課題了,是不是邏輯就簡單了。對象的標(biāo)準(zhǔn)化是運(yùn)維必須面臨的課題,必須要直面。把IT對象復(fù)雜度降低,你的管理復(fù)雜度隨之下降。
此時對服務(wù)編排就有更高的要求了,不限于過去簡單的類流程引擎編排能力,需要把過程編排和對象編排(藍(lán)圖編排)合二為一。此時提到的藍(lán)圖編排方法,我還不提TOSCA規(guī)范,那個我依然今天對很多基礎(chǔ)設(shè)施來說要求很高,畢竟支持TOSCA的基礎(chǔ)設(shè)施也不多。請對你的流程編排引擎進(jìn)行升級吧,讓他支持對象編排。自定義對象管理庫,把過程編排和對象編排的混合編排能力構(gòu)建起來,從而滿足不同業(yè)務(wù)管理的需要。
總結(jié)來說,避免腳本災(zāi)難的方式,必須從過程管理模式變成對象管理模式。以對象作為管理視角,為其構(gòu)建管理方法(或者腳本或者代碼),通過對象來收斂管理入口,避免運(yùn)維人員直面腳本泛濫。同時基于復(fù)雜的場景能力,也起到收斂工具腳本編排的作用。