有了這三個(gè)錦囊,再也不用擔(dān)心微服務(wù)治理了

原標(biāo)題:有了這三個(gè)錦囊,再也不用擔(dān)心微服務(wù)治理了

微服務(wù)作為云原生時(shí)代的重要IT理念,正在眾多企業(yè)中實(shí)踐應(yīng)用。隨之而來的問題是,采用什么樣的微服務(wù)治理策略,能夠確保微服務(wù)架構(gòu)的可用性、敏捷性?為此,百度智能云從運(yùn)維者的角度,編寫了3個(gè)錦囊妙計(jì),確保每一個(gè)微服務(wù)都能在正確的“位置”高效運(yùn)行。

這三個(gè)錦囊分別是:路由、限流和熔斷。不過,在討論微服務(wù)治理之前,我們可以先明確一下微服務(wù)的定義。

用積木來理解微服務(wù)治理

業(yè)界對(duì)微服務(wù)有很多種定義,其核心思想都大同小異。這里引述一下最早提出微服務(wù)定義的James Lewis 和 Martin Fowler關(guān)于微服務(wù)架構(gòu)的闡述。

定義:“將單個(gè)應(yīng)用程序拆分成多個(gè)獨(dú)立運(yùn)行的小型服務(wù);服務(wù)間基于輕量級(jí)機(jī)制通信,比如基于Http協(xié)議的Restful API;每個(gè)服務(wù)承擔(dān)獨(dú)立的業(yè)務(wù)功能,并且能夠獨(dú)立部署;服務(wù)通過去中心化的方式進(jìn)行管理;服務(wù)可以各自使用不同的編程語言,并使用不同的數(shù)據(jù)存儲(chǔ)技術(shù)?!?/p>

其實(shí)我們可以再“翻譯”一下,將開發(fā)一個(gè)微服務(wù)架構(gòu)的應(yīng)用程序比喻成搭建一個(gè)樂高機(jī)器人,那么微服務(wù)架構(gòu)如下。

  • 將一個(gè)完整的機(jī)器人,拆分成很多個(gè)可以獨(dú)立使用的樂高積木塊
  • 積木塊之間不需要通過膠水黏合,而是使用可以隨時(shí)插拔的標(biāo)準(zhǔn)接口
  • 每個(gè)積木塊都承擔(dān)獨(dú)立的功能,比如說用來組成頭部、起到連接作用等
  • 任意兩塊積木都可以直接拼接,不需要一個(gè)“集成板”之類的中間組件
  • 每塊積木只需要提供標(biāo)準(zhǔn)的接口即可,材料、顏色和大小等都可以各不相同

這樣一來,微服務(wù)架構(gòu)的優(yōu)勢(shì)也就一目了然:任何一個(gè)服務(wù)都是可以替換的,單個(gè)服務(wù)的損壞不會(huì)導(dǎo)致整個(gè)系統(tǒng)的崩潰,同時(shí)整個(gè)系統(tǒng)的可擴(kuò)展性也得到了大大提升,可以在不破壞系統(tǒng)運(yùn)行的前提下隨時(shí)進(jìn)行服務(wù)的增減和升級(jí)。

當(dāng)我們系統(tǒng)中的服務(wù)數(shù)量越來越多,服務(wù)之間的組合關(guān)系越來越復(fù)雜時(shí),如何高效地管理這些服務(wù),以確保每個(gè)服務(wù)都在正確的“位置”運(yùn)行,并且隨時(shí)替換或者升級(jí)某些“損壞”的服務(wù)呢?

這就是百度智能云CNAP(云原生微服務(wù)應(yīng)用平臺(tái))為微服務(wù)架構(gòu)的運(yùn)維者提供了3個(gè)錦囊妙計(jì)的初衷。

錦囊一:用路由控制流量

