9个用于构建容错系统的开源工具
我一直對 Web 開發和軟件架構很感興趣,因為我希望對一個可以工作的系統有一個整體的了解。無論你正在構建移動應用程序還是 Web 應用程序,它都必須連接到互聯網,以便在不同的模塊之間交換數據,這意味著你需要一個 Web 服務。
如果使用云系統作為應用程序的后端,則可以利用更強大的計算能力,因為后端服務可以橫向和縱向伸縮,并編排不同的服務。但是,無論你是否使用云后端,構建一個容錯系統都是非常重要的——一個有彈性、穩定、快速和安全的容錯系統。
為了理解容錯系統,讓我們以 Facebook、Amazon、谷歌和 Netflix 為例。數以百萬計的用戶同時訪問這些平臺,同時通過點對點和用戶服務器(user-to-server)網絡傳輸大量數據,而且可以肯定,其中有惡意用戶,比如黑客攻擊或拒絕服務攻擊(DoS)。即便如此,這些平臺仍然可以一天 24 小時、一年 365 天不停機地運行。
盡管機器學習和智能算法是這些系統的核心,但它們能夠在沒有一分鐘停機的情況下實現一致的服務,這一點值得稱贊。它們昂貴的硬件和龐大的數據中心當然很重要,但支持這些服務的優雅的軟件設計也同樣重要。而容錯系統正是構建這樣一個優雅系統的原則之一。
兩種導致生產問題的行為
這里有另一種考慮容錯系統的方式。當你在本地運行應用程序服務時,一切似乎都很好。太棒了!但是,當你將你的服務推到生產環境時,一切都亂了套。在這種情況下,容錯系統有助于解決兩個問題:故障停止行為(Fail-stop behavior)和拜占庭行為(Byzantine behavior)。
故障停止行為
故障停止行為是指正在運行的系統突然停止或部分系統發生故障。服務器停機和數據庫不可訪問屬于這一類。例如,在下面的圖中,Service 1 不能與 Service 2 通信,因為 Service 2 是不可訪問的:
但是,如果服務之間存在網絡問題,也會出現這種問題,如下所示:
拜占庭行為
拜占庭行為是指系統持續運行,但沒有產生預期的行為(例如,錯誤的數據或無效的值)。
如果 Service 2 損壞了數據或值,拜占庭式的故障就會發生,即使服務看起來運行得很好,就像在這個例子中:
或者,可能有一個惡意的中間人在服務之間攔截并注入不需要的數據:
無論是故障停止還是拜占庭行為都不是我們想要的情況,所以我們需要有方法可以防止或修復它們。這就是容錯系統發揮作用的地方。以下 9 個開源工具可以幫助你解決這些問題。
構建容錯系統的工具
盡管構建一個真正實用的容錯系統涉及到深入的分布式計算理論和復雜的計算機科學原理,但是有許多軟件工具——其中有許多是開源工具,如下面這些——可以通過構建容錯系統來減輕不良影響。
斷路器模式:Hystrix 和 Resilience4j
斷路器模式是一種技術,在服務失敗時幫助返回一個準備好的虛擬響應或簡單響應:
Netflix 開源的Hystrix是最流行的斷路器模式實現。
我以前工作過的許多公司都在使用這個很棒的工具。令人驚訝的是,Netflix 宣布將不再更新 Hystrix。(是的, 我知道。)相反,Netflix 建議使用另一種解決方案,如支持 Java 8 和函數式編程的Resilence4j,或另一種方案Adaptive Concurrency Limit。
負載均衡:Nginx 和 HaProxy
負載均衡是分布式系統中最基本的概念之一,必須提供一個高質量的生產環境。要理解負載均衡器,首先需要理解冗余的概念。每個生產質量的 Web 服務都有多個服務器以提供冗余,以便在服務器宕機時接管和保持服務。
想想現代飛機:它們的雙引擎提供了冗余,即使引擎著火也能安全著陸。(大多數商用飛機擁有最先進的自動化系統,這也提供了幫助。)但是,擁有多個引擎(或服務器)意味著必須有某種調度機制,以便在發生故障時有效地路由系統。
負載均衡器是通過平衡多個服務器節點來優化高流量事務的設備或軟件。例如,當數千個請求進來時,負載均衡器充當中間層,在不同的服務器之間路由和平均分配流量。如果服務器宕機,負載均衡器就將請求轉發給運行良好的其他服務器。
有許多可用的負載均衡器,但最著名的兩個是 Nginx 和 HaProxy。
Nginx不僅僅是一個負載均衡器。它還是 HTTP 和反向代理服務器、郵件代理服務器和通用 TCP/UDP 代理服務器。Groupon、Capital One、Adobe 和 NASA 等公司都在使用它。
HaProxy也很受歡迎,因為它是一個免費的、非??焖俸涂煽康慕鉀Q方案,為基于 TCP 和 HTTP 的應用程序提供高可用性、負載均衡和代理。許多大型互聯網公司,包括 GitHub、Reddit、Twitter 和 Stack Overflow 都在使用 HaProxy。是的,Red Hat Enterprise Linux 也支持 HaProxy 配置。
Actor 模型:Akka
Actor 模型是一種并發設計模式,當actor(基本計算單元)接收到消息時,它將委托責任。一個actor可以創建更多的actor并將消息委托給它們。
Akka是實現了 Actor 模型的最著名的工具之一。該框架支持基于 JVM 的 Java 和 Scala。
使用消息隊列實現異步、非阻塞 I/O:Kafka 和 RabbitMQ
多線程開發在過去一直很流行,但是這種實踐被放棄,取而代之的是異步、非阻塞 I/O 模式。對于 Java,這在其Enterprise Java Bean(EJB)規范中有明確說明:
企業 Bean 不能使用線程同步原語來同步多個實例的執行。
企業 Bean 不能嘗試管理線程。企業 Bean 不能嘗試啟動、停止、掛起或恢復線程,也不能更改線程的優先級或名稱。企業 Bean 不能試圖管理線程組。
現在,還有其他實踐,如流 API 和 Actor 模型。但是,Kafka和RabbitMQ等消息隊列提供了對異步、非阻塞 IO 特性的開箱即用的支持,它們是功能強大的開源工具,可以通過處理并發進程替換線程。
其他選項:Eureka 和 Chaos Monkey
其他有用的容錯系統工具包括監控工具,如 Netflix 的Eureka,壓力測試工具,如Chaos Monkey。它們的目標是通過在較低級的環境(如集成(INT)、質量保證(QA)和用戶驗收測試(UAT)) 中進行測試,盡早發現潛在的問題,從而在轉移到生產環境之前防止潛在的問題。
你使用什么開源工具來構建容錯系統?請在評論中分享你的最愛。
關于作者
Bryant Son?—— Bryant Jimin Son 是 Red Hat 的顧問。Red Hat 是一家以 Linux 服務器和開源貢獻而聞名的技術公司。在工作中,他致力于利用 Red Hat 技術棧(如 BPM、PAM、Openshift、Ansible)為客戶構建技術,并使用 Java、Spring Framework、AngularJS 和 Material Design 進行全棧開發。在加入 Red Hat 之前,Bryant 在花旗集團的花旗云團隊工作,負責構建私有基礎設施即服務(IaaS)云平臺,為花旗各部門的 8000 多個團隊提供服務。他還在美國航空公司、IBM 和家得寶奧斯汀技術中心工作過。Bryant 畢業于德克薩斯大學奧斯汀分校,獲得計算機科學和航空航天工程學士學位,輔修商業。
查看英文原文:9 open source tools for building a fault-tolerant system
總結
以上是生活随笔為你收集整理的9个用于构建容错系统的开源工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入剖析分布式监控 CAT —— 消息文
- 下一篇: 厉害了,Spring Cloud Ali