亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[譯] 設(shè)計一個容錯的微服務(wù)架構(gòu)

raledong / 3298人閱讀

摘要:微服務(wù)架構(gòu)的風(fēng)險微服務(wù)架構(gòu)將應(yīng)用程序邏輯移動到服務(wù),并使用網(wǎng)絡(luò)層在它們之間進(jìn)行通信。在微服務(wù)架構(gòu)中,服務(wù)依賴于彼此。您始終只能部署其中一個,并且在驗證新版本是否符合預(yù)期之后才,將負(fù)載均衡器指向新的。

[譯] 設(shè)計一個容錯的微服務(wù)架構(gòu)

摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog

原文地址

https://blog.risingstack.com/designing-microservices-architecture-for-failure/


微服務(wù)架構(gòu)使得可以通過明確定義的服務(wù)邊界來隔離故障。但是像在每個分布式系統(tǒng)中一樣,發(fā)生網(wǎng)絡(luò)、硬件、應(yīng)用級別的錯誤都是很常見的。由于服務(wù)依賴關(guān)系,任何組件可能暫時無法提供服務(wù)。為了盡量減少部分中斷的影響,我們需要構(gòu)建容錯服務(wù),來優(yōu)雅地處理這些中斷的響應(yīng)結(jié)果。

本文介紹了基于RisingStack 的 Node.js 咨詢和開發(fā)經(jīng)驗構(gòu)建和操作高可用性微服務(wù)系統(tǒng)的最常見技術(shù)和架構(gòu)模式。

如果你不熟悉本文中的模式,那并不一定意味著你做錯了。建立可靠的系統(tǒng)總是會帶來額外的成本。

微服務(wù)架構(gòu)的風(fēng)險

微服務(wù)架構(gòu)將應(yīng)用程序邏輯移動到服務(wù),并使用網(wǎng)絡(luò)層在它們之間進(jìn)行通信。這種通過網(wǎng)絡(luò)間通信代替單應(yīng)用程序內(nèi)調(diào)用的做法,會帶來額外的延遲,以及需要協(xié)調(diào)多個物理和邏輯組件的系統(tǒng)復(fù)雜度。分布式系統(tǒng)的復(fù)雜性增加也將導(dǎo)致更高的網(wǎng)絡(luò)故障率。

微服務(wù)體系結(jié)構(gòu)的最大優(yōu)勢之一是,團(tuán)隊可以獨立設(shè)計,開發(fā)和部署他們的服務(wù)。他們對服務(wù)的生命周期擁有完全的所有權(quán)。這也意味著團(tuán)隊無法控制他們依賴的服務(wù),因為它更有可能由不同的團(tuán)隊管理。使用微服務(wù)架構(gòu),我們需要記住,提供者服務(wù)可能會臨時不可用,由于其他人員發(fā)行的錯誤版本,配置以及其他更改等。

優(yōu)雅的服務(wù)降級

微服務(wù)架構(gòu)的最大優(yōu)點之一是您可以隔離故障,并在當(dāng)組件多帶帶故障時,進(jìn)行優(yōu)雅的服務(wù)降級。 例如,在中斷期間,照片共享應(yīng)用程序中的客戶可能無法上傳新圖片,但仍可以瀏覽,編輯和共享其現(xiàn)有照片。

微服務(wù)容錯隔離

在大多數(shù)情況下,由于分布式系統(tǒng)中的應(yīng)用程序相互依賴,因此很難實現(xiàn)這種優(yōu)雅的服務(wù)降級,您需要應(yīng)用幾種故障轉(zhuǎn)移的邏輯(其中一些將在本文后面介紹),以為暫時的故障和中斷做準(zhǔn)備。

服務(wù)間彼此依賴,再沒有故障轉(zhuǎn)移邏輯下,服務(wù)全部失敗。

變更管理

Google的網(wǎng)站可靠性小組發(fā)現(xiàn),大約70%的中斷是由現(xiàn)有系統(tǒng)的變化引起的。當(dāng)您更改服務(wù)中的某些內(nèi)容時,您將部署新版本的代碼或更改某些配置 - 這總有可能會造成故障,或者引入新的bug。

在微服務(wù)架構(gòu)中,服務(wù)依賴于彼此。這就是為什么你應(yīng)該盡量減少故障并限制它的負(fù)面影響。要處理變更中的問題,您可以實施變更管理策略和自動回滾機(jī)制。

