腳本原子化設計理念

来源:http://www.cnblogs.com/verrion/archive/2016/09/22/script_atom.html
-Advertisement-
Play Games

腳本原子化設計理念 運維的目標:運維當中重覆著大量相同相似的工作,機器規模數量一上來,則需要考慮自動化運維,儘量做到第一次人工處理,後面都依賴腳本或者工具和WEB化來完成。這樣編寫shell、python腳本變得非常重要,不僅可以替代很多重覆工作,而且提高效率和減少人工失誤率,我建議即使公司只有10 ...


腳本原子化設計理念

運維的目標:運維當中重覆著大量相同相似的工作,機器規模數量一上來,則需要考慮自動化運維,儘量做到第一次人工處理,後面都依賴腳本或者工具和WEB化來完成。這樣編寫shellpython腳本變得非常重要,不僅可以替代很多重覆工作,而且提高效率和減少人工失誤率,我建議即使公司只有10台伺服器,最低標準也要腳本化。然而我發現工作中很多運維人員編寫出來的腳本質量太差,並且每個腳本都在重覆很多代碼,用資料庫名詞來說就叫做冗餘,這樣觸發我寫該文章的目的,設計腳本原子化(該名詞由騰訊某位大牛提出來的)

 

一、設計初衷

1. 運維在日常的工作中可能會寫很多腳本來完成特定的一些功能,比如運維A寫個版本發佈的代碼,裡面會有文件推送的邏輯,運維B想實現一個遠程腳本執行的功能,可能在他的代碼里也有文件推送的邏輯。在沒有引入原子化設計的概念下,運維人員用各自的方式來實現文件推送這塊的邏輯。這樣一來工作效率會很低,運維人員都在重覆的造輪子,而且這個輪子只適合他自己的業務場景 


     

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

(2).腳本充分解耦

     因為腳本是一個個原子組成的,出現時易於排查。

 

二、原子化設計規範

所謂腳本原子,就相當於是一個腳本(如:python),完成一個特定的功能。用戶不用關心裡面的邏輯是什麼樣的,只需要知道這個原子是乾什麼的,然後向這個原子傳入事先約定好的參數(類型API),然後根據原子的輸出來判斷原子的執行狀態。

 

 

Demo:

1.編寫原子腳本

cat push_fle.py

 

該原子實現了一個文件推送的功能,它需要用戶提供三個參數,源文件路徑、目的文件路徑、推送的機器,返回的結果是一個字典,包括狀態碼、正確信息、錯誤信息。

 

2.原子調用

運維調用原子建議用python來實現。因為shell在調用python腳本時是作為該shell腳本的子進程出現的,如果原子異常退出,shell腳本還是會往下執行的,而且shell在調用python腳本時對它的返回結果也不好獲取

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 資料庫: 結構化查詢語言(Structured Query Language)簡稱SQL; 資料庫管理系統(Database Management System)簡稱DBMS; 資料庫管理員(Database Administration)簡稱DBA,功能是確保DBMS的正常高效運行; 資料庫分體驗 ...
  • 圖解安裝 PostgreSQL 【博主】反骨仔 【原文地址】http://www.cnblogs.com/liqingwen/p/5894462.html 序 園友的一篇《Asp.Net Core 項目實戰之許可權管理系統(3) 通過EntityFramework Core使用PostgreSQL》需 ...
  • 之前是Windows 10版本1607版本14393.102升級14393.187過後,突然出現不能撥公司防火牆的L2TPVPN了。 網上眾說紛紜,原來遇到這個問題的人真不少,不過我是第一次遇到。結合網上一些分析過後,我電腦的解決方式是: 錯誤描述:當連接VPN是回傳錯誤為“ L2TP連接嘗試失敗, ...
  • GPIO 即通用輸入輸出口。凡事都要熟悉,熟能生巧。一定要掌握MDK軟體的工程操作方法。 對於GPIO的操作。 Project裡面要有以下幾個文件夾(開發之前需要包含相應的庫文件,這裡預設已經包含) STEP BY STEP(以按鍵和LED燈為例): 1.在USER文件夾里新建對應功能的C文件和H文 ...
  • 今天將mac os升級到了10.12,但是第一次關機就一直停著不動,只能強制關機(按電源鍵). 在網上查了下,這是mysql的一個bug. 進入到系統偏好設置中,點擊MySql,取消Automatically start mysql server on startup. ...
  • 1、單次轉換模式 通過配置“模式寄存器的MD2、MD1、MD0為001”,便可啟動單次轉換。 流程“上電 -》 單次轉換 -》 省電模式 ” , 片內振蕩上電需要大約1ms。 單次轉換的時序圖: 數字的含義:0x08 :表示後面的數字是用來設置mode register的; 0x280060:用來設 ...
  • linux free命令查看記憶體使用情況 導讀:linux free命令查看記憶體使用情況,free命令輸出結果的各選項的含義,以及free結果中buffer與cache的區別。 linux free命令查看記憶體使用情況free命令查看記憶體使用: 複製代碼代碼如下: [root@prdmis-db / ...
  • 修改setting.py http://www.cnblogs.com/fengri/articles/django5.html http://unun.in/python/216.html ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...