CNAP中的【路由】規(guī)則用于管理服務(wù)間的通信鏈路。微服務(wù)的管理其實(shí)比搭建樂高積木更復(fù)雜,因?yàn)橐粔K樂高積木最多與和它相鄰的幾塊積木拼接,但是一個(gè)系統(tǒng)中的服務(wù)卻可以與系統(tǒng)中任意一個(gè)其它服務(wù)產(chǎn)生通信。

通過合理配置路由,可以解決微服務(wù)架構(gòu)中的兩個(gè)問題:

1、讓服務(wù)A訪問正確的服務(wù)B,就好比積木A用來組成頭部,那它就應(yīng)該與組成身體的積木B拼接,而不應(yīng)該錯(cuò)誤拼接到組成手臂的積木C上。

2、服務(wù)間通過正確的實(shí)例互相訪問。一個(gè)服務(wù)往往會(huì)同時(shí)運(yùn)行在多個(gè)實(shí)例上(實(shí)例即物理資源的單位),就像一塊樂高積木上通常會(huì)有很多個(gè)接口。那么路由規(guī)則可以指定當(dāng)服務(wù)A訪問服務(wù)B時(shí),流量應(yīng)該具體從服務(wù)A的哪些實(shí)例出發(fā),流入到服務(wù)B的哪些實(shí)例中去

如上圖所示,路由規(guī)則主要由【流量來源】和【流量目的】兩部分組成。和拼裝樂高積木一樣,我們通常會(huì)拿起一個(gè)積木A(流量目的),然后去系統(tǒng)中找另外一個(gè)需要拼接到A上面的積木B(流量來源)。

流量來源即訪問發(fā)起的服務(wù),我們通常稱之為Consumer(服務(wù)消費(fèi)者)。需要先通過服務(wù)名找到所需的Consumer,然后通過一組篩選規(guī)則來定位Consumer上產(chǎn)生流量的一組具體實(shí)例。

流量目的即接受訪問的服務(wù),我們通常稱之為Provider(服務(wù)提供者)。Provider在一條路由規(guī)則中是不變的(就是我們先拿到手上的那塊積木),只需要通過篩選規(guī)則來定位接受流量的一組實(shí)例。由于流量最終要被分配到某個(gè)具體實(shí)例中,所以路由規(guī)則中還需要指定流量分配的策略和權(quán)重(比如可根據(jù)實(shí)例負(fù)載情況分配流量權(quán)重)。

有了路由規(guī)則,服務(wù)間就可以通過正確的方式互相訪問,“頭部”可以拼接到“身體”,“身體”可以連接到“四肢”,從而在龐大復(fù)雜的微服務(wù)架構(gòu)中建立起井然有序的拓?fù)潢P(guān)系。

錦囊二:合理制定限流規(guī)則

樂高積木的拼接僅僅是物理上的連接,但是微服務(wù)之間一旦建立起路由,就意味著會(huì)有數(shù)據(jù)在服務(wù)之間流通。由于不同服務(wù)可以提供的資源和對(duì)數(shù)據(jù)流量的承載能力不盡相同,為了防止單個(gè)Consumer占用Provider過多的資源,或者突發(fā)的大流量沖擊導(dǎo)致Provider故障。CNAP的【限流】規(guī)則用來限定從Consumer到Provider訪問流量,起到保護(hù)Provider服務(wù)的作用。

限流規(guī)則分為【流量來源】和【限流對(duì)象】兩部分。流量來源規(guī)定了從哪些服務(wù)或者哪些實(shí)例產(chǎn)生的流量需要被限制,可以通過多個(gè)篩選條件來確認(rèn)一組實(shí)例。限流對(duì)象則用來配置所選Provider中接收流量的具體實(shí)例和方法(方法在服務(wù)中用來對(duì)請(qǐng)求進(jìn)行處理,一個(gè)方法往往用來實(shí)現(xiàn)一個(gè)具體的業(yè)務(wù)邏輯),并且限定該方法可以接收來自流量來源的請(qǐng)求QPS上限。

