微服務(wù)的性能模式

【編者按】本文作者 Rohit Dhall 是一名企業(yè)架構(gòu)師,目前就職于 HCL 科技公司碱呼。 Rohit 擁有 18 年的 IT 工作經(jīng)驗(yàn)颖系,熟悉 Java/J2ee 、 P2P 辩越、 DWH 黔攒、SOA 等技術(shù)趁啸。本文介紹了五種微服務(wù)系統(tǒng)常見(jiàn)的性能挑戰(zhàn),并探討了相應(yīng)的解決策略督惰。

本文系 OneAPM 工程師編譯呈現(xiàn)不傅,以下為正文。

在IT基礎(chǔ)設(shè)施中赏胚,基于微服務(wù)架構(gòu)的系統(tǒng)變得越來(lái)越受歡迎访娶,在這種架構(gòu)中,但凡與業(yè)務(wù)相關(guān)的功能都會(huì)由多于一個(gè)的應(yīng)用組成觉阅,但是對(duì)于整個(gè)集成系統(tǒng)的性能而言震肮,這種集成也帶來(lái)了巨大的挑戰(zhàn)。在基于微服務(wù)的系統(tǒng)中留拾,功能通過(guò)多個(gè)服務(wù)組合提供戳晌,因此存在大量的集成點(diǎn)和接觸點(diǎn)。這反過(guò)來(lái)也加重了性能負(fù)擔(dān)痴柔,甚至?xí)绊懴到y(tǒng)的整體表現(xiàn)沦偎。本文主要討論一些微服務(wù)系統(tǒng)所面臨的關(guān)鍵性能挑戰(zhàn),同時(shí)也向大家介紹一些能夠幫助大家解決問(wèn)題的技術(shù)和模式咳蔚。

集成系統(tǒng)所面臨的挑戰(zhàn)

分布式計(jì)算本來(lái)就有其自身的挑戰(zhàn)豪嚎,所有這些挑戰(zhàn)不僅有據(jù)可查,而在分布式系統(tǒng)上工作的專業(yè)人士幾乎每天都在為之困擾谈火,尤其在集成環(huán)境中接觸點(diǎn)超過(guò)了「正吵扪」集成環(huán)境時(shí),情形則會(huì)更加糟糕糯耍。當(dāng)連接到應(yīng)用內(nèi)部或者遠(yuǎn)程外部系統(tǒng)中其他微服務(wù)時(shí)扔字,很多環(huán)節(jié)都可能出錯(cuò)囊嘉。例如,被連接的微服務(wù)可能非常緩慢或宕機(jī)革为,那么如果應(yīng)用程序沒(méi)有提前設(shè)計(jì)好如何處理這種情況扭粱,將會(huì)對(duì)程序的性能和穩(wěn)定性產(chǎn)生不利影響。

緩解性能挑戰(zhàn)

在本節(jié)中震檩,筆者將討論一些方法和設(shè)計(jì)策略琢蛤,幫助在基于微服務(wù)的環(huán)境中實(shí)現(xiàn)更好的性能,增強(qiáng)系統(tǒng)的彈性和整體穩(wěn)定性抛虏。

節(jié)流模式

節(jié)流是一種用于規(guī)避異常應(yīng)用的技術(shù)博其,當(dāng)異常應(yīng)用發(fā)送的請(qǐng)求超過(guò)應(yīng)用程序的處理負(fù)載時(shí),可能導(dǎo)致系統(tǒng)過(guò)載甚至崩潰迂猴。

一個(gè)實(shí)現(xiàn)節(jié)流的簡(jiǎn)單方法是限定單個(gè)應(yīng)用程序的連接數(shù)慕淡。假設(shè)有兩個(gè)廠商調(diào)用微服務(wù)從賬戶中取錢。其中一個(gè)供應(yīng)商是像亞馬遜那樣龐大的應(yīng)用错忱,那么它調(diào)用應(yīng)用的次數(shù)要比擁有小眾群體的供應(yīng)商多的多。因此挂据,可以提供這兩家廠商兩個(gè)獨(dú)立的專用「入口點(diǎn)」以清,通過(guò)節(jié)流進(jìn)行連接限制。這樣崎逃,大量來(lái)自亞馬遜的請(qǐng)求就不會(huì)妨礙第二個(gè)供應(yīng)商的請(qǐng)求掷倔。此外,也可以限制各個(gè)協(xié)作對(duì)象的請(qǐng)求頻率个绍,這樣發(fā)送請(qǐng)求的速度就不會(huì)超過(guò)微服務(wù)的處理速度了勒葱。

一般情況下,來(lái)自外部服務(wù)/系統(tǒng)的同步請(qǐng)求會(huì)通過(guò)負(fù)載均衡器巴柿、 HTTP 服務(wù)器或其他類似的入口點(diǎn)進(jìn)行節(jié)流限制凛虽。

