智能互聯網之容器彈性雲與Service Mesh

原文鏈接:https://blog.csdn.net/qq_25284315/article/details/88071768

 

下一代微服務技術ServiceMesh,顛覆性的變革,Google/IBM/BAT內部最新技術方向。 課程從實戰出發,讓你學習到如何不編碼實現微服務,如何跨語言實現微服務,領略ServiceMesh的強大吧

現在最火的後端架構無疑是微服務了,微服務將之前的單體應用拆分成了許多獨立的服務應用,每個微服務都是獨立的。

微服務基本組件包括服務註冊和發現、服務通信和治理、故障熔斷恢復、配置、安全、監控等等,這些微服務組件和功能在業界已經深入人心,在各大互聯網公司開花結果,業界知名開源的微服務框架有 Netflix OSS、Spring Cloud 及其國內的阿里 Dubbo 等等,各種框架百花齊放。

微服務好處自然很多,但是隨着應用的越來越大,微服務暴露出來的問題也就隨之而來了,微服務越來越多,管理越來越麻煩。特別是要你部署一套新環境的時候,隨之而來的服務發現、負載均衡、Trace跟蹤、流量管理、安全認證等等問題。

當然隨着微服務的不斷髮展,微服務的生態的不斷完善,新的微服務框架 Service Mesh 的出現就是爲了解決這一系列問題。


什麼是 Service Mesh

Service Mesh 是一個非常新的名詞,最早是 2016 年由開發 Linkerd 的 Buoyant 公司提出的,伴隨着 Linkerd 的傳入,Service Mesh 的概念也慢慢進入國內技術社區。

Service Mesh 是一個基礎設施層,其獨立運行在應用服務之外,提供應用服務之間安全、可靠、高效的通信,併爲服務通信實現了微服務運行所需的基本組件功能,包括服務註冊發現、負載均衡、故障恢復、監控、權限控制等等。Service Mesh 的中文譯爲 “服務網格”。

Willian Morgan(Linker 的 CEO)給出的 Service Mesh 定義:

A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware.

服務網格是一個用於處理服務間通信的基礎設施層,它負責爲構建複雜的雲原生應用傳遞可靠的網絡請求。在實踐中,服務網格通常實現爲一組和應用程序部署在一起的輕量級的網絡代理,但對應用程序來說是透明的。

一個典型的 Service Mesh 部署網絡結構圖

其中綠色方塊爲應用服務,藍色方塊爲 Sidecar Proxy,應用服務之間通過 Sidecar Proxy 進行通信,整個服務通信形成圖中的藍色網絡連線,圖中所有藍色部分就形成了 Service Mesh。

Service Mesh 的特點

Service Mesh 有如下幾個特點:

應用程序間通訊的中間層
輕量級網絡代理
應用程序無感知
解耦應用程序的重試/超時、監控、追蹤和服務發現
爲什麼需要 Service Mesh

最主要的理由來自於 Service Mesh 在提供微服務框架功能的同時,它是一個獨立運行在應用服務之外的模塊。這帶來的好處就是應用服務不再需要爲接入微服務框架而在代碼和配置中添加繁多的依賴庫和依賴配置項,實現了微服務框架和應用服務之間的解耦,讓應用服務代碼更加純粹地去實現自己的業務邏輯,能夠更加輕鬆地接入微服務框架,享受微服務框架帶來的各種服務治理功能。

理解服務網格

要理解服務網格的概念,就得從服務的部署模型說起。

單個服務調用,表現爲 sidecar


Service Mesh 的部署模型,先看單個的,對於一個簡單請求,作爲請求發起者的客戶端應用實例,會首先用簡單方式將請求發送到本地的 Service Mesh 實例。這是兩個獨立進程,他們之間是遠程調用。

Service Mesh 會完成完整的服務間調用流程,如服務發現負載均衡,最後將請求發送給目標服務。這表現爲 Sidecar。

提到 Sidecar,在 Kubernetes 中部署的 POD 中也會有一個附加的 Sidecar 容器。

部署多個服務,表現爲通訊層


多個服務調用的情況,在這個圖上我們可以看到 Service Mesh 在所有的服務的下面,這一層被稱之爲服務間通訊專用基礎設施層。Service Mesh 會接管整個網絡,把所有的請求在服務之間做轉發。在這種情況下,我們會看到上面的服務不再負責傳遞請求的具體邏輯,只負責完成業務處理。服務間通訊的環節就從應用裏面剝離出來,呈現出一個抽象層。

有大量服務,表現爲網絡


