微服務的重試與彈性設計
以簡單的網路購物為案例:
客戶端 ---->支付微服務 ---->信用卡微服務
這種簡單的呼叫鏈非常普遍,以它為案例闡述有狀態的彈性模式。
假設信用卡服務變得瘋狂,也就是說它雖然還能響應,但非常緩慢。那麼支付服務呼叫信用卡服務會被阻塞在這裡,因為支付服務一直等待信用卡響應,而信用卡服務延遲響應了。由於延遲過程需要很長時間,所有從支付服務出發的執行緒都會被堵塞在這裡,支付服務最終會超時出錯。在你的系統中出現這樣一個很微小的故障可能會癱瘓整個系統,這是一種沒有彈性的設計。
下面是改進設計演進版本:
快速失敗fail fast
這裡可以應用一個快速失敗模式,比如使用斷路器。在這個例子中,使用了Netflix Hystrix斷路器。如果信用卡服務響應減慢,斷路器就會立即中斷支付服務的呼叫並且讓支付服務馬上發生故障。這樣,即使功能無法實現了(我無法向信用卡充值),但仍然可以確保整個系統可響應。
快速失敗是不夠的
但快速失敗是不夠的。在信用卡服務被修復後,經常會進行重試。此重試需要具有狀態性,不僅可以立即重試,而且可以在幾分鐘,幾小時甚至幾天內重試。對信用卡服務進行有狀態的重試,也就是重試帶著信用卡服務的輸入引數。
保持同步響應
在這種情況下,通常不需要非同步處理,只要信用卡服務可用,就可以很好地返回同步響應,但只有在不能同步時才切換到非同步。
區分能否同步響應,使用HTTP返回碼來支援(200 OK意味著所有OK,202 ACCEPTED意味著同步失敗)。
沒有訊息的非同步工作分配
相比同步呼叫服務的另一種方法是非同步通訊。預設是使用訊息。
但是非同步不一定使用訊息,可以使用工作流引擎作為工作分配,表現得像一個佇列。工作流引擎會提供一個支付是否完成的查詢,如果沒有,會讓客戶更換另外一張信用卡,然後再次呼叫支付服務,這個過程只要指定流程後,流程會負責重試。
使用補償的業務交易
在分散式系統中,ACID事務不適用(或者至少不能很好地擴充套件)。使用補償是另一種選擇 - 這意味著如果以後發生失敗時可以撤銷已執行的工作。
在這個案例中,基於上面的流程重試,重試幾次後就不再無限次重試了,而是作為支付失敗處理,然後將支付之前的流程進行回退,呼叫回退環節的各個回退方法執行補償,最終將狀態恢復到這次支付活動沒有發生以前的狀態。
flowing-retail/payment-rest at master · flowing/fl
[該貼被admin於2018-03-27 10:39修改過]
相關文章
- 微服務可用性設計微服務
- JMicro微服務之超時&重試微服務
- .NET Core 微服務之Polly重試策略微服務
- 微服務設計指南微服務
- Go Micro(5)——架構與微服務的設計模式Go架構微服務設計模式
- 百億流量微服務閘道器的設計與實現微服務
- 領域驅動設計,中臺與微服務微服務
- 面向微服務架構設計理念與實踐微服務架構
- 設計微服務的最佳實踐微服務
- 微服務設計模式(下)微服務設計模式
- 微服務設計模式(上)微服務設計模式
- 微服務設計原則微服務
- 微服務架構和設計模式 - DZone微服務微服務架構設計模式
- 微服務在彈性雲實現無損釋出實踐微服務
- Kubernetes+Docker微服務實踐之路--彈性擴容Docker微服務
- 如何利用容器與中介軟體實現微服務架構下的高可用性和彈性擴充套件微服務架構套件
- 微服務系列 2:微服務化框架的模型和治理能力設計微服務框架模型
- spring微服務架構設計與輕量級微服務架構及最佳部署Spring微服務架構
- 微服務治理與統計分析微服務
- 微服務的接入層設計與動靜資源隔離微服務
- 微服務之架構技術選型與設計微服務架構
- 《微服務架構設計模式》讀書筆記 | 第9章 微服務架構中的測試策略(上)微服務架構設計模式筆記
- Spring Boot中使用斷路器模式實現彈性微服務Spring Boot模式微服務
- 雲原生的彈性 AI 訓練系列之二:PyTorch 1.9.0 彈性分散式訓練的設計與實現AIPyTorch分散式
- gRPC重試與介面冪等性RPC
- 深度:微服務化的資料庫設計與讀寫分離微服務資料庫
- 微服務設計學習(一)關於微服務和如何建模服務微服務
- 微服務中的Sidecar設計模式解析微服務IDE設計模式
- 微服務的最終一致性與事件流微服務事件
- 一. Go微服務--隔離設計Go微服務
- 微服務解耦設計模式 - Neeraj微服務解耦設計模式
- java springcloud 微服務設計方案JavaSpringGCCloud微服務
- 一起玩轉微服務(3)——微服務架構設計模式微服務架構設計模式
- 你還在手撕微服務?快試試 go-zero 的微服務自動生成微服務Go
- 架構設計思想-微服務架構設計模式架構微服務設計模式
- 微服務應用視角解讀如何選擇 K8s 的彈性策略微服務K8S
- 在 ASP.NET Core Web API中使用 Polly 構建彈性容錯的微服務ASP.NETWebAPI微服務
- 服務端指南 | 微服務初級設計指南服務端微服務