關於高可用系統的一些思考

 

最近有粉絲反饋說面試阿里和京東都遇到了同一個題,問題都是都是在第二面,考察候選人架構設計能力:設計一個高可用系統。

題目很開放,也更能考察一個人都能力,這位粉絲表示不知道如何下手,今天針對這個問題寫一篇高可用系統的掃盲貼文章,理解什麼是高可用系統


背景:

可靠的系統是業務穩定、快速發展的基石。那麼,如何做到系統高可靠、高可用呢?下面首先講一下高可用需要面臨的常見問題,再從技術方面介紹幾種提高系統可靠性、可用性的方法。

服務常見不可用原因:

在本文中,我們將討論具體的高可用性意味着什麼,以及它如何提高基礎架構的可靠性。

什麼是高可用性?

在計算中,術語可用性用於描述服務可用的時間段,以及系統響應用戶請求所需的時間。高可用性是系統或組件的質量,可確保在給定時間段內的高水平操作性能。

如何衡量可用性?

可用性通常表示爲一個百分比,表示在給定的時間段內特定系統或組件的正常運行時間,其中100%的值表示系統永不宕機。例如,在一年的時間內保證99%可用性的系統最多可以有3.65天的停機時間(1%)。

這些值是根據幾個因素計算的,包括計劃和非計劃維護週期,以及從可能的系統故障中恢復的時間。

高可用系統如何工作?

高可用性用作基礎架構的故障響應機制。它的工作方式在概念上非常簡單,但通常需要一些專門的軟件和配置。

何時高可用性重要?

在建立穩健的生產系統時,最大限度地減少停機時間和服務中斷通常是首要任務。不管如何可靠的系統和軟件,可能會出現問題,可以降低你的應用程序或服務器。對於你的基礎架構實現高可用性是減少這類事件的影響的有用策略。高度可用的系統可以自動從服務器或組件故障中恢復。

什麼使系統高度可用?

高可用性的目標之一是消除基礎架構中的單點故障。單點故障是技術堆棧的一個組件,如果它變得不可用,將導致服務中斷。因此,這是爲你的應用程序,沒有冗餘的正常功能的必要條件的任何部件被認爲是單一故障點。

要消除單點故障,必須爲堆棧的每一層做好冗餘準備。例如,假設你的基礎架構由負載均衡器後面的兩個相同的冗餘Web服務器組成。來自客戶端的流量將在Web服務器之間平均分配,但如果其中一個服務器出現故障,負載均衡器會將所有流量重定向到剩餘的在線服務器。

此方案中的Web服務器層不是單點故障,因爲:

  • 適用於同一任務的冗餘組件

  • 該層頂部的機制(負載均衡器)能夠檢測組件中的故障並調整其行爲以便及時恢復

但是如果負載均衡器脫機會發生什麼?

利用所描述的場景,這在現實生活中並不罕見,負載平衡層本身仍然是單點故障。然而,消除這個剩餘的單點故障可能具有挑戰性; 即使你可以輕鬆配置額外的負載均衡器以實現冗餘,但在負載均衡器上方沒有明顯的點來實現故障檢測和恢復。

僅冗餘不能保證高可用性。必須有一種機制來檢測故障,並在堆棧的某個組件不可用時採取措施。

可以使用從上到下的方法實現冗餘系統的故障檢測和恢復:頂部的層負責監視其下方的層以確定故障。在我們之前的示例場景中,負載均衡器是頂層。如果其中一個Web服務器(底層)變得不可用(虛線箭頭部分),則負載平衡器將停止重定向該特定服務器的請求。

這種方法往往更簡單,但它有侷限性:你的基礎架構中有一個點,頂層不存在或不可及,負載均衡器層就是這種情況。爲外部服務器中的負載均衡器創建故障檢測服務只會創建新的單點故障。

在這種情況下,分佈式方法是必要的。必須將多個冗餘節點連接在一起作爲一個集羣,其中每個節點應該同樣能夠進行故障檢測和恢復。

然而,對於負載平衡器的情況,由於名稱服務器的工作方式,還有一個額外的複雜性。從負載平衡器故障中恢復通常意味着故障轉移到冗餘負載平衡器,這意味着必須進行DNS更改才能將域名指向冗餘負載平衡器的IP地址。這樣的更改可能需要相當長的時間才能在Internet上傳播,這會導致此係統嚴重停機。

可能的解決方案是使用DNS循環負載平衡。但是,這種方法不可靠,因爲它使客戶端應用程序的故障轉移。

更強大和可靠的解決方案是使用允許靈活IP地址重映射的系統,例如浮動IP。按需IP地址重新映射通過提供可在需要時輕鬆重新映射的靜態IP地址,消除了DNS更改中固有的傳播和緩存問題。域名可以保持與相同的IP地址關聯,而IP地址本身在服務器之間移動。

這就是使用浮動IP的高可用性基礎架構的樣子:

高可用性需要哪些系統組件?

在實踐中實現高可用性時,必須仔細考慮幾個組件。除了軟件實現之外,高可用性還取決於以下因素:

  • 環境:如果你的所有服務器都位於同一區域,則地震或洪水等環境條件可能會導致整個系統崩潰。

    在不同數據中心和地理區域中擁有冗餘服務器將提高可靠性。

  • 硬件:高可用性服務器應能夠適應電源中斷和硬件故障,包括硬盤和網絡接口。

  • 軟件:必須爲整個軟件堆棧(包括操作系統和應用程序本身)做好準備,以處理可能需要重新啓動系統的意外故障。

  • 數據:數據丟失和不一致可能由多種因素引起,並且不僅限於硬盤故障。

    高可用性系統必須在發生故障時考慮數據安全性。

  • 網絡:計劃外網絡中斷是高可用性系統的另一個可能的故障點。

    爲可能的故障制定冗餘網絡策略非常重要。

可以使用哪些軟件來配置高可用性?

高可用性系統的每一層在軟件和配置方面都有不同的需求。但是,在應用程序級別,負載平衡器是創建任何高可用性設置的重要軟件。

HAProxy(High Availability Proxy)是負載平衡的常見選擇,因爲它可以處理多個層的負載平衡,以及不同類型的服務器,包括數據庫服務器。

在系統堆棧中向上移動,爲應用程序入口點(通常是負載均衡器)實施可靠的冗餘解決方案非常重要。要消除此單點故障,如前所述,我們需要在浮動IP後面實現一組負載均衡器。Corosync和Pacemaker是在Ubuntu和CentOS服務器上創建此類設置的流行選擇。

結論

高可用性是可靠性工程的重要子集,專注於確保系統或組件在給定的時間段內具有高水平的操作性能。乍一看,它的實施可能看起來相當複雜; 但是,它可以爲需要提高可靠性的系統帶來巨大的好處。

往期文章回顧

RPC第一篇:一個RPC調用的執行過程

程序員希望收到什麼禮物

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章