Fabric中怎么批量管理遠(yuǎn)程服務(wù)器

本篇文章為大家展示了Fabric中怎么批量管理遠(yuǎn)程服務(wù)器,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的中江網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

Fabric 通過 Group 來組合多臺服務(wù)器。區(qū)別在于由 fabric.group.Group 基類(父類)派生出的兩個子類:  
  • SerialGroup(*hosts, **kwargs):按串行方式執(zhí)行操作
  • ThreadingGroup(*hosts, **kwargs):按并發(fā)方式執(zhí)行操作

下面先看看這個基類:

Fabric中怎么批量管理遠(yuǎn)程服務(wù)器  
我把一些沒用的信息折疊了,比較值得注意的內(nèi)容有:  
  • Group 繼承了 list,所以能夠 extend() ,對傳入的服務(wù)器分別建立 connection
  • 核心的 run() 方法沒有寫實(shí)現(xiàn),用意是留給子類再實(shí)現(xiàn)
  • 最后的 __enter__() 和 __exit__() 實(shí)現(xiàn)了上下文管理器

有了這個基類,接下來就要看 SerialGroup 和 ThreadingGroup 的具體實(shí)現(xiàn)了。

Fabric中怎么批量管理遠(yuǎn)程服務(wù)器  

SerialGroup 類很簡單,只實(shí)現(xiàn)了一個 run() 方法。因?yàn)轭愒诔跏蓟瘯r為所有 host 建立了連接而且存了起來,所以這里只需用 for 循環(huán)依次取出,再執(zhí)行 Connection 的 run() 方法。

這里可以看到一種非常實(shí)用的開發(fā)技巧:創(chuàng)建類時,讓它繼承內(nèi)置的數(shù)據(jù)結(jié)構(gòu)(如 list、dict), 這樣可以直接使用  self.append()、self.extend()、self.update() 等方法把關(guān)鍵的信息存到“自身”,再到取出時則“for xxx in self”,這樣就免了創(chuàng)建臨時的 list 或 dict,也免得要在參數(shù)中傳來傳去。

GroupResult 和 GroupException 是對執(zhí)行結(jié)果和異常的處理,不是我們關(guān)注的重點(diǎn),這里略過。

接下來看看 ThreadingGroup,它也只有一個 run() 方法:

Fabric中怎么批量管理遠(yuǎn)程服務(wù)器  

ExceptionHandlingThread 是一個繼承了 threading.Thread 的類,這是一種創(chuàng)建多線程的方式。每個線程執(zhí)行的方法主要做兩件事:執(zhí)行 connection 的 run() 方法,以及將執(zhí)行成功的結(jié)果存入隊(duì)列中。

Fabric中怎么批量管理遠(yuǎn)程服務(wù)器  

接下來再分別把執(zhí)行成功的結(jié)果與出異常的結(jié)果都存入到 results 中。

所以,F(xiàn)abric 是使用了 threading 多線程的方式來實(shí)現(xiàn)并發(fā)。網(wǎng)絡(luò)請求是 IO 密集型的,使用多線程是不錯的方式。

至此,對于我們在開頭提的問題,就有了一個初步的答案:Fabric 封裝了兩種 Group 來批量管理服務(wù)器,其中串行方式就是用了簡單的 for 循環(huán),而并發(fā)方式使用了 threading 多線程方式。

但是,通過分析這兩種 Group 的實(shí)現(xiàn)代碼(以及使用的實(shí)踐),我們也可以發(fā)現(xiàn) Fabric 的缺陷:  
  • Group 只實(shí)現(xiàn)了 run() 方法,但是 Connection 的 put()、get()、sudo() 等方法都沒有,這意味著用這種方式管理服務(wù)器集群時,只能在上面執(zhí)行 shell 命令……
  • 每次調(diào)用 run() 方法時,它要等所有主機(jī)都執(zhí)行完,才會返回結(jié)果,這意味著先執(zhí)行完的主機(jī)會被阻塞。更為致命的是,如果其中一臺主機(jī)執(zhí)行時出了異常,整個 run() 方法就拋異常,這意味著每次使用 run() 方法時,都需要作異常捕獲
  • run() 方法支持執(zhí)行單條 shell 命令,但是命令的狀態(tài)不會傳遞。假設(shè)先在一個 run() 方法中運(yùn)行 cd 命令切到 A 目錄(非根目錄),再在下一個 run() 方法創(chuàng)建一個文件,最終結(jié)果是該文件并不在 A 目錄,而是在默認(rèn)目錄。解決辦法是用“&&”連接起多條命令,略顯麻煩

上述內(nèi)容就是Fabric中怎么批量管理遠(yuǎn)程服務(wù)器,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標(biāo)題:Fabric中怎么批量管理遠(yuǎn)程服務(wù)器
文章地址:http://bm7419.com/article14/ijhgde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、品牌網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、域名注冊、網(wǎng)站維護(hù)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)