如果有大量的服務,就會表現出來網格。圖中左邊綠色方格是應用,右邊藍色的方框是 Service Mesh,藍色之間的線條是表示服務之間的調用關係。Sidecar 之間的連接就會形成一個網絡,這個就是服務網格名字的由來。這個時候代理體現出來的就和前面的 Sidecar 不一樣了,形成網狀。

服務網格
首先第一個,服務網格是抽象的,實際上是抽象出了一個基礎設施層,在應用之外。其次,功能是實現請求的可靠傳遞。部署上體現爲輕量級的網絡代理。最後一個關鍵詞是,對應用程序透明。

大家注意看,上面的圖中,網絡在這種情況下,可能不是特別明顯。但是如果把左邊的應用程序去掉,現在只呈現出來 Service Mesh 和他們之間的調用,這個時候關係就會特別清晰,就是一個完整的網絡。這是 Service Mesh 定義當中一個非常重要的關鍵點,和 Sidecar 不相同的地方:不再將代理視爲單獨的組件,而是強調由這些代理連接而形成的網絡。在Service Mesh裏面非常強調代理連接組成的網絡,而不像 Sidecar 那樣看待個體。

Servcie Mesh 的整體集成解決方案

Service Mesh 主要解決的是微服務之間的網絡通信交互,隨着業務服務增加,整個 Service Mesh 會變得龐大和複雜之後,這個時候需要對 Service Mesh 的管理功能進行抽象出來,從而滿足豐富的微服務運營需求。

目前兩款流行的 Servcie Mesh 開源軟件 Istio 和 Linkerd 都可以直接在 kubernetes 中集成,其中 Linkerd 已經成爲 CNCF 成員。

Linkerd

Linkerd 是一個用於雲原生應用的開源、可擴展的 Servcie Mesh(服務網格)。同時,Linkerd 也是 CNCF(雲原生計算基金會)中的組件之一。

Linkerd 的出現是爲了解決像 twitter、google 這類超大規模生產系統的複雜性問題。Linkerd 不是通過控制服務之間的通信機制來解決這個問題,而是通過在服務實例之上添加一個抽象層來解決的。

Linkerd 負責跨服務通信中最困難、易出錯的部分,包括延遲感知、負載均衡、連接池、TLS、儀表盤、請求路由等——這些都會影響應用程序伸縮性、性能和彈性。

Linkerd 作爲獨立代理運行,無需特定的語言和庫支持。應用程序通常會在已知位置運行 Linkerd 實例,然後通過這些實例代理服務調用——即不是直接連接到目標服務,服務連接到它們對應的 Linkerd 實例,並將它們視爲目標服務。

在該層上,Linkerd 應用路由規則,與現有服務發現機制通信,對目標實例做負載均衡——與此同時調整通信並報告指標。

通過延遲調用linkerd的機制,應用程序代碼與以下內容解耦:

生產拓撲
服務發現機制
負載均衡和連接管理邏輯
應用程序也將從一致的全局流量控制系統中受益。這對於多語言應用程序尤其重要,因爲通過庫來實現這種一致性是非常困難的。

Linkerd 實例可以作爲 sidecar(既爲每個應用實體或每個主機部署一個實例)來運行。 由於Linkerd 實例是無狀態和獨立的,因此它們可以輕鬆適應現有的部署拓撲。它們可以與各種配置的應用程序代碼一起部署,並且基本不需要去協調它們。

Istio

Istio 作爲 Servcie Mesh 的另一種實現,原理與 linkerd 基本類似。Istio 由 Google、IBM、Lyft Envoy 聯手開發,一開始就定位於實現 Service Mesh 模式的微服務框架,在 2017 年 5 月發佈 0.1 版本,然後在 10 月發佈了 0.2 版本。

一個 Istio Service Mesh 在邏輯上可以分成兩大區塊:

數據區(data plane):由通信代理組件(Envoy/Linkerd等)和組件之間的網絡通信組成。
控制區(control plane):負責對通信代理組件進行管理和配置。
Istio 的架構圖如下:

在圖中可以看到 Istio Service Mesh 的兩大區塊。

架構圖中各個子模塊功能如下:

Envoy:一個使用 C++ 語言開發的高性能通信代理,負責各個應用服務之間通信。
Pilot:管理和配置 Envoy ,提供服務發現、負載均衡和智能路由,保證彈性服務(服務超時次數、重試、熔斷策略)。
Mixer:信息監控檢查。
Istio-Auth:提供服務和服務、用戶和服務之間的認證服務,實現訪問控制,解決是誰訪問的是哪個 API 的問題。
其中,圖中的通信代理組件爲 Envoy,這是 Istio 原生引入的,但 Linkerd 也能夠集成對接 Istio。
———————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章