超時(shí)

如果請(qǐng)求的微服務(wù)響應(yīng)緩慢,會(huì)使得應(yīng)用需要花費(fèi)很長(zhǎng)時(shí)間才能完成一個(gè)請(qǐng)求广恢,應(yīng)用線程在很長(zhǎng)的時(shí)間內(nèi)都處于忙碌狀態(tài)凯旋。這會(huì)對(duì)應(yīng)用程序產(chǎn)生級(jí)聯(lián)影響,導(dǎo)致應(yīng)用或服務(wù)器完全堵塞甚至失去響應(yīng)钉迷。

大多數(shù)庫(kù)(libraries)至非、 API 、框架和服務(wù)器都為各種特定的請(qǐng)求超時(shí)提供配置糠聪,只需設(shè)置讀寫請(qǐng)求超時(shí)荒椭、等待超時(shí)、連接池等待超時(shí)舰蟆、活躍會(huì)話超時(shí)等的數(shù)值即可趣惠,但這些超時(shí)需要通過(guò)適當(dāng)?shù)男阅軠y(cè)試或 SLA 驗(yàn)證才能確定狸棍。

專用線程池

另一個(gè)重要的設(shè)計(jì)是將不同的任務(wù)請(qǐng)求或不同的微服務(wù)連接放到獨(dú)立的線程池中,就像Bulkheads那樣對(duì)資源進(jìn)行隔離信卡。大家不妨設(shè)想一下這樣的場(chǎng)景隔缀,在應(yīng)用流中需要使用 REST 通過(guò) HTTP 連接五個(gè)不同的微服務(wù),也可以使用一個(gè)普通的線程池去維持這些連接傍菇,如果其中某個(gè)服務(wù)因?yàn)槟撤N原因出現(xiàn)異常猾瘸,那么池內(nèi)所有的微服務(wù)都會(huì)受到牽連。為了最大限度地減少這種異常的負(fù)面影響丢习,將單獨(dú)的服務(wù)放進(jìn)專門的線程池顯然是更明智的做法牵触。這不僅可以減少某個(gè)異常對(duì)其他服務(wù)的影響,還能保證應(yīng)用程序的其他部分繼續(xù)正常地工作咐低。

這種模式通常被稱為Bulkheads模式揽思。下圖描述了該模式的示例場(chǎng)景:在左側(cè),微服務(wù) A 用同一個(gè)連接池去請(qǐng)求 X 和 Y 兩個(gè)服務(wù)见擦。如果服務(wù) X 或 Y 其中任何一個(gè)行為異常钉汗,都將影響連接池的整體表現(xiàn)。如果采用Bulkheads模式鲤屡,如該圖右側(cè)所示损痰,即使微服務(wù) X 被錯(cuò)誤操作,也只有 X 池受到影響酒来,微服務(wù) Y 還可以繼續(xù)正常地為應(yīng)用程序提供服務(wù)卢未。

此處輸入圖片的描述
此處輸入圖片的描述

Circuit Breakers

Circuit Breakers是一種設(shè)計(jì)模式,可以用來(lái)減少任何下游不可訪問(wèn)或故障對(duì)系統(tǒng)整體的影響堰汉。Circuit Breakers用于檢查外部系統(tǒng)/服務(wù)的可用性辽社,一旦外部系統(tǒng)或服務(wù)宕機(jī),應(yīng)用程序就可以避免再次發(fā)送請(qǐng)求到這些外部系統(tǒng)翘鸭。這種做法其實(shí)也是一種安全措施滴铅,可以避免超時(shí)或Bulkheads模式因某些故障而導(dǎo)致的不必要超時(shí)。如果下游系統(tǒng)宕機(jī)就乓,請(qǐng)求就沒(méi)必要一直等待直至響應(yīng)超時(shí)失息,之后再收到超時(shí)異常的響應(yīng)。相反档址,當(dāng)下游系統(tǒng)處于宕機(jī)過(guò)程時(shí)盹兢,Circuit Breakers讓請(qǐng)求不再嘗試連接,進(jìn)而大大地縮減了響應(yīng)時(shí)間守伸。

Circuit Breakers有內(nèi)置的邏輯來(lái)對(duì)外部系統(tǒng)進(jìn)行必要的健康檢查绎秒,從而確保這些系統(tǒng)正常工作后再開始轉(zhuǎn)發(fā)請(qǐng)求。

異步集成

解耦各個(gè)微服務(wù)之間的通信可以避免多數(shù)的集成性能問(wèn)題尼摹,異步集成方法是一種解耦機(jī)制见芹。如果系統(tǒng)是基于微服務(wù)系統(tǒng)設(shè)計(jì)的剂娄,而且各個(gè)微服務(wù)之間都是點(diǎn)到點(diǎn)的集成,那就需要認(rèn)真思考如何實(shí)現(xiàn)解耦了玄呛。任何標(biāo)準(zhǔn)的消息代理系統(tǒng)都可用于提供發(fā)布—訂閱功能阅懦。

