自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文讀懂Service Mesh:邊車模式簡介

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
早期的很多系統(tǒng)都是單體服務(wù)的,就是把所有組件都塞在一個應(yīng)用內(nèi),但是隨著軟件復(fù)雜性和并發(fā)用戶數(shù)的急劇增加,單體應(yīng)用無論是從開發(fā)效率和運維管理方面都已經(jīng)不能適應(yīng)時代的發(fā)展了。

自從2016年Service Mesh(服務(wù)網(wǎng)格)的概念被提出以來,短短幾年時間就受到了廣大程序員們的熱烈歡迎?為什么Service Mesh這么容易被接受呢?原因很簡單,那就是它切中了早期微服務(wù)架構(gòu)的痛點。從而極大地解放了生產(chǎn)力。要理解它是如何解決了程序員們的生產(chǎn)力的,我們先從早期微服務(wù)框架的痛點開始說起。

一、微服務(wù)架構(gòu)的產(chǎn)生與問題

早期的很多系統(tǒng)都是單體服務(wù)的,就是把所有組件都塞在一個應(yīng)用內(nèi),但是隨著軟件復(fù)雜性和并發(fā)用戶數(shù)的急劇增加,單體應(yīng)用無論是從開發(fā)效率和運維管理方面都已經(jīng)不能適應(yīng)時代的發(fā)展了。于是把各種服務(wù)獨立出來,每個服務(wù)只關(guān)注自己的業(yè)務(wù)領(lǐng)域,與其它服務(wù)松耦合的微服務(wù)就應(yīng)運而生了。

圖片

微服務(wù)架構(gòu)具有以下幾個優(yōu)點:

1、單?職責(zé):拆分后的單個微服務(wù),通常只負(fù)責(zé)單個高內(nèi)聚自閉環(huán)功能,因此很易于開發(fā)、理解和維護。

2、架構(gòu)靈活:不同微服務(wù)應(yīng)用之間在技術(shù)選型層面幾乎是獨立的,可以?由選擇最適合的技術(shù)棧。

3、部署隔離:相比巨無霸單體應(yīng)用,單個微服務(wù)應(yīng)用的代碼和產(chǎn)物體積大大減少,更容易持續(xù)集成和快速部署;同時,通過進程級別的隔離,也不再像單體應(yīng)用一樣只能同生共死,故障隔離效果顯著提升。

4、獨?擴展:單體應(yīng)用時代,某個模塊如果存在資源瓶頸(e.g. CPU/內(nèi)存),只能跟隨整個應(yīng)用一起擴容,白白浪費很多資源。微服務(wù)化后,擴展的粒度細(xì)化到了微服務(wù)級別,可以更精確地按需獨立擴展。

但是,微服務(wù)帶來很多優(yōu)點的時候,也出現(xiàn)了很多新的問題,最大的問題,就在于服務(wù)間通信的問題,具體來講,就是如下幾個問題:

  • 如何找到服務(wù)的提供??
  • 如何保證遠(yuǎn)程調(diào)?的可靠性?
  • 如何降低服務(wù)調(diào)?的延遲?
  • 如何保證服務(wù)調(diào)?的安全性?

于是,為了解決這些問題,微服務(wù)技術(shù)特有的通信語義就出現(xiàn)了,如熔斷策略、負(fù)載均衡、服務(wù)發(fā)現(xiàn)、認(rèn)證和授權(quán)、quota限制、trace和監(jiān)控等等,服務(wù)根據(jù)業(yè)務(wù)需求來實現(xiàn)一部分所需的通信語義。

但是,這樣做的問題也非常明顯,那就是,在這個過程中,開發(fā)人員需要花費大量的時間去編寫與業(yè)務(wù)功能無關(guān)的代碼。雖然框架本身屏蔽了分布式系統(tǒng)通信的一些通用功能實現(xiàn)細(xì)節(jié),但開發(fā)者卻要花更多精力去掌握和管理復(fù)雜的框架本身,在實際應(yīng)用中,去追蹤和解決框架出現(xiàn)的問題也絕非易事。

另外,開發(fā)框架通常只支持一種或幾種特定的語言,沒有框架支持的語言編寫的服務(wù),很難融入面向微服務(wù)的架構(gòu)體系,想因地制宜地用多種語言實現(xiàn)架構(gòu)體系中的不同模塊也很難做到。同時框架以lib庫的形式和服務(wù)聯(lián)編,復(fù)雜項目依賴時的庫版本兼容問題非常棘手框架庫的升級也無法對服務(wù)透明,服務(wù)會因為和業(yè)務(wù)無關(guān)的lib庫升級而被迫升級。

于是,為了解決這些問題,Service Mesh誕生了。

圖片

二、Service Mesh:微服務(wù)時代的TCP/IP協(xié)議

