阿里云专家详解 2020 服务网格发展趋势
作者 | 王夕寧 阿里巴巴高級技術(shù)專家
關(guān)注“阿里巴巴云原生”公眾號,參與文末留言互動,即有機(jī)會獲得贈書福利!
本文摘自于由阿里云高級技術(shù)專家王夕寧撰寫的《Istio 服務(wù)網(wǎng)格技術(shù)解析與實踐》一書,文章從基礎(chǔ)概念入手,介紹了什么是服務(wù)網(wǎng)格及 Istio,針對 2020 服務(wù)網(wǎng)格的三大發(fā)展趨勢,體系化、全方位地介紹了 Istio 服務(wù)網(wǎng)格的相關(guān)知識。你只需開心參與公眾號文末互動,我們負(fù)責(zé)買單!技術(shù)人必備書籍《Istio 服務(wù)網(wǎng)格技術(shù)解析與實踐》免費領(lǐng)~
有外文指出,2020 年 Service Mesh 技術(shù)將有以下三大發(fā)展:
- 快速增長的服務(wù)網(wǎng)格需求;
- Istio
很難被打敗,很可能成為服務(wù)網(wǎng)格技術(shù)的事實標(biāo)準(zhǔn); - 出現(xiàn)更多的服務(wù)網(wǎng)格用例,WebAssembly 將帶來新的可能。
什么是服務(wù)網(wǎng)格
Gartner 2018 關(guān)于服務(wù)網(wǎng)格技術(shù)趨勢分析報告,展示了一系列的服務(wù)網(wǎng)格技術(shù),劃分服務(wù)網(wǎng)格技術(shù)的依據(jù)是基于應(yīng)用服務(wù)代碼是否必須對其服務(wù)網(wǎng)格感知及其是否鎖定,或鎖定的程度。
基于編程框架的網(wǎng)格技術(shù)可以幫助開發(fā)人員構(gòu)建一個架構(gòu)體系良好的服務(wù),但這會導(dǎo)致應(yīng)用代碼與框架和運行時環(huán)境的緊密耦合。而基于 Sidecar 代理的服務(wù)網(wǎng)格技術(shù)不會為開發(fā)人員設(shè)置這些障礙,并且使其管理和維護(hù)更加輕松,能夠提供更靈活的方法來配置運行時策略。
在微服務(wù)環(huán)境中,可將單一應(yīng)用程序分解為獨立的多個組件,并作為分布式服務(wù)進(jìn)行部署,這些服務(wù)通常是無狀態(tài)的、短暫的、動態(tài)可擴(kuò)展的,運行在容器編排系統(tǒng)(如 Kubernetes)中。
服務(wù)網(wǎng)格一般由控制平面和數(shù)據(jù)平面組成。具體來說,控制平面是一組在一個專用的命名空間中運行的服務(wù)。這些服務(wù)完成一些控制管理的功能,包括聚合遙測數(shù)據(jù)、提供面向用戶的 API、向數(shù)據(jù)平面代理提供控制數(shù)據(jù)等。而數(shù)據(jù)平面則是由一系列運行在每個服務(wù)實例旁邊的透明代理構(gòu)成。這些代理自動處理進(jìn)出服務(wù)的所有流量,因為它們是透明的,所以這些代理充當(dāng)了一個進(jìn)程外網(wǎng)絡(luò)堆棧,向控制平面發(fā)送遙測數(shù)據(jù)并從控制平面接收控制信號。
服務(wù)實例可以根據(jù)需要進(jìn)行啟動、停止、銷毀、重建或替換。因此,這些服務(wù)需要一個通信中間件來支持服務(wù)的動態(tài)發(fā)現(xiàn)和自我修復(fù)連接能力,從而使得這些服務(wù)之間能夠以安全、動態(tài)和可靠的方式相互通信,這就是服務(wù)網(wǎng)格所支持的功能。
服務(wù)網(wǎng)格是一個專用的基礎(chǔ)設(shè)施層,使服務(wù)到服務(wù)之間的通信更加安全、快速、可靠。如果你正在構(gòu)建云原生應(yīng)用程序,則需要服務(wù)網(wǎng)格。在過去的一年中,服務(wù)網(wǎng)格已成為云原生程序的關(guān)鍵組件,它通過包含現(xiàn)代云原生應(yīng)用程序的復(fù)雜服務(wù)拓?fù)鋪砜煽康貍鬟f請求。實際上,服務(wù)網(wǎng)格通常實現(xiàn)為輕量級網(wǎng)絡(luò)代理的組合,這些代理與應(yīng)用程序代碼一起部署,不需要知道應(yīng)用程序是什么。
服務(wù)網(wǎng)格作為單獨層的概念與云原生應(yīng)用程序的興起有關(guān)。在云原生模型中,單個應(yīng)用程序可能包含數(shù)百個服務(wù),每個服務(wù)可能有數(shù)千個實例,并且每個實例可能處于不斷變化的狀態(tài)。這也是為什么像 Kubernetes 這樣的協(xié)調(diào)器日益流行和必要的原因所在。這些服務(wù)之間的通信不僅變得越來越復(fù)雜,而且也是運行時環(huán)境中最為常見的一部分,因此管理這些服務(wù)之間的通信對于確保端到端的性能和可靠性至關(guān)重要。
服務(wù)網(wǎng)格是一種網(wǎng)絡(luò)模型,位于 TCP/IP 之上的抽象層。它假定底層的三四層網(wǎng)絡(luò)存在并且能夠從一點到另一點傳送字節(jié)。它還假設(shè)該網(wǎng)絡(luò)與環(huán)境的其他方面一樣不可靠,因此服務(wù)網(wǎng)絡(luò)也必須能夠處理網(wǎng)絡(luò)故障。在某些方面,服務(wù)網(wǎng)格類似于 TCP/IP。正如 TCP 協(xié)議棧抽象了在網(wǎng)絡(luò)端點之間可靠地傳遞字節(jié)的機(jī)制一樣,服務(wù)網(wǎng)格抽象了在服務(wù)之間可靠地傳遞請求的機(jī)制。與 TCP 一樣,服務(wù)網(wǎng)格不關(guān)心實際有效負(fù)載或其編碼方式,只負(fù)責(zé)完成從服務(wù) A 發(fā)送到服務(wù)B,并且在處理任何故障的同時實現(xiàn)這一目標(biāo)。但是,與 TCP 不同的是,服務(wù)網(wǎng)格不僅僅具備“使其工作”的能力,還提供了一個統(tǒng)一的應(yīng)用程序控制點,用于將可見性和控制引入應(yīng)用程序運行時。服務(wù)網(wǎng)格的明確目標(biāo)是將服務(wù)通信從不可見的基礎(chǔ)設(shè)施領(lǐng)域移出,并轉(zhuǎn)變?yōu)樯鷳B(tài)系統(tǒng)的一部分,可以對其進(jìn)行監(jiān)控、管理和控制。
在云原生應(yīng)用程序中,保證請求具備完整的可靠性并非易事。服務(wù)網(wǎng)絡(luò)通過各種強(qiáng)大的技術(shù)來管理這種復(fù)雜性,支持熔斷、延遲感知的負(fù)載均衡、最終一致性的服務(wù)發(fā)現(xiàn)、重試與超時等機(jī)制來盡可能保證可靠性。這些功能必須全部協(xié)同工作,并且與其運行的復(fù)雜環(huán)境之間的相互作用也非常重要。
例如,當(dāng)通過一個服務(wù)網(wǎng)格向服務(wù)發(fā)出請求時,其交互過程可以大致簡化為如下步驟:
-
服務(wù)網(wǎng)格組件通過應(yīng)用動態(tài)路由規(guī)則來確定請求者想要的服務(wù)。請求應(yīng)該路由到生產(chǎn)還是預(yù)發(fā)布的服務(wù)?是路由到本地數(shù)據(jù)中心還是云中的服務(wù)?是需要灰度到正在測試的服務(wù)的最新版本,還是仍然路由到在生產(chǎn)中經(jīng)過驗證的舊版本?所有這些路由規(guī)則都是動態(tài)可配置的,并且可以全局應(yīng)用,也可以應(yīng)用于任意流量片段;
-
找到正確的目的地后,服務(wù)網(wǎng)格組件從相關(guān)的服務(wù)發(fā)現(xiàn)端點檢索相應(yīng)的實例池,可能有多個實例。如果這些信息與服務(wù)網(wǎng)格組件在實踐中觀察到的信息不同,那么它會決定要信任哪些信息來源;
-
服務(wù)網(wǎng)格組件根據(jù)各種因素選擇最有可能返回快速響應(yīng)的實例,包括觀察到的最近請求的延遲數(shù)據(jù);
-
服務(wù)網(wǎng)格組件嘗試將請求發(fā)送到選擇的實例,記錄響應(yīng)結(jié)果的延遲和響應(yīng)類型;
-
如果實例已經(jīng)由于各種原因宕機(jī),或者請求根本沒有響應(yīng),或者由于其他任何原因而無法處理請求,服務(wù)網(wǎng)格組件則會根據(jù)需要在另一個實例上重試該請求,前提是它知道請求是冪等的;
-
如果實例始終返回錯誤,服務(wù)網(wǎng)格組件會將其從負(fù)載均衡池中逐出,以便稍后定期重試。這種情況在互聯(lián)網(wǎng)分布式應(yīng)用中非常常見,公共網(wǎng)絡(luò)中的實例非常有可能由于某些原因?qū)е滤查g故障;
-
如果請求的超時點已過,服務(wù)網(wǎng)格組件則會主動使請求失敗,而不是通過進(jìn)一步重試來添加負(fù)載,以防雪崩發(fā)生。這一點對于互聯(lián)網(wǎng)分布式應(yīng)用至關(guān)重要,否則一個小故障極有可能會引起雪崩式災(zāi)難;
-
與此同時,服務(wù)網(wǎng)格組件以度量指標(biāo)和分布式跟蹤的形式捕獲上述行為的各個方面,并將這些數(shù)據(jù)發(fā)送到集中式的度量系統(tǒng)或者鏈路跟蹤系統(tǒng)。
值得注意的是,這些功能都是在為分布式應(yīng)用提供逐點彈性和應(yīng)用程序范圍的彈性能力。大規(guī)模分布式系統(tǒng)(無論如何構(gòu)建)都有一個明確的特征:任何小型本地化故障都有可能升級為系統(tǒng)范圍的災(zāi)難性故障。服務(wù)網(wǎng)格必須設(shè)計成在基礎(chǔ)系統(tǒng)接近其極限時通過減少負(fù)載和快速失敗來防止這些故障升級。
為什么服務(wù)網(wǎng)格是必要的
服務(wù)網(wǎng)格本身并不是一個新功能,更像是功能所在位置的轉(zhuǎn)變。Web 應(yīng)用程序始終必須管理服務(wù)通信的復(fù)雜性。在過去的十五年中,服務(wù)網(wǎng)格模型的起源可以追溯到這些應(yīng)用程序的演變過程。
在本世紀(jì)初,中型 Web 應(yīng)用程序的典型架構(gòu)常見的是三層應(yīng)用程序架構(gòu),分為應(yīng)用程序邏輯層、Web 服務(wù)邏輯層和存儲邏輯層,都是單獨的層。層之間的通信雖然復(fù)雜,但范圍有限。這個時候的應(yīng)用架構(gòu)并沒有網(wǎng)格,但是在每個層的代碼處理邏輯之間存在通信邏輯。
當(dāng)網(wǎng)絡(luò)發(fā)展到非常高規(guī)模時,這種架構(gòu)方法開始變得捉襟見肘。特別是一些大型互聯(lián)網(wǎng)公司,都面臨著巨大的流量需求,實現(xiàn)了有效的云原生方法的前身:應(yīng)用層被分成許多服務(wù),也就是現(xiàn)在通常所知的“微服務(wù)”,層之間形成拓?fù)涞耐ㄐ欧绞健T谶@些系統(tǒng)中,通常采用“胖客戶端”庫的形式,也就是前面講述過的類似于 Netflix 的 OSS 庫,Hystrix 的熔斷能力就是很好的例證。這些代碼庫雖然與特定的環(huán)境相關(guān),并且需要使用特定的語言和框架,但它們是用于管理服務(wù)之間通信的形式與能力,在當(dāng)時的情況下是不錯的選擇,而且也在眾多公司里被使用。
進(jìn)入云原生時代之后,云原生模型有兩個重要因素:
- 容器(例如 Docker)提供資源隔離和依賴管理;
- 編排層(例如 Kubernetes)將底層硬件抽象為同質(zhì)的資源池。
盡管這些代碼庫組件在一定程度上允許應(yīng)用程序具備一定的負(fù)載擴(kuò)展能力,并處理云環(huán)境中始終存在的部分故障,但是,隨著數(shù)百個服務(wù)或數(shù)千個實例的增加,以及存在不時重新調(diào)度實例的業(yè)務(wù)流程層,單個請求通過服務(wù)拓?fù)渌裱穆窂娇赡芊浅?fù)雜。同時隨著容器技術(shù)的普及,且容器使每個服務(wù)都易于用另一種語言編寫運行,程序庫式方法在此時此刻就變得捉襟見肘了。
這種復(fù)雜性和關(guān)鍵性的訴求,使得應(yīng)用越來越需要一個服務(wù)間通信的專用層,該專用層與應(yīng)用程序代碼分離并且能夠捕獲底層環(huán)境的高度動態(tài)彈性能力。該層就是我們需要的服務(wù)網(wǎng)格。
服務(wù)代理可以幫助我們在云環(huán)境服務(wù)架構(gòu)中添加重要功能。每個應(yīng)用程序都可以擁有自己的要求或配置,以了解代理在給定其工作負(fù)載目標(biāo)時的行為方式。隨著應(yīng)用程序和服務(wù)越來越多,配置和管理大量代理可能非常困難。此外,在每個應(yīng)用程序?qū)嵗惺褂眠@些代理可以為構(gòu)建豐富的高級功能提供機(jī)會,否則我們將不得不在應(yīng)用程序本身執(zhí)行這些功能。
服務(wù)代理形成一個網(wǎng)狀的數(shù)據(jù)平面,通過該數(shù)據(jù)平面處理和觀察所有服務(wù)間的流量。數(shù)據(jù)平面負(fù)責(zé)建立、保護(hù)和控制通過網(wǎng)格的流量。負(fù)責(zé)數(shù)據(jù)平面如何執(zhí)行的管理組件稱為控制平面。控制平面是網(wǎng)格的大腦,并為網(wǎng)格使用人員提供公開 API,以便操縱網(wǎng)絡(luò)行為。
Istio 服務(wù)網(wǎng)格
Istio 是一個用于連接/管理以及安全化微服務(wù)的開放平臺,提供了一種簡單的方式用于創(chuàng)建微服務(wù)網(wǎng)格,并提供負(fù)載均衡、服務(wù)間認(rèn)證以及監(jiān)控等能力,關(guān)鍵的一點是并不需要修改太多服務(wù)就可以實現(xiàn)上述功能。Istio 本身是一個開源項目,它提供了一致的方式用于連接、加固、管理和監(jiān)控微服務(wù),最初是由 Google、IBM 和 Lyft 創(chuàng)建的服務(wù)網(wǎng)絡(luò)的開源實現(xiàn)。Istio 可以幫助你以透明的方式為服務(wù)架構(gòu)添加彈性和可觀察性能力。使用 Istio,應(yīng)用程序不必知道它們是服務(wù)網(wǎng)格的一部分。每當(dāng)應(yīng)用程序與外界交互時,Istio 將代表應(yīng)用程序處理網(wǎng)絡(luò)流量。這意味著如果你正在做微服務(wù),Istio 可以帶來很多好處。
Istio 主要提供以下功能:
- 流量管理,控制服務(wù)之間調(diào)用的流量和API調(diào)用,使得調(diào)用更可靠,并使網(wǎng)絡(luò)在惡劣情況下更加健壯;
- 可觀測性,獲取服務(wù)之間的依賴,以及服務(wù)調(diào)用的流量走向,從而提供快速識別問題的能力;
- 策略執(zhí)行,控制服務(wù)的訪問策略,不需要改動服務(wù)本身。
服務(wù)身份和安全,為網(wǎng)格中的服務(wù)提供可驗證身份,并提供保護(hù)服務(wù)流量的能力,使其可以在不同可信度的網(wǎng)絡(luò)上流轉(zhuǎn)。
Istio 第一個生產(chǎn)可用版本 1.0 于 2018 年 7 月 31 日正式發(fā)布,并于 2019 年 3 月發(fā)布版本 1.1。之后,社區(qū)按照快速迭代的方式,在三個月內(nèi)接連發(fā)布了 10 個小版本。截至本書完稿之際,社區(qū)已經(jīng)發(fā)布了 1.4 版本。
Istio 的數(shù)據(jù)平面默認(rèn)使用 Envoy 代理,開箱即用,可幫助你配置應(yīng)用程序以在其旁邊部署服務(wù)代理的實例。Istio 的控制平面由一些組件組成,這些組件為最終用戶和運維人員提供運維 API、代理的配置 API、安全設(shè)置、策略聲明以及其他更多功能。我們將在本書的后續(xù)部分介紹這些控制平面組件。
Istio 最初是為在 Kubernetes 上運行而構(gòu)建的,但卻是從部署平臺中立的角度實現(xiàn)代碼的。這意味著你可以在 Kubernetes、OpenShift、Mesos 和 Cloud Foundry 等部署平臺上利用基于 Istio 的服務(wù)網(wǎng)格,甚至可以在虛擬機(jī)、物理裸機(jī)上部署 Istio 環(huán)境。在后面的章節(jié)中,我們將展示 Istio 對于包括私有數(shù)據(jù)中心在內(nèi)的云組合的混合部署來說有多強(qiáng)大。在本書中,我們將優(yōu)先考慮在 Kubernetes 上進(jìn)行部署,在后面更高級的章節(jié)中會引入虛擬機(jī)等環(huán)節(jié)。
Istio 在希臘語中的意思是“啟航”,而 Kubernetes 在希臘語中可以翻譯為“舵手”或“駕駛員”。所以從一開始 Istio 就期望與 Kubernetes 很好地配合,高效地運行分布式微服務(wù)架構(gòu),并提供安全、連接和監(jiān)控微服務(wù)的統(tǒng)一方法。
通過每個應(yīng)用程序?qū)嵗赃叺姆?wù)代理,應(yīng)用程序不再需要具有特定于語言的彈性庫來實現(xiàn)熔斷、超時、重試、服務(wù)發(fā)現(xiàn)、負(fù)載均衡等功能。此外,服務(wù)代理還處理度量標(biāo)準(zhǔn)收集、分布式跟蹤和日志收集等。
由于服務(wù)網(wǎng)格中的流量流經(jīng) Istio 服務(wù)代理,因此 Istio 在每個應(yīng)用程序中都有控制點來影響和指導(dǎo)其網(wǎng)絡(luò)行為。這允許服務(wù)運維人員可以控制路由流量,并通過金絲雀部署、暗啟動(Dark Launch)、分級滾動和 A/B 測試來實現(xiàn)細(xì)粒度部署。我們將在后面的章節(jié)中探討這些功能。
核心功能
Istio 在服務(wù)網(wǎng)絡(luò)中統(tǒng)一提供了許多關(guān)鍵功能,主要包括流量管理、安全、可觀測性、平臺支持、集成和定制五個部分。
1.流量管理
通過簡單的規(guī)則配置和流量路由,Istio 可以控制服務(wù)之間的流量和 API 調(diào)用。Istio 簡化了熔斷器、超時和重試等服務(wù)級別屬性的配置,并且可以輕松設(shè)置 A/B 測試、金絲雀部署和基于百分比的流量分割的分階段部署等重要任務(wù)。
Istio 有開箱即用的故障恢復(fù)功能,你可以在問題出現(xiàn)之前先發(fā)現(xiàn)問題,通過優(yōu)化使服務(wù)之間的調(diào)用更加可靠。
2.安全
Istio 具備強(qiáng)大的安全功能,使開發(fā)人員可以專注于應(yīng)用程序級別的安全性。Istio 提供底層安全通信信道,并大規(guī)模管理服務(wù)通信的認(rèn)證、授權(quán)和加密。使用 Istio,服務(wù)通信在默認(rèn)情況下是安全的,允許跨多種協(xié)議和運行時一致地實施策略,而關(guān)鍵的是所有這些都很少或根本不需要應(yīng)用程序更改。
雖然 Istio 與平臺無關(guān),但將其與 Kubernetes 網(wǎng)絡(luò)策略一起使用時,其優(yōu)勢更大,包括在網(wǎng)絡(luò)和應(yīng)用層保護(hù) pod-to-pod 或服務(wù)到服務(wù)通信的能力。后續(xù)章節(jié)中會講述如何在 Kubernetes 中結(jié)合網(wǎng)絡(luò)策略與 Istio 來共同保護(hù)服務(wù)。
3.可觀測性
Istio 具備強(qiáng)大的追蹤、監(jiān)控和日志記錄能力,可讓你深入了解服務(wù)網(wǎng)格部署。通過 Istio 的監(jiān)控功能,可以真正了解服務(wù)性能如何影響上游和下游的功能,而其自定義的儀表板可以提供對所有服務(wù)性能的可視性,并讓你了解該性能如何影響其他進(jìn)程。
Istio 的 Mixer 組件負(fù)責(zé)策略控制和遙測收集,提供后端抽象和中介,將 Istio 的其余部分與各個后端基礎(chǔ)設(shè)施的實現(xiàn)細(xì)節(jié)隔離開來,并為運維人員提供對網(wǎng)格和后端基礎(chǔ)設(shè)施之間所有交互的細(xì)粒度控制。
所有這些功能可以讓你更有效地設(shè)置、監(jiān)控和實施服務(wù)上的服務(wù)等級目標(biāo) SLO。當(dāng)然,最重要的是可以快速有效地檢測和修復(fù)問題。
4.平臺支持
Istio 是獨立于平臺的,目標(biāo)是可以在各種環(huán)境中運行,包括跨云、內(nèi)部部署、Kubernetes、Mesos 等。你可以在 Kubernetes 上部署 Istio 或在具有 Consul 的 Nomad 上部署。Istio 目前支持:
- 在 Kubernetes 上部署的服務(wù);
- 使用 Consul 注冊的服務(wù);
- 在各個虛擬機(jī)上運行的服務(wù)。
5.集成和定制
可以擴(kuò)展和自定義 Istio 的策略實施組件,以與現(xiàn)有的 ACL、日志記錄、監(jiān)控、配額、審計等解決方案集成。
此外,從版本 1.0 開始,Istio 支持基于 MCP(Mesh Conf?iguration Protocol,網(wǎng)格配置協(xié)議)進(jìn)行配置分發(fā)。通過使用 MCP,可以很容易地集成外部系統(tǒng),例如可以自己實現(xiàn) MCP 服務(wù)器,然后將其集成到 Istio 中。MCP 服務(wù)器可以提供以下兩個主要功能:
- 連接并監(jiān)控外部服務(wù)注冊系統(tǒng),以獲取最新的服務(wù)信息(例如 Eureka、ZooKeeper 等系統(tǒng));
- 將外部服務(wù)信息轉(zhuǎn)換為 Istio
ServiceEntry 并通過 MCP 資源發(fā)布。
為什么要使用 Istio
在從單體應(yīng)用程序向分布式微服務(wù)架構(gòu)的轉(zhuǎn)型過程中,開發(fā)人員和運維人員面臨諸多挑戰(zhàn),使用 Istio 可以解決這些問題。隨著規(guī)模和復(fù)雜性的增長,服務(wù)網(wǎng)格越來越難以理解和管理,各種需求包括服務(wù)發(fā)現(xiàn)、負(fù)載均衡、故障恢復(fù)、指標(biāo)收集和監(jiān)控以及更加復(fù)雜的運維,例如 A/B 測試、金絲雀發(fā)布、限流、訪問控制和端到端認(rèn)證等。Istio 提供了一個完整的解決方案,通過為整個服務(wù)網(wǎng)格提供行為洞察和操作控制來滿足微服務(wù)應(yīng)用程序的多樣化需求。
Istio 提供一種簡單的方式來為已部署的服務(wù)建立網(wǎng)絡(luò),該網(wǎng)絡(luò)具有負(fù)載均衡、服務(wù)間認(rèn)證、監(jiān)控等功能,只需要對服務(wù)的代碼進(jìn)行一點改動或不需要做任何改動。想要讓服務(wù)支持 Istio,只需要在你的環(huán)境中部署一個特殊的 Sidecar 代理,使用 Istio 控制平面來配置和管理代理,攔截微服務(wù)之間的所有網(wǎng)絡(luò)通信。
此外,面向服務(wù)的架構(gòu)(SOA)的企業(yè)服務(wù)總線(ESB)與服務(wù)網(wǎng)格有一些相似之處,在 SOA 體系架構(gòu)中 ESB 對于應(yīng)用程序服務(wù)來說是透明的,這意味著應(yīng)用程序?qū)λ鼰o感知。服務(wù)網(wǎng)格可以得到類似的行為,服務(wù)網(wǎng)格應(yīng)該對應(yīng)用程序透明,就像 ESB 那樣,簡化服務(wù)間的調(diào)用。當(dāng)然,ESB 還包括交互協(xié)議的中轉(zhuǎn)、消息轉(zhuǎn)換,或者基于內(nèi)容的路由之類的事情,而服務(wù)網(wǎng)格不負(fù)責(zé) ESB 所做的所有功能。服務(wù)網(wǎng)格確實通過重試、超時、熔斷提供服務(wù)請求的彈性能力,同時也提供服務(wù)發(fā)現(xiàn)和負(fù)載均衡等服務(wù)。復(fù)雜的業(yè)務(wù)轉(zhuǎn)換、業(yè)務(wù)流程編排、業(yè)務(wù)流程異常,以及服務(wù)編排能力等并不屬于服務(wù)網(wǎng)格的解決范疇。相對于 ESB 的集中式系統(tǒng),服務(wù)網(wǎng)格中的數(shù)據(jù)平面高度分布,其代理與應(yīng)用程序并存,這消除了 ESB 架構(gòu)中經(jīng)常出現(xiàn)的單點故障瓶頸問題。
當(dāng)然,也需要清楚服務(wù)網(wǎng)格沒有解決哪些問題,像 Istio 這樣的服務(wù)網(wǎng)格技術(shù)通常都提供了強(qiáng)大的基礎(chǔ)架構(gòu)功能,可以觸及分布式架構(gòu)的許多領(lǐng)域,但肯定不能解決你可能遇到的每個問題。理想的云架構(gòu)能從實現(xiàn)的每個層中分離出不同的關(guān)注點。
在基礎(chǔ)架構(gòu)的低層,更加關(guān)注基礎(chǔ)設(shè)施,如何提供自動化部署的基礎(chǔ)架構(gòu)能力。這有助于將代碼部署到各種平臺上,無論是容器、Kubernetes,還是虛擬機(jī)等。Istio 不會限定你應(yīng)該使用哪種自動化部署工具。
在更高的業(yè)務(wù)應(yīng)用級別,應(yīng)用程序業(yè)務(wù)邏輯是企業(yè)保持核心競爭力的差異化資產(chǎn)。這些代碼資產(chǎn)涉及了包括業(yè)務(wù)功能單一以及需要調(diào)用的服務(wù),以何種順序執(zhí)行,如何執(zhí)行這些服務(wù)的交互,如何將它們聚合在一起,以及在發(fā)生故障時要執(zhí)行的操作等。Istio 不實現(xiàn)或替換任何業(yè)務(wù)邏輯,它本身不執(zhí)行服務(wù)編排,也不會提供業(yè)務(wù)負(fù)載的內(nèi)容轉(zhuǎn)換或者增強(qiáng),不會針對負(fù)載進(jìn)行拆分或者聚合。這些功能最好留給應(yīng)用程序中的庫和框架來實現(xiàn)。
下圖是關(guān)于云原生應(yīng)用程序中的關(guān)注點分離,其中 Istio 對應(yīng)用程序?qū)悠鹬С肿饔貌⑽挥谳^低級別的部署層之上。
Istio 扮演著部署平臺和應(yīng)用程序代碼之間的連接角色。它的作用是促進(jìn)從應(yīng)用程序中取出復(fù)雜的網(wǎng)絡(luò)邏輯,可以基于作為請求的一部分的外部元數(shù)據(jù)(例如 HTTP 標(biāo)頭等)來執(zhí)行基于內(nèi)容的路由。也可以根據(jù)服務(wù)和請求的元數(shù)據(jù)匹配進(jìn)行細(xì)粒度的流量控制和路由。還可以保護(hù)傳輸和卸載安全令牌驗證,或者可以實施服務(wù)運維人員定義的配額和使用策略等。
了解 Istio 的能力,與其他系統(tǒng)的相似之處以及它在架構(gòu)中的位置,可幫助我們像我們過去可能遇到的有前途的技術(shù)那樣犯同樣的錯誤至關(guān)重要。
成熟度和支持級別
Istio 社區(qū)針對每個組件功能的相對成熟度和支持級別,提出了不同的功能階段定義,分別用 Alpha、Beta 和 Stable 來描述各自的狀態(tài),如表 1-1 所示。
表 1-2 是我們摘錄的 Istio 1.4 版本現(xiàn)有功能中已經(jīng)達(dá)到 Beta 及 Stable 功能階段的列表。此信息將在每次發(fā)布后更新,可參照官方網(wǎng)站獲取更新狀態(tài)。
當(dāng)然,Istio 仍然有一些功能還處于 Alpha 狀態(tài),如 Istio CNI 插件,它能夠代替 istio-init 容器完成同樣的網(wǎng)絡(luò)功能,而且無需 Istio 用戶額外申請 Kubernetes RBAC 授權(quán);以及在 Envoy 中使用自定義過濾器的能力等等。相信在后續(xù)不斷完善中,這些功能將逐漸變得越來越穩(wěn)定且生產(chǎn)可用。
總結(jié)
Istio 作為當(dāng)前業(yè)界服務(wù)網(wǎng)格領(lǐng)域中最流行的實現(xiàn),其功能允許你在混合環(huán)境中簡化云原生服務(wù)架構(gòu)應(yīng)用的運行和操作。Istio 使開發(fā)者專注于使用自己喜歡的編程語言構(gòu)建服務(wù)功能,這有效地提升了開發(fā)者的生產(chǎn)力,同時開發(fā)者免于將解決分布式系統(tǒng)問題的代碼糅合到業(yè)務(wù)代碼中。
Istio 是一個完全開放的開發(fā)項目,擁有一個充滿活力、開放和多元化的社區(qū),它的目標(biāo)是賦能開發(fā)者和運維人員,使他們在所有環(huán)境中都能敏捷地發(fā)布和維護(hù)微服務(wù),擁有底層網(wǎng)絡(luò)的完全的可見性,且獲得一致的控制和安全能力。在本書的后續(xù)部分,我們將展示如何利用 Istio 的功能在云原生世界中運行微服務(wù)。
本文摘自于《Istio 服務(wù)網(wǎng)格解析與實戰(zhàn)》,經(jīng)出版方授權(quán)發(fā)布。本書由阿里云高級技術(shù)專家王夕寧撰寫,詳細(xì)介紹 Istio 的基本原理與開發(fā)實戰(zhàn),包含大量精選案例和參考代碼可以下載,可快速入門 Istio 開發(fā)。Gartner 認(rèn)為,2020 年服務(wù)網(wǎng)格將成為所有領(lǐng)先的容器管理系統(tǒng)的標(biāo)配技術(shù)。本書適合所有對微服務(wù)和云原生感興趣的讀者,推薦大家對本書進(jìn)行深入的閱讀。
推薦閱讀:
【1】阿里云服務(wù)網(wǎng)格ASM公測來襲系列之一:快速了解什么是ASM
文章鏈接:https://yq.aliyun.com/articles/748761
【2】阿里云服務(wù)網(wǎng)格ASM之?dāng)U展能力(1):在ASM中通過EnvoyFilter添加HTTP請求頭
文章鏈接:https://yq.aliyun.com/articles/748807
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)者的公眾號。”
總結(jié)
以上是生活随笔為你收集整理的阿里云专家详解 2020 服务网格发展趋势的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始入门 K8s | 理解 Runt
- 下一篇: 迁移 Express 到函数计算