例如,當(dāng)您部署新代碼或更改某些配置時,您應(yīng)該先小范圍的進(jìn)行部分的替換,以漸進(jìn)式的方式替換服務(wù)的全部實例。在這期間,需要監(jiān)視它們,如果您發(fā)現(xiàn)它們對您的關(guān)鍵指標(biāo)有負(fù)面影響,應(yīng)立即進(jìn)行服務(wù)回滾,這稱為“金絲雀部署”。

變更管理 - 回滾部署

另一個解決方案可能是您運行兩個生產(chǎn)環(huán)境。您始終只能部署其中一個,并且在驗證新版本是否符合預(yù)期之后才,將負(fù)載均衡器指向新的。這稱為藍(lán)綠或紅黑部署。

回滾代碼不是壞事。你不應(yīng)該在生產(chǎn)中遺留錯誤的代碼,然后考慮出了什么問題。如果必要,越早回滾你的代碼越好。

健康檢查與負(fù)載均衡

實例由于出現(xiàn)故障、部署或自動縮放的情況,會進(jìn)行持續(xù)啟動、重新啟動或停止操作。它可能導(dǎo)致它們暫時或永久不可用。為避免問題,您的負(fù)載均衡器應(yīng)該從路由中跳過不健康的實例,因為它們當(dāng)前無法為客戶或子系統(tǒng)提供服務(wù)。

應(yīng)用實例健康狀況可以通過外部觀察來確定。您可以通過重復(fù)調(diào)用GET /health端點或通過自我報告來實現(xiàn)?,F(xiàn)在主流的服務(wù)發(fā)現(xiàn)解決方案,會持續(xù)從實例中收集健康信息,并配置負(fù)載均衡器,將流量僅路由到健康的組件上。

自我修復(fù)

自我修復(fù)可以幫助應(yīng)用程序從錯誤中恢復(fù)過來。當(dāng)應(yīng)用程序可以采取必要步驟從故障狀態(tài)恢復(fù)時,我們就可以說它是可以實現(xiàn)自我修復(fù)的。在大多數(shù)情況下,它由外部系統(tǒng)實現(xiàn),該系統(tǒng)會監(jiān)視實例運行狀況,并在較長時間內(nèi)處于故障狀態(tài)時重新啟動它們。自我修復(fù)在大多數(shù)情況下是非常有用的。但是在某些情況下,持續(xù)地重啟應(yīng)用程序可能會導(dǎo)致麻煩。 當(dāng)您的應(yīng)用程序由于超負(fù)荷或其數(shù)據(jù)庫連接超時而無法給出健康的運行狀況時,這種情況下的頻繁的重啟就可能就不太合適了。

對于這種特殊的場景(如丟失的數(shù)據(jù)庫連接),要實現(xiàn)滿足它的高級自我修復(fù)的解決方案可能很棘手。在這種情況下,您需要為應(yīng)用程序添加額外的邏輯來處理邊緣情況,并讓外部系統(tǒng)知道實例不需要立即重新啟動。

故障轉(zhuǎn)移緩存

由于網(wǎng)絡(luò)問題和我們系統(tǒng)的變化,服務(wù)經(jīng)常會失敗。然而,由于自我修復(fù)和負(fù)載均衡的保障,它們中的大多數(shù)中斷是臨時的,我們應(yīng)該找到一個解決方案,使我們的服務(wù)在這些故障時服務(wù)仍就可以工作。這就是故障轉(zhuǎn)移緩存的作用,它可以幫助并為我們的應(yīng)用程序在服務(wù)故障時提供必要的數(shù)據(jù)。

故障轉(zhuǎn)移緩存通常使用兩個不同的到期日期; 較短的時間告訴您在正常情況下緩存可以使用的過期時間,而較長的時間可以在服務(wù)故障時緩存依舊可用的過期時間。

故障轉(zhuǎn)移緩存

請務(wù)必提及,只有當(dāng)服務(wù)使用過時的數(shù)據(jù)比沒有數(shù)據(jù)更好時,才能使用故障轉(zhuǎn)移緩存。

要設(shè)置緩存和故障轉(zhuǎn)移緩存,可以在 HTTP 中使用標(biāo)準(zhǔn)響應(yīng)頭。

例如,使用 max-age 屬性可以指定資源被視為有效的最大時間。使用 stale-if-error 屬性,您可以明確在出現(xiàn)故障的情況下,依舊可以從緩存中獲取資源的最大時間。

現(xiàn)代的 CDN 和負(fù)載均衡器都提供各種緩存和故障轉(zhuǎn)移行為,但您也可以為擁有標(biāo)準(zhǔn)可靠性解決方案的公司創(chuàng)建一個共享庫。

重試邏輯

