做者丨阿里雲高級技術專家 至簡(李雲)編程
在技術變革推進社會發展這一時代背景下,大量支撐規模化分佈式應用的技術創新、創造與創業應用而生,Could Native、Service Mesh、Serverless 等技術詞彙在全球範圍內引起了大量的解讀與討論。本文整理自阿里巴巴高級技術專家李雲在 QCon 北京 2019 的分享,帶你一塊兒看清其背後的本質與驅動力,更好地把握技術趨勢並創建本身的思考邏輯。設計模式
圍繞解決大規模分佈式應用技術挑戰的話題總能引發普遍的關注,CNCF 所提出的雲原生概念將這一話題推向了史無前例的新高度。
就目前的行業發展示狀來看,雲原生是分佈式應用走向將來的關鍵路徑。此外,出現了 CDF 從 CI/CD 的角度幫助解決將來分佈式應用周邊的的挑戰等現象。咱們不由要問:「分佈式應用的將來到底是什麼?」面對這一問題,具象化地給出全部人都能理解一致的描繪在現階段是不現實的,但給出一個相對模糊但又抓住重點的概念或許並不困難,做者用 Distributionless(無分佈式)去表達。
在全球範圍內帶來變革的技術,其背後不僅是技術因素,還有商業利益的共同演繹。理解背後的驅動力能讓咱們更準確地抓住新技術的優點和思考將來發展的可能終局,這對於 CTO、CIO 等各種技術決策者來講相當重要。
安全
技術最終是服務於商業和社會的,但在「條條大路通羅馬」的情形下,如何斷定一個技術比另外一個技術更優呢?或者說,在技術向前演進的過程當中,有沒有固定的範式可被咱們掌握,從而將之運用於理解新技術的優點呢?這個終極範式在做者看來就是「抽象後分而治之」。
探索複雜規模問題的解決方法歷來都是動態、漸進的,會經歷不斷認識問題和尋找更優解的持續迭代過程,期間伴隨着部分「舊概念」被打破和「新概念」被重塑的雙重行爲。
好比,在實踐微服務軟件架構之初,一開始你們所關注的焦點是「如何拆」、「拆多大」以及技術與組織架構的配稱(康威定律),核心思路是經過將單體應用經過分拆去變成更小的軟件發佈單元,以解決單體應用的軟件迭代速度慢的問題(背後致使了商業價值創造慢的後果)。
然而,當微服務改造工做完成且微服務的個數達到必定的規模時,各服務之間的鏈接、排錯、安全保障、監控等問題就逐漸地浮出了水面,那時行業深入地體會並認識到微服務軟件架構實際上是將複雜度從單體應用內轉移到了微服務之間。
隨着分佈式應用規模的進一步增大,所涉開發和運維人員增加到必定數據時,效率問題再一次變得像單體應用時代那樣不可小視。不過,這一次所面臨的問題域和規模比那時大了不少。
要解決微服務軟件架構所帶來的新問題,須要探索更加體系化、規範化和全局一致的解決方案,那就不可避免地會採用新的概念切分手法去構建新的解決方案,期間不可並避免地會打破舊概念並創造出新概念。
新舊概念相比之下,存在以下差別:
服務器
「抽象後分而治之」爲技術人提供了一種單純從技術視角去分析一種技術是否優於另外一種技術的方法,能必定程度避免被「老酒換新瓶」那樣的新概念所蠱惑。以這一範式去看待圍繞雲原生所出現的 Kubernetes、Istio、Knative 等技術,相信能因這些新技術的概念切分獨特、更具體系化和有更高的技術視野而對其先進性加以承認。
網絡
新技術得不到推廣應用並最終消亡的例子舉不勝舉。雲原生概念從提出到今天在全球範圍的如火如荼只經歷了短短的四年,背後的驅動力是什麼很值咱們思考。此外,雲原生技術的概念目前仍至關模糊,理解其所解決的本質問題才能使技術團隊在發展的道路上正視趨勢,以及讓技術決策者更好地規劃技術發展方向。
從商業的角度,AWS 是無可爭議的雲計算市場的領導者,但其技術影響力遠不如 Google。雖然說 Google 在技術實力上是全球的領導者,但在雲計算市場的發展上曾帶給人的傲慢感而最終沒能在市場表現上與 AWS 相庭抗禮。在面對市場佔有率落後的情形下,Google 發起了 CNCF 基金會,經過提出雲原生技術致力於打造廠商中立(vendor-neutral)的開源軟件事實標準,但願有機會以另外一種路徑在市場中得到突圍。「廠商中立」又意味着什麼?
輸出技術產品的廠商與其客戶之間一直存在一種利益博弈——技術鎖定和防鎖定。當廠商所輸出的技術沒法在短時間內立竿見影地給客戶創造業務價值時,這種博弈的痕跡就會更加明顯,不然客戶在短時間內也樂於被鎖定。從廠商的角度,經過技術鎖定客戶就會有更高的要價空間和持續的利潤來源。反之,若是客戶作到了技術的防鎖定,則有更強的議價能力和選擇自由,不然會擔憂成爲「砧板上的魚肉」。長遠來看,如何保持這種博弈力量的平衡是打造一個繁榮技術或商業生態的關鍵。這樣的案例在業已成熟的通訊行業很早就出現了且仍在發生。
通訊行業有一個標準化組織叫 3GPP,這個組織中有來自中國移動、中國聯通、中國電信這樣的各國電信運營商,也有來自華爲、ZTE 這樣的全球通訊設備製造商。3GPP 經過制定規範並要求全部設備製造商全面遵循,使得運營商有從哪家採購通訊設備的自由。回到雲計算市場,在通信行業的規範變成了你們共同構建和採納的開源軟件,準確說是事實標準的開源軟件。
事實標準的關鍵不是開源,還得加上全部雲廠商都採納,這一點對於提供雲基礎技術的雲廠商來講特別關鍵。具體的一個例子是,Kubernetes 是雲原生中的基礎設施並獲得了全部雲廠商的採納而提供相應的雲產品。當一個客戶採購了 AWS 的 Kubernetes 產品時,能夠隨時方便地遷移到阿里雲上而不用擔憂技術鎖定問題。不能否認,雲廠商提供雲產品與用戶自建是徹底不一樣級別的可用性保障維度,這一點是不少客戶樂於花錢購買雲產品的關鍵。
技術防鎖定的利益博弈只要與客戶作交流就必定會看到,而這一力量也被 CNCF 發現並運用於推廣雲原生技術,且成爲了雲原生技術發展的核心驅動力,使得雲原生技術在至關短的時間內獲得了來自雲廠商和雲客戶的大力支持。必須指出,AWS 做爲雲計算的行業領導者不多講技術鎖定這事,那是由於沒有必要宣傳這一點而讓到手的客戶從本身手中流失,那並不是由於 AWS 沒有看到客戶對技術鎖定的擔憂,從其積極跟進雲原生技術也不難佐證這一點。
Google 可否經過雲原生的推廣而在將來的雲計算市場得到更大的份額雖然說未知,但那不是咱們關心的重點。重點在於,雲原生做爲行業承認的技術趨勢,咱們如何迎合和規劃將來的技術發展,以及羣策羣力去打造一個健康、蓬勃發展的雲計算產業生態。
理解雲原生核心驅動力的價值在於,雲廠商在爲客戶提供雲原生技術方案時,須要充分地考慮到不要給客戶帶去技術鎖定,但能夠考慮經過產品作粘性。鎖定是指「用了我你就沒法方便地離開我」,而粘性是指「用了我能夠給你帶去不同的價值,而你也能夠隨時方便地離開我」。
只理解雲原生的核心驅動力還不夠,還得掌握它所解決的本質問題是什麼。做者概括爲雲原生所解決的本質問題是應用(或「服務」,本文這兩詞能夠互換使用)的彈性、易用性和移植性這層層遞進的「三性」。
應用的彈性是指即使在最嚴苛的業務場景下,技術仍具有給客戶創造業務價值的能力。換句話說,客戶使用了某個技術解決方案後,他能夠持續有效地運用該產品去創造業務價值。從技術的角度,彈性包含了微服務軟件架構、充分解耦、高可用、異地多活、限流、熔斷、降級、不可變基礎設施等內容,以及支持應用的快速擴縮容能力。
第二個解決的本質問題是易用性。若是隻解決了應用的彈性而沒有解決易用性,那麼爲了運用技術去支撐業務價值創造所需投入的人力和時間會是企業所面臨的下一個沉重負擔,最終在技術的運用和價值創造上沒法體現敏捷性和經濟性。易用性對於雲產品的用戶和客戶來講,表明了良好的開發和運維效率。
良好的開發效率意味着使用者(客戶側的開發者)只需關心最少的概念和寫最少的代碼,這就須要雲產品在打造之時很好地圍繞使用者的心智和能力水平去設計,經過讓技術之間作儘量的無縫鏈接、對技術細節作良好的抽象甚至完全屏蔽去下降使用門檻。良好的運維效率則指,只用不多的幾我的就能夠運維龐大的集羣,整個分佈式應用的發佈、故障發現和排錯都很高效。
上圖中,做者在易用性這塊羅列了 DevOps、GitOps、Cloud IDE 和 CI/CD 等內容。其中的 GitOps 被認爲是下一代的 DevOps,讓運維工做變得與寫代碼的方式同樣,將 Git 倉庫做爲運維工做的「the single source of truth」,這對於多雲、混合雲和多集羣部署是很是有價值的。Git 所具有的版本管理能力讓運維工做變得更加可溯與可控。總的說來,易用性解決的是軟件開發效率、工程質量和人力成本問題。
第三個解決的本質問題是應用的移植性。多雲(注:指同時使用多個公有云)和混合雲(注:指同時使用公有云和專有云)被 Gartner 認爲是將來企業 IT 的重要戰略。延着該戰略,終態得作到一個分佈式應用的代碼零改動就能方便地部署到不一樣的雲上(固然,配置能夠不一樣)。邏輯上,要實現應用的可移植性,則應用中不該包含任何與雲平臺相關的代碼,那些代碼須要徹底下沉到雲平臺中,實現與應用與雲平臺的徹底解耦。要作到那些代碼在全部的雲平臺上均可用,則須要相關的基礎技術是被全部雲廠商採納的,這是一項技術是不是「事實標準」的關鍵。
對於客戶來講,實現應用移植性的價值在於,除了解決防止被雲廠商鎖定的問題,還讓自由搭配各雲廠商上的技術和成本優點成爲了可能。對於那些關係到國計民生的國家級或國際化發展的應用來講,也讓知足多雲部署的政策合規要求變得簡單。
整個雲原生技術所關注的都是經過降本增效,以更好、更快、更經濟的方式去幫助客戶創造價值,這一點也是分佈式應用的終極技術挑戰。
上圖的左側,做者列出了 CNCF 對於雲原生的官方中文定義,其中使用橙色和紅色高亮的內容,與做者在這裏所表達的核心驅動力和所解決的本質問題是贊成但不一樣樣的表達。
架構
簡單說來,雲原生的技術趨勢是圍繞應用的可移植性問題,以一致性爲目的,經過分層去解決。上圖的左側列出了五個層次,右側則示例了對應的部分開源軟件。最上層的 Cloud Portability 與前面講的應用的移植性是同一回事。
圖中存在 Service Portability 和 Network Portability 兩個不一樣的層。前者解決的是 OSI 網絡層次模型中 4 到 7 層的可移植性問題,好比 Service Mesh 的開源軟件 Istio 所解決的就是這個層次的問題;後者解決的是 2 至 3 層的網格連通性問題,開源的 Network Service Mesh 就是專一於這一層。從 Network Portability 的角度,將來的網絡連通性再也不是用 IP 和網絡掩碼去描述,而將採用相似 RPC 中的服務註冊與發現那樣,基於被部署的應用的 YAML 文件中所描述的網絡要求去構建。
less
在雲原生的技術大潮下,做者從應用開發者和雲平臺開發者的角度給出一些建議。
運維
這張圖能幫助咱們理解 Kubernetes 和 Serverless 的位置關係。Kubernetes 今天仍在發展,包含了 CaaS 和 PaaS 兩大塊的內容,且有作厚的趨勢。平臺技術作厚的好處在於,會對下面的基礎技術的演進有更強的掌控力,也會由於作厚而使得上面的應用變輕,讓應用更加聚焦於業務邏輯自己而無需過於關心解決分佈式應用鏈接、安全、控制和遙測等共性問題。上圖還展現了 service 這個概念從 IaaS 貫穿至 PaaS 層,讓層與層之間由於 service 這個概念而能流暢地銜接,從軟件設計的角度體現優雅與一致性。這張圖中並無看到 Service Mesh 的影子,下圖以另外一種視角進行了展現。
圖中示例了數據平面和控制平面。Service Mesh 的 Sidecar 造成了鏈接 PaaS 和 SaaS 兩層服務的數據總線,能方便地完成位於這兩層服務的互聯互通(即服務註冊與發現),結合控制平面,實現全部服務的控制(流量灰度、限流、熔斷、降級等)、觀測(日誌、指標和調用鏈路跟蹤),以及服務與服務之間的安全保障。控制平面則貫穿了全部層,是整個分佈式生態系統的控制中樞。圖中並無示例出另外兩個一樣重要的開發平面和運維平面。
Kubernetes、Service Mesh 和 Serverless 三者共同演繹不一樣層次的封裝和向上屏蔽下面的細節。Kubernetes 引入了不一樣的設計模式,實現對各類雲資源全新、有效和優雅的抽象和管理模式,讓集羣的管理和應用發佈變成了件至關輕鬆且不易出錯的事。
被普遍採用的微服務軟件架構將分佈式應用的各類複雜度遷移到了服務之間,如何經過全局一致、體系化、規範化和無侵入的手段進行治理就變成了微服務軟件架構下相當重要的內容。Service Mesh 經過將各服務所共用和與環境相關的內容剝離到部署於每一個服務邊上的 Sidecar 進程而輕鬆地作到了。這一剝離動做使得服務與平臺能充分解耦而方便各自演進與發展,也使得服務變輕而有助於改善服務啓停的及時性。
雲原生是自然支持多語言的——各技術團隊可使用本身最善長、最高效的編程語言去創造業務價值和作業務探索。Service Mesh 由於將那些服務治理相關的邏輯剝離到了 Sidecar 中且做爲獨立進程,因此 Sidecar 所實現的功能自然地支持多語言,爲上面的服務採用多語言開發創造了更爲有利的條件。
經過 Service Mesh 對整個網絡的服務流量進行技術收口,讓異地多活這樣涉及流量調度的系統工程實現起來更加優雅、簡潔與有效,也能更加方便地實現服務版本升級時的灰度、回滾而改善安全生產質量。因爲技術收口,給服務流量的治理和演進、排錯、日誌採集的經濟性等疑難問題創造了新的發展空間。
Serverless 對客戶的最大價值有兩點。編程語言
有部分人對 Service Mesh 和 Serverless 存在這樣的困惑:有了 Serverless 以後還須要 Service Mesh 嗎?做者看來,兩都並不是矛盾體。Service Mesh 是解決微服務軟件架構下服務與服務之間複雜度問題的,只要採納了微服務軟件架構就應當使用 Service Mesh。Serverless 解決的是免服務器運維的問題,一個運用於微服務軟件架構的 Serverless 解決方案,應當包含 Service Mesh 的內容,只不過對於終端的開發者極可能感知不到而已。
分佈式
雲原生是分佈式應用當下重要的發展路徑,其終態應當是 Distributionless。背後的含義有兩點。
Distrubutionless 的發展趨勢是:
對於雲平臺廠商來講,Distributionless 的關鍵競爭力來自運維平面的產品化和開發平面無縫整合的能力。這兩塊是直接觸達客戶和用戶體現技術以更快、更好交付客戶價值的關鍵。相信「體驗爲王」在將來分佈式應用領域一樣適用。