Serice Mesh的誕生,就是為了將微服務(wù)時代的通信語義剝離出來,從而使得微服務(wù)本身更加關(guān)注業(yè)務(wù)邏輯,它為每個微服務(wù)提供了一個代理,而這個代理如同TCP/IP協(xié)議一樣,把微服務(wù)時代所需要的通信語義放在一個層面完成,從而使得業(yè)務(wù)開發(fā)者們從繁重的工作中解放出來。而這個代理,就是大名鼎鼎的Sidecar(邊車)模式了。

Sidecar原意是指從二戰(zhàn)時開始被廣泛使用起來的挎斗摩托車。這個名字也是一種著名的飾以紅櫻桃的混合雞尾酒,同時也指在三人以上多人運動中,在旁邊處于輔助地位或者拍攝的人。

在Service Mesh中,監(jiān)視、日志、限流、熔斷、服務(wù)注冊、協(xié)議轉(zhuǎn)換、冪等……" 這些功能,其實都是大同小異,是完全可以做成標(biāo)準(zhǔn)化的組件和模塊的。在這種情況下,邊車就像一個微服務(wù)的 Agent,這個服務(wù)所有對外的進出通訊都通過這個 Agent 來完成。這樣,我們就可以在這個 Agent 上做很多文章了。

這樣,所有的微服務(wù)通過Sidecar連接起來之后,就像一個網(wǎng)格一樣,這也是Service Mesh名稱的由來。

圖片

那么,Sidecar具體的作用是什么呢?我們以Service Mesh概念的提出者Buoyant出品的Linkerd為例,來解析一下邊車模式的服務(wù)流程。在Linkerd里面,一個服務(wù)請求的處理流程包括以下幾個部分:

圖片

1、動態(tài)路由:根據(jù)上游服務(wù)請求參數(shù),確定下游目標(biāo)服務(wù);除了常規(guī)的服務(wù)路由策略,Linkerd還可以通過這一層動態(tài)路由能力,支持灰度發(fā)布、A/B測試、環(huán)境隔離等非常有價值的場景。

2、服務(wù)發(fā)現(xiàn):確定目標(biāo)服務(wù)后,下一步就是獲取對應(yīng)的實例的地址列表(e.g. 查詢service registry)。

3、負(fù)載均衡:如果列表中有多個地址,Linkerd會通過負(fù)載均衡算法(e.g. Least Loaded、Peak EWMA)選擇其中?個合適的低延遲實例。

4、執(zhí)行請求:發(fā)送請求到上一步所選擇的實例,并記錄延遲和響應(yīng)結(jié)果。

5、重試處理:如果請求未響應(yīng),則選擇另?個實例重試(前提:Linkerd知道該請求是冪等的)。

6、熔斷處理:如果發(fā)往某個實例的請求經(jīng)常失敗,則主動從地址列表中剔除該實例。

7、超時處理:如果請求超期(在給定的deadline時間點之前仍未返回),則主動返回失敗響應(yīng)。

8、可觀測性:Linkerd會持續(xù)收集和上報上述各種行為數(shù)據(jù),包括Metrics和Tracing。

而這些服務(wù),就類似于TCP服務(wù)提供的網(wǎng)絡(luò)傳輸處理邏輯了,類似于TCP服務(wù)解決了網(wǎng)絡(luò)傳輸中通用的流量控制問題,將技術(shù)棧下移,從服務(wù)的實現(xiàn)中抽離出來,成為操作系統(tǒng)網(wǎng)絡(luò)層的一部分一樣,Service Mesh也將微服務(wù)間通信所需要的通用功能剝離出來,將技術(shù)棧單獨抽出一層,從而成為分布式系統(tǒng)的一部分。

三、主流Service Mesh實現(xiàn)

目前主流的Service Mesh實現(xiàn)包括Linkerd、Envoy、Istio、Conduit等。

責(zé)任編輯:武曉燕 來源: 活在信息時代
相關(guān)推薦

2022-11-06 21:14:02

數(shù)據(jù)驅(qū)動架構(gòu)數(shù)據(jù)

2022-09-21 16:56:16

設(shè)計模式微服務(wù)架構(gòu)

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2022-02-08 10:41:20

Service MeAPI GatewaLinux

2023-07-19 08:46:00

導(dǎo)航地圖

2023-05-20 17:58:31

低代碼軟件

2023-11-27 17:35:48

ComponentWeb外層

2022-07-05 06:30:54

云網(wǎng)絡(luò)網(wǎng)絡(luò)云原生

2021-12-29 18:00:19

無損網(wǎng)絡(luò)網(wǎng)絡(luò)通信網(wǎng)絡(luò)

2022-10-20 08:01:23

2022-12-01 17:23:45

2022-07-26 00:00:03

語言模型人工智能

2018-09-28 14:06:25

前端緩存后端

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2024-12-24 11:01:58

2024-10-09 17:19:04

GoGolangKubernetes

2021-09-13 22:34:56

區(qū)塊鏈新基建數(shù)字化轉(zhuǎn)型

2021-09-04 19:04:14

配置LogbackJava
點贊
收藏

51CTO技術(shù)棧公眾號