DevOps發(fā)展的9個趨勢 不完整的實(shí)踐阻礙DevOps的發(fā)展
DevOps包含了太多方面的技術(shù)和實(shí)踐,很難通過一個統(tǒng)一的工具鏈來描述其發(fā)展。即便如此,我們?nèi)匀豢梢钥闯鲆恍┶厔荨=衲辏矣行易鳛橹骶巺⑴c了***一期技術(shù)雷達(dá)的譯制,作為DevOps的愛好者,十分高興能在這一過程中看到DevOps未來發(fā)展的幾個趨勢,總結(jié)成了這篇文章。
趨勢1:微服務(wù)目前仍然是DevOps技術(shù)應(yīng)用和發(fā)展的主要領(lǐng)域
微服務(wù)將單塊應(yīng)用系統(tǒng)切割為多個簡單獨(dú)立的應(yīng)用。從技術(shù)上說,這是通過工具把應(yīng)用程序的內(nèi)部復(fù)雜度轉(zhuǎn)化為外部復(fù)雜度,需要一系列工具支撐微服務(wù)本身以及服務(wù)之間的通信。從組織上說,微服務(wù)團(tuán)隊(duì)要滿足“快速發(fā)布,獨(dú)立部署”的能力,則必須具備DevOps的工作方式。
如何拆解微服務(wù)一直是微服務(wù)技術(shù)應(yīng)用的***難點(diǎn)之一,領(lǐng)域驅(qū)動設(shè)計(jì)是比較理想的微服務(wù)拆解方法論。
社會化代碼分析幫助團(tuán)隊(duì)通過更精確的數(shù)據(jù)找到更加合適的拆分點(diǎn)。CodeScene是一個在線服務(wù),它能幫助識別出熱點(diǎn)和復(fù)雜且難以維護(hù)的子系統(tǒng),通過分析分布式子系統(tǒng)在時間上的耦合發(fā)現(xiàn)子系統(tǒng)之間的耦合。此外,它還能幫你認(rèn)識組織中的康威定律,這會大大降低微服務(wù)解耦的難度。
此外,微服務(wù)系統(tǒng)本質(zhì)上是一個分布式系統(tǒng),分布式系統(tǒng)之間的通信一直是很重要的問題。本期介紹的Kafka Streams和OpenTracing就是這類技術(shù)的條目。Kafka作為一個成熟的分布式消息系統(tǒng)已經(jīng)被廣泛采用,而Kafka Streams則將***實(shí)踐以“庫”的方式呈現(xiàn)給開發(fā)人員,使得操作Kafka更加自然和簡單。而OpenTracing則彌補(bǔ)了跨越多個微服務(wù)之間請求追蹤的空白。
另一方面,無服務(wù)器風(fēng)格的架構(gòu)(Serverless architecture)把DevOps技術(shù)在微服務(wù)領(lǐng)域的應(yīng)用推向***。當(dāng)應(yīng)用程序執(zhí)行環(huán)境的管理被新的編程模型和平臺取代后,團(tuán)隊(duì)的交付生產(chǎn)率得到了進(jìn)一步的提升。一方面它免去了很多環(huán)境管理的工作,包括設(shè)備、網(wǎng)絡(luò)、主機(jī)以及對應(yīng)的軟件和配置工作,使得軟件運(yùn)行時環(huán)境更加穩(wěn)定。另一方面,它大大降低了團(tuán)隊(duì)采用DevOps的技術(shù)門檻。
然而,端到端交付以及微服務(wù)中的函數(shù)管理問題日漸突出。盡管AWS API gateway和AWS Lambda幾乎成了Serverless架構(gòu)的代名詞,但這二者結(jié)合的開發(fā)者體驗(yàn)并不佳。于是出現(xiàn)了Serverless framework和CLAUDIA這樣的管理工具。
AWS Lambda帶來的優(yōu)勢也深深影響了企業(yè)級應(yīng)用領(lǐng)域,Apache OpenWhisk就是企業(yè)級無服務(wù)器領(lǐng)域的選擇之一,它使得企業(yè)級應(yīng)用也可以采用無服務(wù)器風(fēng)格的架構(gòu)構(gòu)建應(yīng)用程序。
在微服務(wù)端到端交付流程上,Netflix開源了自家的Spinnaker,Netflix作為微服務(wù)實(shí)踐的先鋒,不斷推出新的開源工具來彌補(bǔ)社區(qū)中微服務(wù)技術(shù)和***實(shí)踐的缺失。而Spring Cloud則為開發(fā)者提供了一系列工具,以便他們在所熟悉的Spring技術(shù)棧下使用這些服務(wù)協(xié)調(diào)技術(shù)(coordination techniques),如服務(wù)發(fā)現(xiàn)、負(fù)載均衡、熔斷和健康檢查。
而在微服務(wù)的安全上,最常見的需求之一 是通過身份驗(yàn)證和授權(quán)功能來保護(hù)服務(wù)或API。這部分功能往往是最重要且不斷重復(fù)構(gòu)造的。而Keycloak就是一個開源的身份和訪問管理解決方案,用于確保應(yīng)用程序或微服務(wù)的安全。且?guī)缀醪恍枰帉懘a,開箱即用。它支持單點(diǎn)登錄,社交網(wǎng)絡(luò)登錄和標(biāo)準(zhǔn)協(xié)議登錄(如OpenID Connect,OAuth2和SAML等)。
趨勢2:以Docker為核心的數(shù)據(jù)中心方案逐漸走向成熟
在過去的兩年,Docker社區(qū)有了突飛猛進(jìn)的發(fā)展,似乎每期技術(shù)雷達(dá)都會出現(xiàn)Docker相關(guān)的條目。而Docker往往和DevOps聯(lián)系起來,被認(rèn)為是推動DevOps發(fā)展的殺手級工具,以至于有些人會以團(tuán)隊(duì)是否采用Docker作為團(tuán)隊(duì)是否具備DevOps能力的標(biāo)志。
而這一社區(qū)的創(chuàng)新數(shù)量則日漸平緩。一方面,開源社區(qū)激烈的競爭淘汰了一部分技術(shù)。另一方面,以Docker為中心的完整數(shù)據(jù)中心解決方案在不斷的整合開源社區(qū)的零散工具并形成***實(shí)踐。為端到端的開發(fā)和運(yùn)維提供更完整的交付體驗(yàn),各大廠商也相繼開始推廣自己的企業(yè)級整體收費(fèi)解決方案,這表明Docker的使用已經(jīng)走向成熟。
在本期的技術(shù)雷達(dá)里的條目中出現(xiàn)了Mesosphere DC/OS,這是構(gòu)建統(tǒng)一技術(shù)棧數(shù)據(jù)中心的一個征兆。在這方面Docker EE和Rancher都是非常有力的競爭者。根據(jù)我的判斷,在未來的Docker社區(qū)里,統(tǒng)一容器化數(shù)據(jù)中心的競爭者將會進(jìn)一步減少。而之前的私有云方案則慢慢會被“以Docker為核心數(shù)據(jù)中心級全棧交付”取代。
趨勢3:不完整的DevOps實(shí)踐阻礙著DevOps的發(fā)展
很遺憾看到單一持續(xù)集成實(shí)例和不完整的持續(xù)集成(CI Theatre)這樣的條目出現(xiàn)在技術(shù)雷達(dá)里。可以感到企業(yè)應(yīng)用DevOps技術(shù)的緊迫性。這同時也暴露了DevOps領(lǐng)域里“缺乏門檻較低且成熟的DevOps實(shí)踐”的問題。
大部分企業(yè)在DevOps轉(zhuǎn)型中僅僅關(guān)注到了工具的升級。卻忽視了價值流、生產(chǎn)流程中各個活動中的***實(shí)踐以及DevOps團(tuán)隊(duì)文化的構(gòu)建,這會使團(tuán)隊(duì)陷入“已經(jīng)完成DevOps轉(zhuǎn)型的假象“,而停止了團(tuán)隊(duì)的自我改進(jìn)。
DevOps的實(shí)踐包含組織改進(jìn)和技術(shù)升級兩個部分,技術(shù)往往是最容易的部分。而缺乏組織改進(jìn)的技術(shù)提升往往很難給組織帶來質(zhì)的飛躍。具備DevOps文化的團(tuán)隊(duì)則會不斷反思和學(xué)習(xí),通過共擔(dān)責(zé)任和相互合作不斷完善組織的DevOps實(shí)踐。
趨勢4:領(lǐng)域特定的DevOps實(shí)踐開始出現(xiàn)
DevOps的最早實(shí)踐來自于互聯(lián)網(wǎng)企業(yè)的Web應(yīng)用,相應(yīng)的思想被引入企業(yè)級應(yīng)用并促進(jìn)了一系列工具的發(fā)展。雖然并不是每一種應(yīng)用軟件交付形式都適合DevOps,但隨著DevOps的工具不斷成熟。其它領(lǐng)域的DevOps實(shí)踐也開始嘗試借鑒Web應(yīng)用領(lǐng)域的自動化工具,并逐漸形成領(lǐng)域級的DevOps實(shí)踐。
在人工智能領(lǐng)域,TensorFlow就是這樣一個例子,它可以有多種DevOps友好的安裝和部署方式 ,例如采用Docker進(jìn)行部署。
在區(qū)塊鏈領(lǐng)域,超級賬本(HYPERLEDGER) 就是這樣一個例子,它提供了一套工具和服務(wù),結(jié)合DevOps相關(guān)技術(shù)和實(shí)踐形成了一個完整的解決方案。
隨著DevOps相關(guān)概念和技術(shù)不斷向各個產(chǎn)業(yè)領(lǐng)域的深入發(fā)展,可以看到DevOps技術(shù)和實(shí)踐帶來的巨大影響力。然而,每個技術(shù)領(lǐng)域都有自己所關(guān)注的特性,并不是以往的DevOps實(shí)踐可以全覆蓋到的,這恰恰成為了DevOps技術(shù)和實(shí)踐發(fā)展的契機(jī)。我很期待領(lǐng)域特定的DevOps技術(shù)實(shí)踐給DevOps帶來的發(fā)展。
趨勢5:采用DevOps進(jìn)行技術(shù)債務(wù)重組和技術(shù)資產(chǎn)管理
技術(shù)債務(wù)類似于金融債務(wù),它也會產(chǎn)生利息,這里的利息其實(shí)就是指由于魯莽的設(shè)計(jì)決策導(dǎo)致需要在未來的開發(fā)中付出更多的努力。
投資銀行業(yè)往往采用多種金融工具組合的方式來處理企業(yè)的不良債務(wù)。而清理技術(shù)債務(wù)的實(shí)踐和工具卻乏善可陳。
技術(shù)債務(wù)不光阻礙了企業(yè)通過新技術(shù)帶來便利,還使企業(yè)償還技術(shù)債務(wù)所承擔(dān)的成本越來越高,例如技術(shù)人才的流失,技術(shù)利息等綜合性風(fēng)險。
雖然極少會出現(xiàn)企業(yè)因技術(shù)債務(wù)而走向衰敗的案例,但新晉企業(yè)憑借新技術(shù)和商業(yè)模式顛覆傳統(tǒng)行業(yè)并奪取市場份額的報道卻不斷發(fā)生。 這從另一方面說明技術(shù)債務(wù)綜合提升了采用新技術(shù)的機(jī)會成本,使企業(yè)不斷失去創(chuàng)新和領(lǐng)先的巨大潛力。
DevOps技術(shù)棧的多元化為分散遺留系統(tǒng)技術(shù)債務(wù)風(fēng)險提供了一套靈活而又低風(fēng)險的工具和方法論。不斷幫助企業(yè)從遺留系統(tǒng)的負(fù)擔(dān)中解脫出來。
而微服務(wù)則是首先通過領(lǐng)域拆分技術(shù)債,并用相應(yīng)工具重組技術(shù)債。分離優(yōu)質(zhì)技術(shù)資產(chǎn)和不良資產(chǎn),通過分散風(fēng)險來降低拋棄成本。 而將API當(dāng)做產(chǎn)品(APIs as a product)可以從一個全新的演進(jìn)視角去看待技術(shù)債,通過可用性測試和用戶體驗(yàn)研究幫企業(yè)剝離出技術(shù)債務(wù)中的優(yōu)質(zhì)資產(chǎn)和不良資產(chǎn)。
另一方面,本期技術(shù)雷達(dá)中出現(xiàn)了封裝遺留系統(tǒng)這樣的實(shí)踐,它往往配合著Vagrant,Packer和Docker這樣的工具一起使用。一方面它將技術(shù)債務(wù)的風(fēng)險進(jìn)行了隔離,另一方面它防止了遺留系統(tǒng)上產(chǎn)生的技術(shù)債利息的增長。
趨勢6:安全成為推動DevOps全面發(fā)展的重要力量
安全是DevOps永遠(yuǎn)繞不開的話題,也往往是新技術(shù)在傳統(tǒng)行業(yè)(例如金融和電信)應(yīng)用中的***阻礙。一方面,組織結(jié)構(gòu)的轉(zhuǎn)型迫使企業(yè)要打破原先的部門墻,這意味著很多原先的控制流程不再適用。另一方面,由于大量的DevOps技術(shù)來源于開源社區(qū),缺乏強(qiáng)大技術(shù)實(shí)力的企業(yè)在應(yīng)用相關(guān)技術(shù)時不免會有所擔(dān)憂。
從代碼中解耦秘密信息的管理則讓我們避開了一些開發(fā)過程中可能會產(chǎn)生的安全隱患。采用git-crypt這樣的工具可以幫我們保證在開發(fā)的過程中源代碼內(nèi)部的信息安全。而采用HashiCorp Vault則提供了脫離應(yīng)用程序代碼的秘密信息存儲機(jī)制,使得應(yīng)用在運(yùn)行過程中的秘密得到了有效保護(hù)。
Linux Security Module則一直在技術(shù)雷達(dá)的“采用”區(qū)域,通過SELinux和AppArmor這樣的LSM兼容幫助團(tuán)隊(duì)評估誰可以訪問共享主機(jī)上的哪些資源(包括其中 的服務(wù))。這種保守的訪問管理方法將幫助團(tuán)隊(duì)在其SDLC流程中建立更好的安全性。以往這是Ops團(tuán)隊(duì)需要考慮的問題,而對DevOps的團(tuán)隊(duì)來說,這是每一個人的事情。
“合規(guī)性即代碼”(Compliance as Code)是繼“基礎(chǔ)設(shè)施即代碼”,“流水線即代碼”之后的又一種自動化嘗試。InSpec作為合規(guī)性即代碼的提出者和實(shí)現(xiàn)者,通過自動化手段確保服務(wù)器在部署后的運(yùn)維生命周期中依然保持安全與合規(guī)。它所帶來的意義在于將規(guī)范制度代碼化,得到了確定性的結(jié)果和解釋。
在不遠(yuǎn)的將來,不難想象人們所面對的法律和法規(guī)規(guī)定不再是一堆會導(dǎo)致歧義的語言文字條目,而是一組由自動化測試構(gòu)成的測試環(huán)境。
安全性和易用性往往被認(rèn)為是魚與熊掌不可兼得的兩個方面。在DevOps之前,團(tuán)隊(duì)吞吐量和系統(tǒng)穩(wěn)定性指標(biāo)曾經(jīng)也面臨這樣的境遇,然而DevOps使得二者可以兼得。同樣我也有信心看到在未來DevOps的領(lǐng)域里,更多易用且安全的工具將會不斷出現(xiàn)。在降低DevOps所帶來的安全風(fēng)險的同時,也提升團(tuán)隊(duì)開發(fā)過程的順暢性和用戶便利性。
趨勢7:Windows Server和.NET平臺下的DevOps技術(shù)潛力巨大
長期以來,Windows和.NET平臺下的DevOps一直都是一個被低估的領(lǐng)域。一方面,社區(qū)缺乏對 Windows Server平臺的興趣。另一方面,Windows Server卻有接近90%的市場占用率,在Web服務(wù)器領(lǐng)域則有33.5%的市場占有率。
有充足理由證明這是一個潛力巨大的市場。 我們看到了CAKE和FAKE這樣的條目,作為.NET平臺下替代MSBuild的構(gòu)建解決方案, 它增強(qiáng)了.NET平臺自動化方面的能力。而HANGFIRE則提供了更易用和靈活的自動化進(jìn)程調(diào)度框架。我很期待未來有更多Windows Server和.NET平臺領(lǐng)域的創(chuàng)新。不久前,Docker已經(jīng)可以在Windows下運(yùn)行。可以預(yù)見到,Windows Server和.NET平臺將會是下一階段DevOps技術(shù)實(shí)踐中值得深入發(fā)掘的領(lǐng)域。
(圖片來自:http://t.cn/RX3hWed)
趨勢8:非功能性自動化測試工具的逐漸完備
自動化測試水平往往是衡量DevOps技術(shù)能力高低的重要指標(biāo),尤其是針對生產(chǎn)環(huán)境應(yīng)用程序的非功能性自動化測試工具。一直以來,技術(shù)雷達(dá)都在嘗試從不同的角度宣揚(yáng)自動化測試的重要性,從軟件的開發(fā)階段延展到了整個應(yīng)用生命周期甚至整體IT資產(chǎn)的管理上。
這期的技術(shù)雷達(dá)仍然關(guān)注了非功能性自動化測試,TestInfra是ServerSpec的Python實(shí)現(xiàn),它使得用Pytest測試基礎(chǔ)設(shè)施成為可能。而MOLECULE旨在幫助開發(fā)和測試Ansible的Role 。通過在虛擬機(jī)或容器上為正在運(yùn)行的Ansible Role測試構(gòu)建腳手架,無需再手工創(chuàng)建這些測試環(huán)境。正如技術(shù)雷達(dá)所說的:“雖然這是一個相當(dāng)年輕的項(xiàng)目,但我們看到了其蘊(yùn)含的巨大潛力。”
趨勢9:Python成為DevOps工作中所不可或缺的語言
早在DevOps剛剛開始盛行的時候,Python就是一個被寄予厚望的語言,因?yàn)榇蟛糠諨evOps工具和實(shí)踐都需要用到Python。雖然也有人嘗試用Ruby或者NodeJS構(gòu)建DevOps工具,然而都沒有Python所構(gòu)建的工具流行。與此同時,仍然不斷有人把其它語言下編寫的工具轉(zhuǎn)化為Python的版本,TestInfra就是這樣一個例子。
隨著Python在大數(shù)據(jù)、人工智能、區(qū)塊鏈、微服務(wù)以及Docker中的發(fā)展,可以預(yù)見Python在日后的領(lǐng)域仍然會發(fā)揮重要的作用。
【本文是51CTO專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號:思特沃克,轉(zhuǎn)載請聯(lián)系原作者】


2020-09-18 08:17:03




