【中云網(wǎng) 譯文】Puppet軟件是模型驅(qū)動型,Ruby編程軟件(Chef是其中的一種)是程序驅(qū)動型。二者都龐大無比、雜亂無章,是被眾多陷阱所困的開源生態(tài)系統(tǒng)。
在過去幾年中,圍繞辦公室的游戲計劃總是十分簡單。CEO們強調(diào)“要快”,CTO會說“云”,最后所有人點頭答應(yīng)“當然”。
所有美好的事物都走到了盡頭。單詞“云”曾讓企業(yè)員工感到十分積極愉快,因為它承諾能幫我們分擔太多的瑣事。只要應(yīng)用了魔法般的云,用云的魔杖輕敲網(wǎng)頁,就能把所有問題的藥方全部分配下去,問題也就隨之消散。
唉,每個人都慢慢發(fā)現(xiàn),云本身就面臨著大堆的麻煩。舊的問題解決了,隨之而來的是新的問題。困難就是我們現(xiàn)在需要管理著成打的、數(shù)以百計的、甚至是數(shù)以千計的機器設(shè)備。云讓我們很輕松地部署了這些機器,但現(xiàn)在我們需要管理這些設(shè)備。這就像古老的格言描述小貓和流浪狗那般:喂養(yǎng)它們一次,(然后不得不)照顧它們一生。
在這種情況下,部署成打的、數(shù)以百計的、甚至數(shù)以千計的設(shè)備時獲得的愉悅,意味著很快又有了成打的、數(shù)以百計的、甚至數(shù)以千計的補丁需要我們安裝;有成打的、數(shù)以百計的、甚至數(shù)以千計的安全漏洞需要我們修補;有成打的、數(shù)以百計的、甚至數(shù)以千計的更新版本需要我們下載。當我們只有幾臺設(shè)備的時候,這種程度的保養(yǎng)維護只需要花費數(shù)分鐘。但假如把這數(shù)分鐘乘以幾打、乘以幾百,甚至乘以幾千,我們得到的是以天、周和月來衡量的瑣碎事情。
感謝老天爺,讓我們可以自動化完成。過去那么多年,智能系統(tǒng)管理員看著激增的任務(wù)列表,找到了一種撰寫腳本的方法,解決這些重復的任務(wù)。他們建立了他們自身的低級機器程序管理員來為他們做這些工作。
二者都是開源代碼架,設(shè)計用于讓用戶方便地訪問并打開存儲在用戶龐大的虛擬設(shè)備王國忠的文件。二者都擁有開源的市場,方便用戶交換插件,擴展組織架構(gòu),管理特殊版本的硬件或軟件。二者都非???,并且都在全球的數(shù)據(jù)中心的羊腸小道上找到了最合適的路徑。二者現(xiàn)在都擁有公司圍繞開源的核心賣點援助。
Puppet vs. Chef 一覽
模型VS程序
有區(qū)別嗎?不是那些特別抽象的感覺上的區(qū)別。他們都推送說明,幫助配置或改裝用戶的設(shè)備組合。當然“改裝”總體來說,意味著安裝收藏或其他文件的新版本。
但世界充滿著派系黨爭。無論什么時候,每當我們靠近一個統(tǒng)一的諧波收斂,人類就會分裂為不同的競爭群體。人們總能找到某種方式,然后分裂。
在這種情況下,斗爭是通過語言來進行的。Chef軟件由Ruby編程和Erlang編寫而成,用戶可以在純Ruby編程下編寫特殊版本或延展版本,純Ruby版本是全語言和顯然不純的語言,有時也被戲稱為“特定于域”的語言的一個子集,該子集僅向用戶提供足夠的內(nèi)容以滿足用戶需求。
Puppet,另一方面,則擁有非常獨有的語言。它將所有的安裝需求打包,用波形括號捆綁在一起。有點類似JSON,但通過有條件的運營商和面向?qū)ο蟮念惣軜?gòu)增加了樂趣。如果用戶不喜歡這樣,Puppet自2.6版本之后,也可以允許用戶使用Ruby編寫特殊版本。
花費太多時間擔心語言問題很可能并非好主意--真正的區(qū)別還在更深層的地方。Puppet代碼是Puppet說明的依賴項列表,你可能會說,“在B之前安裝A”,并且你在代碼的任何地方都這么說。Puppet會找到你列出的內(nèi)容,并確保A會第一個添加。
Chef,另一方面,更加透明。用戶最好確保安裝B過程之前,先安裝B,因為Chef遵循給定的說明。
到底對用戶來說,那種更好呢?很幸運地,有人撰寫了長篇的評論文章討論他們的觀點。其中有一篇是文章作者本人喜歡的史蒂夫·特勞戈特(Steve Traugott)和蘭斯·特朗(Lance Brown)合寫的“為什么命令很重要:在自動化系統(tǒng)管理下的平衡轉(zhuǎn)型”。Chef愛好者喜歡所有這些依賴項轉(zhuǎn)向一個瘋狂的數(shù)量,并且不會導致連貫在一起。Andrew Clay Shaefer在他的博客上辯論到,絕大多數(shù)的時間里,我們沒那么聰明到用Puppet做正確的事情,并使用Puppet做好事而不會困擾--除非當他沒那么干的時候。我仍然不能下定決心。