總結(jié)

本文主要向大家介紹了集成到基于微服務(wù)的框架系統(tǒng)所面臨的一些性能挑戰(zhàn),同時(shí)也提出了一些幫助大家避免上述的性能問(wèn)題的系統(tǒng)模式徘铝,簡(jiǎn)而言之耳胎,在考慮模式時(shí),異步集成的方法應(yīng)該是首選惕它,而其他設(shè)計(jì)模式可以根據(jù)具體的集成場(chǎng)景進(jìn)行選擇怕午,從而避免下游系統(tǒng)異常引起的級(jí)聯(lián)副作用,幫助大家更好地解決集成系統(tǒng)的性能挑戰(zhàn)淹魄。

OneAPM 為您提供端到端的 Java 應(yīng)用性能解決方案郁惜,我們支持所有常見(jiàn)的 Java 框架及應(yīng)用服務(wù)器,助您快速發(fā)現(xiàn)系統(tǒng)瓶頸甲锡,定位異常根本原因兆蕉。分鐘級(jí)部署,即刻體驗(yàn)缤沦,Java 監(jiān)控從來(lái)沒(méi)有如此簡(jiǎn)單虎韵。想閱讀更多技術(shù)文章,請(qǐng)?jiān)L問(wèn) OneAPM官方技術(shù)博客 疚俱。
本文轉(zhuǎn)自 OneAPM 官方博客
原文鏈接:https://dzone.com/articles/performance-patterns-in-microservices-based-integr

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末劝术,一起剝皮案震驚了整個(gè)濱河市缩多,隨后出現(xiàn)的幾起案子呆奕,更是在濱河造成了極大的恐慌,老刑警劉巖衬吆,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梁钾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡逊抡,警方通過(guò)查閱死者的電腦和手機(jī)姆泻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冒嫡,“玉大人拇勃,你說(shuō)我怎么就攤上這事⌒⒘瑁” “怎么了方咆?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蟀架。 經(jīng)常有香客問(wèn)我瓣赂,道長(zhǎng)榆骚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任煌集,我火速辦了婚禮妓肢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苫纤。我一直安慰自己碉钠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布方面。 她就那樣靜靜地躺著放钦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恭金。 梳的紋絲不亂的頭發(fā)上操禀,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音横腿,去河邊找鬼颓屑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耿焊,可吹牛的內(nèi)容都是我干的揪惦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼罗侯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼器腋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起钩杰,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纫塌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后讲弄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體措左,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年避除,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怎披。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓶摆,死狀恐怖凉逛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情群井,我是刑警寧澤状飞,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響昔瞧,放射性物質(zhì)發(fā)生泄漏指蚁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一自晰、第九天 我趴在偏房一處隱蔽的房頂上張望凝化。 院中可真熱鬧,春花似錦酬荞、人聲如沸搓劫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)枪向。三九已至,卻和暖如春咧党,著一層夾襖步出監(jiān)牢的瞬間秘蛔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工傍衡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留深员,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓蛙埂,卻偏偏與公主長(zhǎng)得像倦畅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绣的,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • “微服務(wù)架構(gòu)”這一術(shù)語(yǔ)在前幾年橫空出世叠赐,用于描述這樣一種特定的軟件設(shè)計(jì)方法,即以若干組可獨(dú)立部署的服務(wù)的方式進(jìn)行軟...
    ThoughtWorks閱讀 16,890評(píng)論 1 71
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理屡江,服務(wù)發(fā)現(xiàn)芭概,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 摘要:本文中盼理,我們將進(jìn)一步理解微服務(wù)架構(gòu)的核心要點(diǎn)和實(shí)現(xiàn)原理谈山,為讀者的實(shí)踐提供微服務(wù)的設(shè)計(jì)模式俄删,以期讓微服務(wù)在讀者...
    Java架構(gòu)師Carl閱讀 5,748評(píng)論 0 20
  • 微軟AzureCAT模式和實(shí)踐團(tuán)隊(duì)發(fā)布了9個(gè)新的設(shè)計(jì)模式宏怔。這9個(gè)設(shè)計(jì)模式在設(shè)計(jì)和實(shí)現(xiàn)微服務(wù)時(shí)很有用。 下圖展示了這...
    zlup閱讀 2,067評(píng)論 0 2
  • 前段時(shí)間一個(gè)高一同學(xué)問(wèn)我借錢畴椰。 我們之前是處于畢業(yè)以后就不怎么聯(lián)系的狀態(tài)臊诊,有一次我看到他發(fā)的關(guān)于炒股的狀態(tài),就主動(dòng)...
    青溪長(zhǎng)閱讀 161評(píng)論 0 0