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