Service Mesh雜談

Service Mesh是一種基礎通信設施,它的出現(xiàn)時為了解決微服務之間復雜的通信問題。我們都知道,使用微服務思想去構(gòu)建系統(tǒng)之后,會出現(xiàn)很多獨立的微服務模塊。模塊之間的服務發(fā)現(xiàn),負載均衡,失敗重傳等這些考慮因素,是每個模塊都需要重復地去解決的,同時復雜性會隨著模塊數(shù)量增多而變大。

解決模塊間通信問題之路

在計算機先驅(qū)引入了TCP/IP協(xié)議后,保證了鏈路層通信的可靠性。但是隨著系統(tǒng)規(guī)模的擴大,引入了分布式,微服務這些概念,使一個系統(tǒng)的模塊數(shù)量變得越來越多,模塊間通信的可靠性就是個問題了,分布式通信需要解決下面幾個問題:

  • 服務發(fā)現(xiàn)。怎么讓一個模塊感知到其它的模塊,硬編碼是最簡單的方式,但顯然不是最好的方式。

  • 負載均衡。一個模塊有多臺機器運行,怎么在多臺機器上做負載均衡?除了手動做IP輪詢,需要有更豐富的輪詢方式。

  • 失敗重傳&熔斷。當一個模塊不可用時,需要能夠重試,重試幾次還不行就需要熔斷機制來保證響應速度,避免請求堆積。

  • 流量監(jiān)控。日志,請求監(jiān)控,鏈路追蹤。這些是一個工業(yè)級別系統(tǒng)必須具備的基本能力。

  • 流量控制。常見的有訪問控制,頻率限制,配額控制。

  • 模塊鑒權(quán)。模塊之間的鑒權(quán),入口模塊需要具備的能力。

另外分布式系統(tǒng)還有應用生命周期管理的需求(發(fā)布,灰度,回滾,擴容,縮容等),這是另外一個維度的事情,后續(xù)再另寫文章講述。

為了解決這些問題,業(yè)界已經(jīng)做出了很多努力。下面使用三個階段來劃分。

階段一,自建服務

自建分布式服務是分布式發(fā)展的初級階段,最開始應該是出現(xiàn)在各大互聯(lián)網(wǎng)公司。隨著互聯(lián)網(wǎng)的普及,請求的量級開始上來,單機無法承載龐大的請求量,萌芽出來分布式處理的需求。各個互聯(lián)網(wǎng)公司開始自建一些處理分布式的組件,比如負載均衡,流量監(jiān)控,日志收集等。

該階段的特點:

  1. 各個公司基本是自研分布式組件,自給自足

  2. 沒有系統(tǒng)性,都是些比較零散的組件

  3. 開源的比較少

這個階段寫出來的實用組件為后續(xù)開源的標準框架打下了基礎。

階段二,標準框架

隨著各大互聯(lián)網(wǎng)公司在分布式上的積累和實踐,漸漸對分布式系統(tǒng)有了些系統(tǒng)性梳理,從而產(chǎn)生出了一些成熟的分布式框架,下面是幾個主流的框架。

這個階段出現(xiàn)的框架,基本具有如下特點:

  1. 不同程度上解決了分布式通信的問題,各有優(yōu)劣。具體選擇哪種框架建議去詳細了解下它們的特點和評價。

  2. 業(yè)務實現(xiàn)語言受框架語言限制??蚣芏际腔谀撤N語言實現(xiàn),業(yè)務代碼基本是跟著框架語言走的。

  3. 框架對業(yè)務代碼有侵入性的。因為為了使用框架的某些特性,必須在業(yè)務代碼中使用框架提供的通信API和其它特性。這種耦合對代碼的復用是有影響的。

這些框架雖然一定程度上簡化了解決分布式通信問題的難度,但是顯然還是不夠靈活,業(yè)務代碼還是需要去關心如何解決分布式通信問題,無法做到只需要關注業(yè)務代碼。

下一階段將講述目前的最新進展,也就是致力于如何使業(yè)務代碼只用關心業(yè)務的實現(xiàn),不用去關心分布式通信問題。

階段三,將通信問題協(xié)議化

大家都知道,TCP/IP協(xié)議棧的出現(xiàn),是為了屏蔽鏈路層和物理層通信的各種細節(jié),為廣大程序員們提供一個省心穩(wěn)定的字節(jié)流通道。現(xiàn)在在TCP/IP協(xié)議通信的基礎上,又出現(xiàn)了了新的問題,那就是分布式通信的各種問題考慮,前面已經(jīng)羅列了大部分。大神們?yōu)榱私鉀Q這個問題,想到的辦法就是把分布式通信的實現(xiàn)作為一種基礎通信設施,作為協(xié)議棧的一部分提供給廣大程序猿們,這樣大家就不用重復去考慮實現(xiàn)分布式通信了。這個想法就是Service Mesh(服務網(wǎng)格)。

當然Service Mesh目前的實現(xiàn)不是以協(xié)議棧的形式提供的,而是以sidecar(邊車)的形式提供。sidecar的意思與我們小時候看到的三輪車很類似,就是主駕旁邊的那個副駕。

smsh1561600056.jpg

下圖是Service Mesh部署后的示意圖,其中藍色塊就代表通信Proxy,通信Proxy就是實現(xiàn)了分布式通信,它作為sidecar與業(yè)務Service部署一起。業(yè)務Service之間的所有出入通信都會通過Proxy

service-mesh-from-linkerd-to-conduit-cloud-native-taiwan-meetup-18-638.jpg

目前最流行的兩款Service Mesh開源軟件是IstioLinkerd。其中Istio是由Google,IBMLyft聯(lián)合開發(fā)的,而LinkerdCNCF成員,兩者都有深厚的背景,而目前IstioLinkerd用的還是相對廣泛一些。

下面是Istio的架構(gòu)圖

istio-arch.png

其中Proxy還是以sidecar模式提供了可靠的分布式通信實現(xiàn)。其它模塊實現(xiàn)了配置和策略檢查等功能,后續(xù)再另寫文章詳細介紹。

結(jié)語

其實Service Mesh也不是什么高深的概念,說白了就是通過一個專門的agent來代理通信,讓業(yè)務Service專注于實現(xiàn)業(yè)務邏輯,而agent就專注于實現(xiàn)可靠的分布式邏輯。本文通過講解發(fā)展歷史的方式來解釋了這種思想。

另外文中還沒講到的是目前Service Mesh的應用,大部分都是云原生的,基于容器服務Kubernetes之上實現(xiàn)的。關于容器服務Kubernetes的講解,可以去參考它的官網(wǎng)資料,或者關注我后期的相關文章。

版權(quán)聲明:本文為原創(chuàng)文章,版權(quán)歸 Roper所有,轉(zhuǎn)載請注明出處!

本文鏈接:https://roperluo.cn/index.php/archives/16/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容