指令碼原子化設計理念

2022-08-24 11:06:15 字數 1638 閱讀 2836

指令碼原子化設計理念

運維的目標:運維當中重複著大量相同相似的工作,機器規模數量一上來,則需要考慮自動化運維,盡量做到第一次人工處理,後面都依賴指令碼或者工具和web化來完成。這樣編寫

shell

、python

指令碼變得非常重要,不僅可以替代很多重複工作,而且提高效率和減少人工失誤率,我建議即使公司只有

10一、設計初衷

1. 運維在日常的工作中可能會寫很多指令碼來完成特定的一些功能,比如運維

a寫個版本發布的**,裡面會有檔案推送的邏輯,運維

b想實現乙個遠端指令碼執行的功能,可能在他的**裡也有檔案推送的邏輯。在沒有引入原子化設計的概念下,運維人員用各自的方式來實現檔案推送這塊的邏輯。這樣一來工作效率會很低,運維人員都在重複的造輪子,而且這個輪子只適合他自己的業務場景

2. 在引入原子化設計後,我們盡量將指令碼的一些常用邏輯抽出來,做成乙個公用的模組,這個模組就可以成為乙個原子。有了原子,運維不用再關心這些基礎的模組怎麼去實現,而是只關心上層的邏輯,當他需要乙個基礎功能時,只需要去原子資源池裡找,找到後然後呼叫這個原子即可。

這樣設計有以下方面的好處:

(1).提高運維開發效率

運維不需要再從頭到尾寫他的邏輯**了,而是轉而去資源池找他需要的原子,然後再把這些原子拼接起來。

(2).指令碼充分解耦

因為指令碼是乙個個原子組成的,出現時易於排查。

二、原子化設計規範

所謂指令碼原子,就相當於是乙個指令碼(如:

python)

,完成乙個特定的功能。使用者不用關心裡面的邏輯是什麼樣的

,只需要知道這個原子是幹什麼的,然後向這個原子傳入事先約定好的引數(型別

api)

,然後根據原子的輸出來判斷原子的執行狀態。

1.編寫原子指令碼

該原子實現了乙個檔案推送的功能,它需要使用者提供三個引數,原始檔路徑、目的檔案路徑、推送的機器,返回的結果是乙個字典,包括狀態碼、正確資訊、錯誤資訊。

2.原子呼叫

運維呼叫原子建議用python來實現。因為

shell

在呼叫python

指令碼時是作為該

shell

指令碼的子程序出現的,如果原子異常退出,

shell

指令碼還是會往下執行的,而且

shell

在呼叫python

指令碼時對它的返回結果也不好獲取

Redis Lua指令碼實現復合操作原子化

redis是高效能的key value資料庫,在很大程度克服了memcached這類key value儲存的不足,在部分場景下,是對關聯式資料庫的良好補充。得益於超高效能和豐富的資料結構,redis已成為當前架構設計中的首選key value儲存系統。雖然redis官網上提供了200多個命令,但做程...

原子化字串

在編譯器或者其它語言處理軟體的開發過程中,字串管理是非常重要的。原子化字串可以提公升符號管理和檔名管理。pimpl模式宣告 class atomsimpl class atoms atoms string container實現 struct atomsimplnode class atomsimp...

forEach的原子化案例

坐著發呆,時間短暫,抽幾分鐘寫個知識點,混個熱臉。言簡意賅,對於全域性變數,foreach內部迴圈出的值不能直接賦予,下面示例是字串賦值,會提示原子性錯誤,可用stringbuilder來替代就可以賦值了,不過本例場景用stringbuilder追加會造成引數值疊加的問題,所以,避免原子性問題和引數...