在某些情況下,我們無法緩存數(shù)據(jù),或者我們想對其進(jìn)行更改,但是我們的操作最終都失敗了。對于此,我們可以重試我們的操作,因為我們可以預(yù)期資源將在一段時間后恢復(fù),或者我們的負(fù)載均衡器將請求發(fā)送到了健康的實例上。

您應(yīng)該小心地為您的應(yīng)用程序和客戶端添加重試邏輯,因為大量的重試可能會使事情更糟,甚至阻止應(yīng)用程序恢復(fù),如當(dāng)服務(wù)超載時,大量的重試只能使?fàn)顩r更糟。

在分布式系統(tǒng)中,微服務(wù)系統(tǒng)重試可以觸發(fā)多個其他請求或重試,并啟動級聯(lián)效應(yīng)。為了最小化重試的影響,您應(yīng)該限制它們的數(shù)量,并使用指數(shù)退避算法來持續(xù)增加重試之間的延遲,直到達(dá)到最大限制。

當(dāng)客戶端(瀏覽器,其他微服務(wù)等)發(fā)起重試,并且客戶端不知道在處理請求之前或之后操作失敗時,您應(yīng)該為你的應(yīng)用程序做好冪等處理的準(zhǔn)備。例如,當(dāng)您重試購買操作時,您不應(yīng)該再次向客戶收取費用。為每個交易使用唯一的冪等值鍵可以幫助處理重試。

限流器和負(fù)載降級

流量限制是在一段時間內(nèi)定義特定客戶或應(yīng)用程序可以接收或處理多少個請求的技術(shù)。例如,通過流量限制,您可以過濾掉造成流量峰值的客戶和服務(wù),或者您可以確保您的應(yīng)用程序在自動縮放無法滿足時,依然不會超載。

您還可以阻止較低優(yōu)先級的流量,為關(guān)鍵事務(wù)提供足夠的資源。

限流器可以阻止流量峰值產(chǎn)生

有一個不同類型的限流器,叫做并發(fā)請求限制器。當(dāng)您有重要的端點,您不應(yīng)該被調(diào)用超過指定的次數(shù),而您仍然想要能提供服務(wù)時,這將是有用的。

負(fù)載降級的一系列使用,可以確??偸怯凶銐虻馁Y源來提供關(guān)鍵交易。它為高優(yōu)先級請求保留一些資源,不允許低優(yōu)先級的事務(wù)使用它們。負(fù)載降級開關(guān)是根據(jù)系統(tǒng)的整體狀態(tài)做出決定,而不是基于單個用戶的請求量大小。負(fù)載降級有助于您的系統(tǒng)恢復(fù),因為當(dāng)你有一個偶發(fā)事件時(可能是一個熱點事件),您仍能保持核心功能的正常工作。

要了解有關(guān)限流器和負(fù)載降級的更多信息,我建議查看這篇Stripe的文章。

快速失敗原則與獨立性

在微服務(wù)架構(gòu)中,我們想要做到讓我們的服務(wù)具備快速失敗與相互獨立的能力。為了在服務(wù)級別上進(jìn)行故障隔離,我們可以使用艙壁模式。你可以在本文的后面閱讀更多有關(guān)艙壁的內(nèi)容。

我們也希望我們的組件能夠快速失敗,因為我們不希望對于有故障的服務(wù),在請求超時后才斷開。沒有什么比掛起的請求和無響應(yīng)的 UI 更令人失望。這不僅浪費資源,而且還會影響用戶體驗。我們的服務(wù)在調(diào)用鏈中是相互調(diào)用的,所以在這些延遲累加之前,我們應(yīng)該特別注意防止掛起操作。

你想到的第一個想法是對每個服務(wù)調(diào)用都設(shè)置明確的超時等級。這種方法的問題是,您不能知道真正合理的超時值是多少,因為網(wǎng)絡(luò)故障和其他問題發(fā)生的某些情況只會影響一兩次操作。在這種情況下,如果只有其中一些超時,您可能不想拒絕這些請求。

我們可以說,在微服務(wù)種通過使用超時來達(dá)到快速失敗的效果是一種反模式的,你應(yīng)該避免使用它。取而代之,您可以應(yīng)用斷路器模式,依據(jù)操作的成功與失敗統(tǒng)計數(shù)據(jù)決定。

艙壁模式

工業(yè)中使用艙壁將船舶劃分為幾個部分,以便在船體破壞的情況下,可以將船舶各個部件密封起來。

艙壁的概念在軟件開發(fā)中可以被應(yīng)用在隔離資源上。

