響應式微服務 in java 譯 <十四> Circuit Breakers

Circuit Breakers

斷路器(circuit breaker)是一種用於處理重複故障的模式,它保護微服務不被一次又一次地調用失敗的服務,斷路器是一種三種狀態的自動機,交互如(圖4-4)。它開始於一個封閉的狀態(closed),在這種狀態下,斷路器會正常地執行操做。若是交互成功,什麼都不會發生。可是,若是它失敗了,斷路器就會提示故障。一旦故障次數(或故障頻率,在更復雜的狀況下)超過一個閾值,斷路器切換到一個開放狀態(open)。在這種狀態下,對斷路器的調用當即失敗,而不會試圖執行底層交互。斷路器除了執行操做,還能夠執行調用返回,從而能夠提供默認結果。通過配置的時間,斷路器決定操做有成功的機會,所以它進入半開放狀態(Half-Open)。在這種狀態下,下一次對斷路器的調用執行底層交互。根據此調用的結果,斷路器重置並返回到關閉狀態,或返回到打開狀態,直到另外一個超時結束。java

Java中最著名的斷路器實現是Hystrix(https://github.com/net ix/hystrix),而你能夠在Vert.x微服務中使用hystrix(它使用線程池)。您須要顯式地切換到 Vert.x event loop 執行不一樣的回調。或者,你可使用Vert.x circuit breaker 處理異步操做,使用 Vert.x 非阻塞異步開發模型。react

讓咱們想象一下失敗的hello microservice,消費者應保護與此服務的交互,並使用斷路器以下:git

在此代碼中,http交互受到斷路器保護,當故障數達到配置閾值時,斷路器將中止調用微服務,斷路器按期容許一次調用經過,以檢查微服務是否回到軌道上,並採起相應的行動。斷路器地使用經過一個示例,使用web client,任何交互均可以經過斷路器來管理,並保護您避免出現不可靠服務、異常和其餘類型的故障。github

切換到開放狀態(open)的斷路器須要由操做團隊進行監視,Hystrix 和 Vert.x circuit breaker  須要有可監控能力。web

Health Checks and Failovers

當超時或者斷路器容許消費者處理失敗時,崩潰怎麼辦?面對崩潰時,故障轉移策略從新啓動已失敗的系統部分。可是在可以實現這一點以前,咱們必須可以檢測出一個microservice死亡的時候。api

健康檢查是 Vert.x 提供的api,指示服務的狀態。它告訴調用服務是否健康,調用一般使用HTTP交互,但不是必要的。調用以後,執行一組檢查,並計算並返回全局狀態。當檢測到一個微服務不健康時,就不該該再調用它了,由於結果多是失敗的。請注意,調用健康的微服務也不能保證成功,健康檢查只是代表微服務正在運行,而不是它將準確地處理您的請求或網絡正確傳遞結果。安全

根據您的環境,您可能有不一樣水平的健康檢查。例如,您能夠在部署時進行準備狀態檢查,以肯定微服務什麼時候準備好爲請求服務(當一切都已正確初始化時)。活性檢查用於檢測錯誤行爲,並指示微服務是否可以成功地處理請求。當因爲目標微服務沒有響應而沒法執行活性檢查時,微服務可能已經崩潰。服務器

在 Vert.x 應用裏,實施健康檢查有幾種方法,您能夠簡單地實現返回狀態的路由,甚至可使用真正的請求。你可使用 Vert.x健康檢查模塊,並組成不一樣的結果。下面的代碼給出一個應用程序示例,提供了兩個級別的健康檢查:微信

完成了健康檢查以後,您能夠實現失敗的策略。通常來講,策略只是從新啓動系統死掉的部分,但願能獲得最好的結果。雖然 Failover 一般由您的運行時基礎設施Vert提供,當集羣中的節點死亡時會觸發該Failover,你不須要定製健康檢查,按期 ping 集羣中的節點。當Vert.X丟失節點的跟蹤,Vert.X 會選擇集羣中的一個健康節點並從新部署死部分。網絡

Failover 能夠保持系統的運行,但不會修復根本緣由--這是您的工做。當應用程序意外死亡時,應進行過後分析。

Summary

本章討論了當您的微服務系統增加時您將面臨的幾個問題。正如咱們所瞭解的那樣,服務發現是任何一個系統中必須具有的,以確保位置透明性。而後,因爲失敗是不可避免的,咱們討論了幾種模式,以提升您的系統的彈性和穩定性。

Vert.x 包括一個可插拔的服務發現模塊,可使用相同的api處理客戶端服務發現和服務器端服務發現,vert.x 服務發現還能夠從不一樣的服務發現基礎設施導入和導出服務.弗特。Vert.x 包含一組彈性模式,如超時、斷路器和故障轉移。咱們看到了這些模式的不一樣例子。不幸的是,處理失敗是工做的一部分,咱們都必須這樣作。

在下一章中,咱們將學習如何在OpenShift上部署Vert.x 的響應式微服務,並說明如何使用服務發現、斷路器和 failover,來保障系統的健壯性。雖然這些主題特別重要,但不要低估其餘須要處理的問題。在處理微服務時,例如安全性、部署、聚合日誌記錄、測試等。若是您想了解更多關於這些主題的信息,請查看如下資源:

  • Reactive Microservices Architecture

  • The Vert.x service discovery documentation

  • Release It! Design and Deploy Production-Ready So ware (O’Reilly) A book providing a list of recipes to make your sys‐ tem ready for production

  • Netflix Hystrix

  • The Vert.x service circuit breaker documentation

 

 

原文地址:

https://developers.redhat.com/promotions/building-reactive-microservices-in-java/

有什麼討論的內容,能夠加我微信公衆號:

相關文章
相關標籤/搜索