雲原生技術專題-Service Mesh-爲什麼會出現(一)

Service Mesh的起源

目前基於微服務架構搭建自己的應用,已經成爲主流的開發方式,從幾年前的星星之火到現在的大規模的落地,構建微服務應用是每個開發者都需要面對的工作,然後軟件開發行業從來沒有銀彈,微服務在給我們帶來一系列便利的同時,也依賴會存在缺點,其中最核心的問題就是如何管理好服務間的網絡通信,特別是應用規模變得越來越龐大的時候,這個問題就會變得越來越突出,而Service Mesh技術就是解決這個問題而生的,通過它可以讓開發者從軟件通信的泥濘中解脫出來,省去了開發和維護控制邏輯的繁重工作,讓開發人員只關注業務。

雲原生是未來軟件架構的方向,而且它現在正以燎原之勢席捲着整個軟件開發行業,現在開發的應用一般都在雲上,或者正在全面上雲的路上,並且或多或少已經引入了雲原生架構中的技術,而service mesh是雲原生中重要的一環。

有人把kubernetes和service mesh和serverless稱爲雲原生架構的三架馬車,如果把k8s比如雲原生的操作系統,而serverless是讓應用不在關注機器與實例,那麼service mesh就好比應用的網絡通信層,它讓應用與服務節藕,讓開發者只關注業務,有很多業務邏輯中夾雜着大量控制邏輯的應用程序,而service mesh幫你完成了這些工作,而服務不在出現超時,重試這樣的控制邏輯控制,也不用集成各種流量控制相關的類庫工具包,你的代碼只有業務本身,service mesh讓你着眼於現在,解決當下微服務的痛點,並穩定的邁向雲原生的未來。

有的人把service mesh稱爲第二代微服務,這不無道理,而現在的微服務也有一些問題,著名的軟件大師馬丁福勒曾經寫過一篇著名的文章叫《微服務》,這裏面描述了微服務的概念與特性,其中有兩個特性非常重要

1、圍繞業務去構建團隊
雲原生技術專題-Service Mesh-爲什麼會出現(一)
這張圖是單體應用典型的模式,首先左側指的是開發團隊它的一個整體架構,而這些開發團隊分爲不同的職能分成了不同的層次組合在一起,他們開發出來的產品就是右邊這個樣子,包括它前端的頁面以及中間業務層邏輯,和最後的數據庫層

而微服務架構中整個開發團隊會圍繞業務去構建,所以它的結構和單體是不太一樣的,可以看到它不同的職能被劃分成了一個個小的團隊,每個小的團隊會對應實現一個獨立的業務,那麼這樣的出現,這就引出了一個著名的理論叫康威理論,康威定理是這樣描述的,它是說它一個團隊的結構會決定這個團隊最終開發的產品的結構。

2、去中心化的數據管理
雲原生技術專題-Service Mesh-爲什麼會出現(一)

在左邊的單體模式下,整個數據庫是一個整體,它的數據是中心化的,而微服務的架構下也業務是綁定在一起的,它的數據庫和業務也是綁定在一起的,不同業務會持有不同的數據庫,這就是所謂的去中心化的數據特點,這兩個特點會帶來什麼樣的優勢?

微服務架構的優勢
團隊層面:當我們把團隊劃分爲一個小的內聚的團隊的時候,就會發現一個非常大的優勢,就是溝通成本會急劇的降低,比如說之前在開發單體應用的時候,前端和後端需要連接一個接口,就不得不去跨團隊去協調去溝通,但是現在大家坐在一起溝通就可以了,它的溝通成本會降低,同時我們這些小的團隊可以在一起快速的去獨立的去完成業務,和別的team不會有太多的耦合,也不會有太多的依賴。
產品層面:從產品角度來講,因爲不同的業務劃分了一個個小的微服務,那麼就帶來一個大的優勢就是可以去獨立的去部署,獨立部署有兩個好處,第一個好處就是可以充分的去利用系統資源,比如說模塊一可能訪問量比較高,那麼我們可以把它多部署幾份,模塊二訪問量比較低,就可以部署一到二份就可以,而原來這樣的優勢在單體應用是不存在的,不得不去部署多個實例,哪怕這裏面有一部分的業務它訪問比較高,訪問量比較低的那部分業務也同樣被部署了多份,它整體的系統利用率是比較低的,另外一個優勢就是可以獨立的部署,字節的業務開發完成,我就可以直接獨立部署,不需要去協調,去等待其他的模塊一起去上線。

微服務是軟件架構的銀彈嗎?
什麼是銀彈理論,銀彈理論起源於1975年寫的一本書叫人月神話,它是這樣描述銀彈理論的,沒有任何一種技術和管理上的進步,可以極大的提高生產效率,這句話的意思可以理解爲沒有任何一種技術可以完美的可以完美的解決軟件開發出現的問題,而軟件開發的本質就是取捨,我們總是在天平的兩端不斷的去搖擺,去尋找其中的平衡點,算法中有一個重要的原理就是用空間換時間,或者用時間換空間,這就是一種取捨,軟件開發中也是一樣,無論是進行應用系統開發,還是架構的設計,都需要尋找平衡點,甚至是給一個函數在命名的時候,都要去糾結名詞在前還是動詞在前,曾經有個笑話說程序員50%的時間都是在函數起名上,這其實不無道理,那麼微服務帶來了很大的優勢,同樣也存在一些缺點。

微服務架構面臨什麼樣的問題?

雲原生技術專題-Service Mesh-爲什麼會出現(一)
這是一個非常簡單的微服務示例,一共6個微服務,假設當兩個服務進行調用的時候,突然網絡出現了中斷,怎麼辦呢?那就需要想辦法進行去調試,這張圖演示的微服務規模非常的小,很容易就會發現問題的所在,但是如果你的微服務變得越來越龐大的時候,系統功能越來越多的時候,比如下面的這張圖如何去排查
雲原生技術專題-Service Mesh-爲什麼會出現(一)
再或者說系統複雜到下面這種程度
雲原生技術專題-Service Mesh-爲什麼會出現(一)
如何去找到出現問題的節點,很顯然這就是微服務面料的最大的一個痛點,就是服務間網絡通信的問題

爲什麼說網絡通信是微服務架構的痛點?
這就要引出一個新的理論,這就是非常著名的分佈式計算的8個繆論
雲原生技術專題-Service Mesh-爲什麼會出現(一)
比如說它是這樣描述的,可以一眼看出這些都是反話,爲什麼會有這8種繆論的存在呢,是因爲我們工程師在開發業務系統的時候,潛意識裏面很難去考慮網絡相關的問題,很難會把網絡相關的需求納入到我們的設計中,因此就導致了這8個繆論的產生,其實在分佈式的系統中,網絡問題是經常出現的,而微服務這種架構,因爲服務變得越來越多,變得更離散,交互也越來越多,所以網絡問題也會出現的概率會更大,因此這就是微服務架構的最大的一個痛點。

如何管理和控制服務間的通信?
而解決微服務網絡通信的痛點,也就如何去管理和控制服務網絡通信的問題,一般情況下主要有以下的一些需求
1、服務註冊/發現
2、路由,流量轉移
3、彈性能力(熔斷、超時、重試)系統出現故障,如何通過熔斷、超時、重試這些彈性能力來提升系統整個健壯性和可靠性
4、安全,網絡安全,如何進行授權,進行身份認證
5、可觀察性,對於微服務來說,服務的可視化是非常重要的,也就是服務的可觀測性,如何通過可視化的方式去查看整個服務的狀態,系統的資源使用情況
而這些功能組合在一起就是service mesh

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