通過應(yīng)用艙壁模式,我們可以保護(hù)有限的資源不被耗盡。例如,對于一個有連接數(shù)限制的數(shù)據(jù)庫實例來說,如果我們有兩種連接它的操作,我們采用可以采用兩個連接池的方式進(jìn)行連接,來代替僅采用一個共享連接池的方式。由于這種客戶端與資源進(jìn)行了隔離,超時或過度使用池的操作頁不會使其他操作失敗。

泰坦尼克號沉沒的主要原因之一是其艙壁設(shè)計失敗,水可以通過上面的甲板倒在艙壁的頂部,導(dǎo)致整個船體淹沒。

泰坦尼克號艙壁設(shè)計(無效的設(shè)計)

斷路器

為了限制操作的持續(xù)時間,我們可以使用超時。超時可以防止掛起操作并保持系統(tǒng)響應(yīng)。然而,在微服務(wù)中使用靜態(tài)、精細(xì)的超時是一種反模式,因為我們處于高度動態(tài)的環(huán)境中,幾乎不可能提出在每種情況下都能正常工作的正確的時間限制。

替代這種靜態(tài)超時的手段是,我們可以使用斷路器來處理錯誤。斷路器以現(xiàn)實世界的電子元件命名,因為它們的作用是相同的。您可以保護(hù)資源,并幫助他們使用斷路器進(jìn)行恢復(fù)。它們在分布式系統(tǒng)中非常有用,因為在分布式系統(tǒng)中,重復(fù)故障可能導(dǎo)致雪球效應(yīng)并使整個系統(tǒng)癱瘓。

當(dāng)特定類型的錯誤在短時間內(nèi)多次發(fā)生時,斷路器會被斷開。開路的斷路器可以防止進(jìn)一步的請求 - 就像我們平時所說的電路跳閘一樣。斷路器通常在一定時間后關(guān)閉,在這期間可以為底層服務(wù)提供足夠的空間來恢復(fù)。

請記住,并不是所有的錯誤都應(yīng)該觸發(fā)斷路器。例如,您可能希望跳過客戶端問題,例如具有4xx響應(yīng)代碼的請求,但不包括5xx服務(wù)器端故障。一些斷路器也具有半開狀態(tài)。在這種狀態(tài)下,服務(wù)發(fā)送第一個請求以檢查系統(tǒng)可用性,同時讓其他請求失敗。如果這個第一個請求成功,它將使斷路器恢復(fù)到關(guān)閉狀態(tài)并使流量流動。否則,它保持打開。

斷路器

測試故障

您應(yīng)該不斷測試您系統(tǒng)的常見問題,以確保您的服務(wù)可以抵抗各種故障。您應(yīng)經(jīng)常測試故障,讓您的團(tuán)隊具備故障處理的能力。

對于測試,您可以使用外部服務(wù)來標(biāo)識實例組,并隨機(jī)終止此組中的一個實例。這樣,您可以準(zhǔn)備單個實例故障,但您甚至可以關(guān)閉整個區(qū)域來模擬云提供商的故障。

最流行的測試解決方案之一是 Netflix 的 ChaosMonkey 彈性工具。

結(jié)尾

實施和運行可靠的服務(wù)并不容易。 您需要付出很多努力,同時公司也要有相應(yīng)的財力投入。

可靠性有很多層次和方面,因此找到最適合您團(tuán)隊的解決方案很重要。您應(yīng)該使可靠性成為您的業(yè)務(wù)決策流程中的一個因素,并為其分配足夠的預(yù)算和時間。

主要收獲

動態(tài)環(huán)境和分布式系統(tǒng)(如微服務(wù))會導(dǎo)致更高的故障機(jī)率;

服務(wù)應(yīng)該做到故障隔離,到達(dá)優(yōu)雅降級,來提升用戶體驗;

70%的中斷是由變化引起的,代碼回滾不是一件壞事;

做到服務(wù)快速失敗與獨立性。團(tuán)隊是無法控制他們所依賴的服務(wù)情況;

緩存、艙壁、斷路器和限流器等架構(gòu)模式與技術(shù)有助于構(gòu)建可靠的微服務(wù)架構(gòu)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/11785.html