限流規(guī)則就像是城市路網(wǎng)中的交通管制,通過對(duì)不同路段不同車道限制單位時(shí)間通行車輛數(shù),保障整個(gè)交通路網(wǎng)的健康運(yùn)轉(zhuǎn)。合理地配置限流規(guī)則,可以讓服務(wù)資源能夠更加合理地分配給不同的請(qǐng)求者,也預(yù)防了流量波動(dòng)可能引發(fā)的服務(wù)故障甚至宕機(jī)。

錦囊三:熔斷降級(jí)防止“雪崩”

在服務(wù)治理中,雖然我們可以通過限流規(guī)則盡量避免服務(wù)承受過高的流量,但是在實(shí)際生產(chǎn)中服務(wù)故障依然難以完全避免。當(dāng)整個(gè)系統(tǒng)中當(dāng)某些服務(wù)產(chǎn)生故障時(shí),如果不及時(shí)采取措施,這種故障就有可能因?yàn)榉?wù)之間的互相訪問而被傳播開來,最終導(dǎo)致故障規(guī)模的擴(kuò)大,甚至導(dǎo)致整個(gè)系統(tǒng)奔潰,這種現(xiàn)象我們稱之為“雪崩”。

熔斷降級(jí)其實(shí)不只是服務(wù)治理中,在金融行業(yè)也有很廣泛的應(yīng)用。比如當(dāng)股指的波動(dòng)幅度超過規(guī)定的熔斷點(diǎn)時(shí),交易所為了控制風(fēng)險(xiǎn)采取的暫停交易措施。CNAP提供了服務(wù)熔斷降級(jí)的能力,用來避免微服務(wù)架構(gòu)中因?yàn)樯倭糠?wù)故障而引發(fā)的服務(wù)“雪崩”。

與路由和限流不同,熔斷規(guī)則是在預(yù)先選定了Consumer后,配置該Consumer在不同Provider發(fā)生故障時(shí)的熔斷策略。因此熔斷對(duì)象(即Consumer)是固定的,需要通過一組篩選條件指定該Consumer中發(fā)起請(qǐng)求的實(shí)例,然后選擇需要熔斷的Provider服務(wù)以及該服務(wù)提供的具體方法。

CNAP支持自動(dòng)熔斷和手動(dòng)熔斷,在設(shè)置自動(dòng)熔斷的情況下,可以根據(jù)指定的熔斷條件觸發(fā)時(shí)(如在某個(gè)時(shí)間窗口內(nèi)異常返回超過某個(gè)比例),自動(dòng)熔斷一段時(shí)間內(nèi)從Consumer到Provider之間的所有流量,從而實(shí)現(xiàn)對(duì)Consumer的保護(hù)。

熔斷機(jī)制是微服務(wù)架構(gòu)中的“交通管制”,一旦高速公路上發(fā)生交通事故時(shí)立即對(duì)某個(gè)路段或車道進(jìn)行封禁,從而避免事故進(jìn)一步擴(kuò)大。合理利用熔斷規(guī)則可以大大提升整個(gè)微服務(wù)架構(gòu)的健壯性,降低系統(tǒng)性風(fēng)險(xiǎn)和可能發(fā)生的事故規(guī)模。

結(jié)束語:更多功能正在上線

路由、限流、熔斷,這三個(gè)百度智能云所提供的微服務(wù)治理錦囊你是否已經(jīng)查收了呢?其實(shí)這還只是CNAP的微服務(wù)治理能力中的冰山一角,我們還有微服務(wù)的監(jiān)控與報(bào)警、服務(wù)拓?fù)渑c鏈路查詢、異常請(qǐng)求分析等大量功能可以幫助你搭建更加強(qiáng)大的微服務(wù)架構(gòu)。

極客網(wǎng)企業(yè)會(huì)員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2019-09-05
有了這三個(gè)錦囊,再也不用擔(dān)心微服務(wù)治理了
Provider在一條路由規(guī)則中是不變的(就是我們先拿到手上的那塊積木),只需要通過篩選規(guī)則來定位接受流量的一組實(shí)例。

長按掃碼 閱讀全文