本文已于5月2日同時(shí)發(fā)表于 ThoughtWorks 洞見,原標(biāo)題為《DevOps 發(fā)展的9個(gè)趨勢(shì)》
DevOps 包含了太多方面的技術(shù)和實(shí)踐咏花,很難通過一個(gè)統(tǒng)一的工具鏈來描述其發(fā)展。即便如此,我們?nèi)匀豢梢詮?ThoughtWorks 技術(shù)雷達(dá)的條目變動(dòng)中看出一些趨勢(shì)。今年就漾,我有幸作為主編參與了最新一期技術(shù)雷達(dá)的譯制,作為 DevOps 的愛好者念搬,十分高興能在這一過程中看到DevOps 未來發(fā)展的幾個(gè)趨勢(shì)抑堡,總結(jié)成了這篇文章。
趨勢(shì)1:微服務(wù)目前仍然是 DevOps 技術(shù)應(yīng)用和發(fā)展的主要領(lǐng)域
微服務(wù)將單塊應(yīng)用系統(tǒng)切割為多個(gè)簡(jiǎn)單獨(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ū)動(dòng)設(shè)計(jì)是比較理想的微服務(wù)拆解方法論铸豁。社會(huì)化代碼分析幫助團(tuán)隊(duì)通過更精確的數(shù)據(jù)找到更加合適的拆分點(diǎn)灌曙。CodeScene是一個(gè)在線服務(wù),它能幫助識(shí)別出熱點(diǎn)和復(fù)雜且難以維護(hù)的子系統(tǒng)节芥,通過分析分布式子系統(tǒng)在時(shí)間上的耦合發(fā)現(xiàn)子系統(tǒng)之間的耦合在刺。此外,它還能幫你認(rèn)識(shí)組織中的康威定律头镊,這會(huì)大大降低微服務(wù)解耦的難度蚣驼。
此外,微服務(wù)系統(tǒng)本質(zhì)上是一個(gè)分布式系統(tǒng)相艇,分布式系統(tǒng)之間的通信一直是很重要的問題颖杏。本期介紹的Kafka Streams和OpenTracing就是這類技術(shù)的條目。Kafka 作為一個(gè)成熟的分布式消息系統(tǒng)已經(jīng)被廣泛采用坛芽,而 Kafka Streams 則將最佳實(shí)踐以“庫”的方式呈現(xiàn)給開發(fā)人員留储,使得操作 Kafka 更加自然和簡(jiǎn)單。而 OpenTracing 則彌補(bǔ)了跨越多個(gè)微服務(wù)之間請(qǐng)求追蹤的空白咙轩。
另一方面获讳,無服務(wù)器風(fēng)格的架構(gòu)(Serverless architecture )把 DevOps 技術(shù)在微服務(wù)領(lǐng)域的應(yīng)用推向極致。當(dāng)應(yīng)用程序執(zhí)行環(huán)境的管理被新的編程模型和平臺(tái)取代后活喊,團(tuán)隊(duì)的交付生產(chǎn)率得到了進(jìn)一步的提升赔嚎。一方面它免去了很多環(huán)境管理的工作,包括設(shè)備胧弛、網(wǎng)絡(luò)尤误、主機(jī)以及對(duì)應(yīng)的軟件和配置工作,使得軟件運(yùn)行時(shí)環(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)勢(shì)也深深影響了企業(yè)級(jí)應(yīng)用領(lǐng)域,Apache OpenWhisk就是企業(yè)級(jí)無服務(wù)器領(lǐng)域的選擇之一稀火,它使得企業(yè)級(jí)應(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ā)者提供了一系列工具,以便他們?cè)谒煜さ?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就是一個(gè)開源的身份和訪問管理解決方案圾另,用于確保應(yīng)用程序或微服務(wù)的安全。且?guī)缀醪恍枰帉懘a雕沉,開箱即用集乔。它支持單點(diǎn)登錄,社交網(wǎng)絡(luò)登錄和標(biāo)準(zhǔn)協(xié)議登錄(如 OpenID Connect 坡椒, OAuth2 和 SAML 等)扰路。
趨勢(shì)2:以 Docker 為核心的數(shù)據(jù)中心方案逐漸走向成熟
在過去的兩年蚯根,Docker 社區(qū)有了突飛猛進(jìn)的發(fā)展诉濒,似乎每期技術(shù)雷達(dá)都會(huì)出現(xiàn) Docker 相關(guān)的條目。而 Docker 往往和 DevOps 聯(lián)系起來份招,被認(rèn)為是推動(dòng) DevOps 發(fā)展的殺手級(jí)工具丈攒,以至于有些人會(huì)以團(tuán)隊(duì)是否采用 Docker 作為團(tuán)隊(duì)是否具備 DevOps 能力的標(biāo)志哩罪。
而這一社區(qū)的創(chuàng)新數(shù)量則日漸平緩。一方面巡验,開源社區(qū)激烈的競(jìng)爭(zhēng)淘汰了一部分技術(shù)际插。另一方面,以 Docker 為中心的完整數(shù)據(jù)中心解決方案在不斷的整合開源社區(qū)的零散工具并形成最佳實(shí)踐显设。為端到端的開發(fā)和運(yùn)維提供更完整的交付體驗(yàn)框弛,各大廠商也相繼開始推廣自己的企業(yè)級(jí)整體收費(fèi)解決方案,這表明 Docker 的使用已經(jīng)走向成熟捕捂。
在本期的技術(shù)雷達(dá)里的條目中出現(xiàn)了Mesosphere DC/OS瑟枫,這是構(gòu)建統(tǒng)一技術(shù)棧數(shù)據(jù)中心的一個(gè)征兆。在這方面Docker EE和Rancher都是非常有力的競(jìng)爭(zhēng)者指攒。根據(jù)我的判斷慷妙,在未來的 Docker 社區(qū)里,統(tǒng)一容器化數(shù)據(jù)中心的競(jìng)爭(zhēng)者將會(huì)進(jìn)一步減少允悦。而之前的私有云方案則慢慢會(huì)被“以 Docker 為核心數(shù)據(jù)中心級(jí)全棧交付”取代膝擂。
趨勢(shì)3:不完整的 DevOps 實(shí)踐阻礙著 DevOps 的發(fā)展
很遺憾看到單一持續(xù)集成實(shí)例和不完整的持續(xù)集成(CI Theatre)這樣的條目出現(xiàn)在技術(shù)雷達(dá)里。可以感到企業(yè)應(yīng)用 DevOps 技術(shù)的緊迫性猿挚。這同時(shí)也暴露了 DevOps 領(lǐng)域里“缺乏門檻較低且成熟的 DevOps 實(shí)踐”的問題。
大部分企業(yè)在 DevOps 轉(zhuǎn)型中僅僅關(guān)注到了工具的升級(jí)驶鹉。卻忽視了價(jià)值流绩蜻、生產(chǎn)流程中各個(gè)活動(dòng)中的最佳實(shí)踐以及 DevOps 團(tuán)隊(duì)文化的構(gòu)建,這會(huì)使團(tuán)隊(duì)陷入 “已經(jīng)完成 DevOps 轉(zhuǎn)型的假象 ”室埋,而停止了團(tuán)隊(duì)的自我改進(jìn)办绝。
DevOps 的實(shí)踐包含組織改進(jìn)和技術(shù)升級(jí)兩個(gè)部分,技術(shù)往往是最容易的部分姚淆。而缺乏組織改進(jìn)的技術(shù)提升往往很難給組織帶來質(zhì)的飛躍孕蝉。具備 DevOps 文化的團(tuán)隊(duì)則會(huì)不斷反思和學(xué)習(xí),通過共擔(dān)責(zé)任和相互合作不斷完善組織的 DevOps 實(shí)踐腌逢。
趨勢(shì)4:領(lǐng)域特定的 DevOps 實(shí)踐開始出現(xiàn)
DevOps 的最早實(shí)踐來自于互聯(lián)網(wǎng)企業(yè)的 Web 應(yīng)用降淮,相應(yīng)的思想被引入企業(yè)級(jí)應(yīng)用并促進(jìn)了一系列工具的發(fā)展。雖然并不是每一種應(yīng)用軟件交付形式都適合 DevOps搏讶,但隨著 DevOps 的工具不斷成熟佳鳖。其它領(lǐng)域的 DevOps 實(shí)踐也開始嘗試借鑒 Web 應(yīng)用領(lǐng)域的自動(dòng)化工具,并逐漸形成領(lǐng)域級(jí)的 DevOps 實(shí)踐媒惕。
在人工智能領(lǐng)域系吩,TensorFlow就是這樣一個(gè)例子,它可以有多種 DevOps 友好的安裝和部署方式 妒蔚,例如采用 Docker 進(jìn)行部署穿挨。
在區(qū)塊鏈領(lǐng)域,超級(jí)賬本(HYPERLEDGER) 就是這樣一個(gè)例子肴盏,它提供了一套工具和服務(wù)科盛,結(jié)合 DevOps 相關(guān)技術(shù)和實(shí)踐形成了一個(gè)完整的解決方案。
隨著 DevOps 相關(guān)概念和技術(shù)不斷向各個(gè)產(chǎn)業(yè)領(lǐng)域的深入發(fā)展菜皂,可以看到 DevOps 技術(shù)和實(shí)踐帶來的巨大影響力土涝。然而,每個(gè)技術(shù)領(lǐng)域都有自己所關(guān)注的特性幌墓,并不是以往的 DevOps 實(shí)踐可以全覆蓋到的但壮,這恰恰成為了 DevOps 技術(shù)和實(shí)踐發(fā)展的契機(jī)。我很期待領(lǐng)域特定的 DevOps 技術(shù)實(shí)踐給 DevOps 帶來的發(fā)展常侣。
趨勢(shì)5:采用 DevOps 進(jìn)行技術(shù)債務(wù)重組和技術(shù)資產(chǎn)管理
技術(shù)債務(wù)類似于金融債務(wù)蜡饵,它也會(huì)產(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)。
雖然極少會(huì)出現(xiàn)企業(yè)因技術(shù)債務(wù)而走向衰敗的案例筷登,但新晉企業(yè)憑借新技術(shù)和商業(yè)模式顛覆傳統(tǒng)行業(yè)并奪取市場(chǎng)份額的報(bào)道卻不斷發(fā)生剃根。 這從另一方面說明技術(shù)債務(wù)綜合提升了采用新技術(shù)的機(jī)會(huì)成本,使企業(yè)不斷失去創(chuàng)新和領(lǐng)先的巨大潛力前方。
DevOps 技術(shù)棧的多元化為分散遺留系統(tǒng)技術(shù)債務(wù)風(fēng)險(xiǎn)提供了一套靈活而又低風(fēng)險(xiǎn)的工具和方法論狈醉。不斷幫助企業(yè)從遺留系統(tǒng)的負(fù)擔(dān)中解脫出來。
而微服務(wù)則是首先通過領(lǐng)域拆分技術(shù)債惠险,并用相應(yīng)工具重組技術(shù)債苗傅。分離優(yōu)質(zhì)技術(shù)資產(chǎn)和不良資產(chǎn),通過分散風(fēng)險(xiǎn)來降低拋棄成本班巩。 而將API 當(dāng)做產(chǎn)品(APIs as a product) 可以從一個(gè)全新的演進(jìn)視角去看待技術(shù)債渣慕,通過可用性測(cè)試和用戶體驗(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)險(xiǎn)進(jìn)行了隔離卫袒,另一方面它防止了遺留系統(tǒng)上產(chǎn)生的技術(shù)債利息的增長(zhǎng)。
趨勢(shì)6:安全成為推動(dòng) 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ù)時(shí)不免會(huì)有所擔(dān)憂转砖。
從代碼中解耦秘密信息的管理 則讓我們避開了一些開發(fā)過程中可能會(huì)產(chǎn)生的安全隱患。采用git-crypt這樣的工具可以幫我們保證在開發(fā)的過程中源代碼內(nèi)部的信息安全鲸伴。而采用HashiCorp Vault則提供了脫離應(yīng)用程序代碼的秘密信息存儲(chǔ)機(jī)制府蔗,使得應(yīng)用在運(yùn)行過程中的秘密得到了有效保護(hù)。
Linux Security Module 則一直在技術(shù)雷達(dá)的“采用”區(qū)域汞窗,通過 SELinux 和 AppArmor 這樣的 LSM 兼容幫助團(tuán)隊(duì)評(píng)估誰可以訪問共享主機(jī)上的哪些資源(包括其中 的服務(wù))姓赤。這種保守的訪問管理方法將幫助團(tuán)隊(duì)在其SDLC流程中建立更好的安全性。以往這是 Ops 團(tuán)隊(duì)需要考慮的問題仲吏,而對(duì) DevOps 的團(tuán)隊(duì)來說不铆,這是每一個(gè)人的事情蝌焚。
“合規(guī)性即代碼”(Compliance as Code)是繼“基礎(chǔ)設(shè)施即代碼”,“流水線即代碼”之后的又一種自動(dòng)化嘗試誓斥。InSpec作為合規(guī)性即代碼的提出者和實(shí)現(xiàn)者只洒,通過自動(dòng)化手段確保服務(wù)器在部署后的運(yùn)維生命周期中依然保持安全與合規(guī)。它所帶來的意義在于將規(guī)范制度代碼化劳坑,得到了確定性的結(jié)果和解釋毕谴。
在不遠(yuǎn)的將來,不難想象人們所面對(duì)的法律和法規(guī)規(guī)定不再是一堆會(huì)導(dǎo)致歧義的語言文字條目泡垃,而是一組由自動(dòng)化測(cè)試構(gòu)成的測(cè)試環(huán)境析珊。
安全性和易用性往往被認(rèn)為是魚與熊掌不可兼得的兩個(gè)方面羡鸥。在 DevOps 之前蔑穴,團(tuán)隊(duì)吞吐量和系統(tǒng)穩(wěn)定性指標(biāo)曾經(jīng)也面臨這樣的境遇,然而 DevOps 使得二者可以兼得惧浴。同樣我也有信心看到在未來 DevOps 的領(lǐng)域里存和,更多易用且安全的工具將會(huì)不斷出現(xiàn)。在降低 DevOps 所帶來的安全風(fēng)險(xiǎn)的同時(shí)衷旅,也提升團(tuán)隊(duì)開發(fā)過程的順暢性和用戶便利性捐腿。
趨勢(shì)7:Windows Server 和 .NET平臺(tái)下的 DevOps 技術(shù)潛力巨大
長(zhǎng)期以來,Windows 和 .NET平臺(tái)下的 DevOps 一直都是一個(gè)被低估的領(lǐng)域柿顶。一方面茄袖,社區(qū)缺乏對(duì) Windows ?Server 平臺(tái)的興趣。另一方面嘁锯,Windows Server 卻有接近 90% 的市場(chǎng)占用率宪祥,在 Web 服務(wù)器領(lǐng)域則有33.5% 的市場(chǎng)占有率。
有充足理由證明這是一個(gè)潛力巨大的市場(chǎng)家乘。 我們看到了CAKE 和 FAKE這樣的條目蝗羊,作為 .NET 平臺(tái)下替代 MSBuild 的構(gòu)建解決方案, 它增強(qiáng)了 .NET 平臺(tái)自動(dòng)化方面的能力仁锯。而HANGFIRE則提供了更易用和靈活的自動(dòng)化進(jìn)程調(diào)度框架耀找。我很期待未來有更多 Windows Server 和 .NET 平臺(tái) 領(lǐng)域的創(chuàng)新。不久前业崖,Docker 已經(jīng)可以在 Windows 下運(yùn)行野芒。可以預(yù)見到双炕,Windows Server 和 .NET 平臺(tái)將會(huì)是下一階段 DevOps 技術(shù)實(shí)踐中值得深入發(fā)掘的領(lǐng)域复罐。
趨勢(shì)8:非功能性自動(dòng)化測(cè)試工具的逐漸完備
自動(dòng)化測(cè)試水平往往是衡量 DevOps 技術(shù)能力高低的重要指標(biāo),尤其是針對(duì)生產(chǎn)環(huán)境應(yīng)用程序的非功能性自動(dòng)化測(cè)試工具雄家。一直以來效诅,技術(shù)雷達(dá)都在嘗試從不同的角度宣揚(yáng)自動(dòng)化測(cè)試的重要性胀滚,從軟件的開發(fā)階段延展到了整個(gè)應(yīng)用生命周期甚至整體 IT 資產(chǎn)的管理上。
這期的技術(shù)雷達(dá)仍然關(guān)注了非功能性自動(dòng)化測(cè)試乱投,TestInfra是 ServerSpec 的 Python 實(shí)現(xiàn)咽笼,它使得用Pytest測(cè)試基礎(chǔ)設(shè)施成為可能。而MOLECULE旨在幫助開發(fā)和測(cè)試 Ansible 的 Role 戚炫。通過 在虛擬機(jī)或容器上為正在運(yùn)行的 Ansible Role 測(cè)試構(gòu)建腳手架剑刑,無需再手工創(chuàng)建這些測(cè)試環(huán)境。 正如技術(shù)雷達(dá)所說的:“雖然這是一個(gè)相當(dāng)年輕的項(xiàng)目双肤,但我們看到了其蘊(yùn)含的巨大潛力施掏。”
趨勢(shì)9:Python 成為 DevOps 工作中采用的首要編程語言
早在 DevOps 剛剛開始盛行的時(shí)候茅糜,Python 就是一個(gè)被寄予厚望的語言七芭,因?yàn)榇蟛糠?DevOps 工具和實(shí)踐都需要用到 Python。雖然也有人嘗試用 Ruby 或者 NodeJS 構(gòu)建 DevOps 工具蔑赘,然而都沒有 Python 所構(gòu)建的工具流行狸驳。與此同時(shí),仍然不斷有人把其它語言下編寫的工具轉(zhuǎn)化為 Python 的版本缩赛,TestInfra 就是這樣一個(gè)例子耙箍。
隨著 Python 在大數(shù)據(jù)、人工智能酥馍、區(qū)塊鏈辩昆、微服務(wù)以及 Docker 中的發(fā)展,可以預(yù)見 Python 在日后的領(lǐng)域仍然會(huì)發(fā)揮重要的作用旨袒。
以上對(duì) DevOps 趨勢(shì)的解讀僅為個(gè)人觀點(diǎn)汁针,如有不當(dāng)之處還望指出,關(guān)于更多技術(shù)在技術(shù) 雷達(dá)中的使用建議請(qǐng)參考https://www.thoughtworks.com/radar/a-z峦失。謝謝扇丛。