相關(guān)文章

  • 網(wǎng)易容器云平臺的微服務(wù)化實踐(一)

    摘要:本文是網(wǎng)易容器云平臺的微服務(wù)化實踐系列文章的第一篇。網(wǎng)易容器云平臺的前身是網(wǎng)易應(yīng)用自動部署平臺,它能夠利用云提供的基礎(chǔ)設(shè)施,實現(xiàn)包括構(gòu)建和部署一體化在內(nèi)的整個應(yīng)用生命周期管理。目前網(wǎng)易云容器服務(wù)團(tuán)隊以的方式管理著微服務(wù),每周構(gòu)建部署次數(shù)。 此文已由作者馮常健授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗。 摘要:網(wǎng)易云容器平臺期望能給實施了微服務(wù)架構(gòu)的團(tuán)隊提供完...

    zhjx922 評論0 收藏0
  • 架構(gòu)師必收藏的干貨?。?!

    摘要:一微服務(wù)概念微服務(wù)體系結(jié)構(gòu)由輕量級松散耦合的服務(wù)集合組成。每個服務(wù)都有自己的計劃測試發(fā)布部署擴(kuò)展集成和獨立維護(hù)。團(tuán)隊不必因為過去的技術(shù)決定而受到懲罰。用在這里是指將相關(guān)的服務(wù)通過聚合器聚合在一起,這個聚合器就是門面。 微服務(wù)架構(gòu)現(xiàn)在是談到企業(yè)應(yīng)用架構(gòu)時必聊的話題,微服務(wù)之所以火熱也是因為相對之前的應(yīng)用開發(fā)方式有很多優(yōu)點,如更靈活、更能適應(yīng)現(xiàn)在需求快速變更的大環(huán)境。 一、微服務(wù)概念 微服...

    shiweifu 評論0 收藏0
  • 服務(wù)實戰(zhàn):從架構(gòu)到發(fā)布(二)

    摘要:微服務(wù)架構(gòu)著重培養(yǎng)通用可重用的服務(wù)。服務(wù)注冊和發(fā)現(xiàn)微服務(wù)架構(gòu)下,有大量的微服務(wù)需要處理。網(wǎng)關(guān)也是獲得微服務(wù)狀態(tài)監(jiān)控信息的中心。實際情況是,微服務(wù)和其它企業(yè)架構(gòu)并存。 引言:上篇文章介紹了微服務(wù)和單體架構(gòu)的區(qū)別、微服務(wù)的設(shè)計、消息、服務(wù)間通信、數(shù)據(jù)去中心化,本篇會繼續(xù)深入微服務(wù),介紹其它特性。 治理去中心化 通常治理的意思是構(gòu)建方案,并且迫使人們通過努力達(dá)到組織的目標(biāo)。SOA治理指導(dǎo)開發(fā)...

    JinB 評論0 收藏0
  • 服務(wù)實戰(zhàn):從架構(gòu)到發(fā)布(二)

    摘要:微服務(wù)架構(gòu)著重培養(yǎng)通用可重用的服務(wù)。服務(wù)注冊和發(fā)現(xiàn)微服務(wù)架構(gòu)下,有大量的微服務(wù)需要處理。網(wǎng)關(guān)也是獲得微服務(wù)狀態(tài)監(jiān)控信息的中心。實際情況是,微服務(wù)和其它企業(yè)架構(gòu)并存。 引言:上篇文章介紹了微服務(wù)和單體架構(gòu)的區(qū)別、微服務(wù)的設(shè)計、消息、服務(wù)間通信、數(shù)據(jù)去中心化,本篇會繼續(xù)深入微服務(wù),介紹其它特性。 治理去中心化 通常治理的意思是構(gòu)建方案,并且迫使人們通過努力達(dá)到組織的目標(biāo)。SOA治理指導(dǎo)開發(fā)...

    zhaot 評論0 收藏0
  • 服務(wù)實戰(zhàn):從架構(gòu)到發(fā)布(二)

    摘要:微服務(wù)架構(gòu)著重培養(yǎng)通用可重用的服務(wù)。服務(wù)注冊和發(fā)現(xiàn)微服務(wù)架構(gòu)下,有大量的微服務(wù)需要處理。網(wǎng)關(guān)也是獲得微服務(wù)狀態(tài)監(jiān)控信息的中心。實際情況是,微服務(wù)和其它企業(yè)架構(gòu)并存。 引言:上篇文章介紹了微服務(wù)和單體架構(gòu)的區(qū)別、微服務(wù)的設(shè)計、消息、服務(wù)間通信、數(shù)據(jù)去中心化,本篇會繼續(xù)深入微服務(wù),介紹其它特性。 治理去中心化 通常治理的意思是構(gòu)建方案,并且迫使人們通過努力達(dá)到組織的目標(biāo)。SOA治理指導(dǎo)開發(fā)...

    sf190404 評論0 收藏0

發(fā)表評論

0條評論

raledong

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<