雲原生技術專題-Service Mesh-到底解決了什麼問題(三)

首先來看一下service mesh的定義
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)
這個定義最早是由bouyant的公司的CEO william morgan第一次提出的,在2017年的四月份,隨着第一個service mesh產品的發佈,他們同時發佈了一篇文章,就是什麼是service mesh,以及你爲什麼需要它,這篇文章對service mesh做了一個權威的定義
這段話說的是service mesh是一個基礎設施層,用來處理服務與服務之間網絡之間的通信,它主要的功能是在雲原生的應用,這種複雜的網絡拓撲情況下進行可靠的請求分發,一般情況下它會實現爲一組輕量化的網絡代理,部署在你應用代碼的旁邊,並且是跟你的應用完全透明,其實這段話的意思我們需要理解它的第一點,你需要知道它的本質,你可以看到它的本質是一個基礎設施層,第二點是它的功能,其實很簡單,就是請求的分發,第三點,它的產品形態或者是它的部署方式,實際上就是一組網絡代理,也就是sidecar,它的特點就是完全和你的應用透明,把上面四個關鍵點組合在一起就能形成一個簡潔的概念,所謂service mesh就是一個用來請求轉發的基礎設施層,它通常是以sidecar的形式進行部署,並且對你的應用透明。

Service Mesh產品形態是什麼樣的?
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)
一個service mesh實際是由sidecar組成的一個網絡拓撲,可以看到增加了一個網絡控制層面,用來管理和控制整個sidecar網絡,這就是第二代service mesh技術,從目前來看它的產品形態包括兩部分,一部分叫數據平面,也就是所有的sidecar組合,一部分叫控制平面,用來進行總體的控制,這兩個形態組合在一起就形成了現在的service mesh的技術形態,也可以用這句話來定義service mesh,service mesh是sidecar網絡拓撲的結構模式

Service Mesh主要功能
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)
進行網絡控制都需要哪些功能,這些功能就是service mesh的核心功能,
主要概述爲以下四個功能
第一個功能就是流量控制,也就是路由,比如我們熟知的藍綠部署,灰度發佈,AB測試,以及流量轉移,超時重試,熔斷這幾個核心,和系統彈性的功能,另外爲了進行調試,還引入了故障注入,流量鏡像,除了流控這樣的功能之外,另外的功能也很重要就是策略,大家家裏都有路由器,一般情況下都可以在路由器進行一些流量限制或者黑名單,白名單的操作,這就是最典型的策略,而service mesh也會提供這樣的功能,第三塊功能就是網絡安全相關的,主要是如何進行授權以及身份認證,最後一部分功能是可觀測性,如何對整個微服務進行觀測,通過指標收集和展示,通過日誌的收集,以及分佈式追蹤,來完整的去觀測系統的運行狀態。

service mesh與kubernetes的關係
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)

kubernetes主要是解決容器編排與調度問題,而service mesh主要解決服務網絡通信問題,他們的目標是不一樣的,第二點kubernetes實際上是用來管理應用的生命週期,可以簡單的理解爲是一個調度器,而service mesh本質是用來解決服務間的通信,可以理解爲是一組sidecar代理,第三點service mesh會給k8s提供支持,大家都知道,在k8s pod是最小的調度單元,pod天生支持多容器的部署,這就爲我們植入sidecar提供了非常大的便利,因此kubernetes對service mesh部署提供了非常大的支持,反過來講service mesh對k8s的網絡層面功能提供了擴展和延伸,其實k8s當中也有一些網絡相關的功能,比如說ingress,比如說最基本的服務發現,而這些功能雖然屬於網絡控制相關,但是還是比較簡單,不完全滿足我們的需要,service mesh會把這些功能進行擴展和延伸,以便滿足我們對網絡控制相關功能更多的需求,從上面這張圖我們可以看到k8s是最底層,相當於雲原生時代的操作系統,而service mesh是附着在操作系統之上的,可以理解雲原生的網絡通信層。

Service Mesh和API網關的異同點
現有的API網關已經提供了service mesh的相關功能,比如說複雜均衡,服務發現,以及流量控制
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)
具體的異同點有哪些呢?
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)
這張圖也就是我們的部署結構,在我們的代理sidecar,由sidecar完全去接管發送到應用的請求,處理完成之後再發送到另一個微服務

下面這張圖顯示了API網關它的模型,可以看到API網關實際上是部署在應用邊界的,它並沒有侵入到應用內部,它主要的功能實際上是對內部的API進行一個聚合和抽象,以方便外部進行調用,所以這是他們一個很大的一個不同點
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)

Service Mesh主要是用來對應用內部的網絡細節進行一個描述,而API網關主要附着應用的邊界,對流量進行一個抽象,所以他們的異同點如下:
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)

Service Mesh技術標準
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)
目前主要有兩個標準,第一個標準叫UDPA就是統一的數據平面API,這個標準的目的就是爲不同的數據平面提供一個統一的API,方便你無縫的接入,我們知道不同的數據平面有很多比如說Envoy,比如說Linkerd,這些產品有很多,目前來說他們的接入標準是不一樣的,有了UDPA之後就不再續關心它具體實現的細節了,直接用統一的標準接入就可以了,這樣方便進行遷移,這個標準主要是由雲原生基金會提出的,它背後的公司就是google,以及Envoy的數據平面的開發者Lyft
雲原生技術專題-Service Mesh-到底解決了什麼問題(三)
另外一個標準就是SMI,service mesh interface,這個標準的目標實際跟UDPA是類似的,只不過它側重的是控制層面,它希望爲用戶提供一個統一的使用體驗,通過這樣的一個標準去接入你的控制層面,而不用去關心控制平面的實現細節,標準最初是由微軟作爲發起人,可以看到圖中有很多的service mesh玩家參與到這個標準中,唯獨缺失了google和亞馬遜兩個重量級人物,他們爲什麼沒有參與,是因爲他們兩家以及對service mesh的競爭

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