更新於 2024/12/18閱讀時間約 8 分鐘

盡量好懂的容器化技術演化史 (三):備份、備援、叢集



  有了客戶端,也有了伺服端,服務正式開始工作,接下來我們就會開始討論故障的問題了。

  如果有個客戶端故障,比如說你的智慧手機故障好了,那你會怎麼處理?

  換手機,故事結束。


  但是如果有個伺服端故障了,比如說證券交易伺服器故障好了,該公司會發生什麼事情?

  違約條款,好一點就是大家都沒有年終,壞一點就是大家都沒有工作,故事結束。


  所以說伺服端是絕對不能故障的。

  伺服端的故障是非常恐怖的事情。以 IT 建置來說,具規模的伺服端服務,都會花超過一倍的成本來維持服務的不故障,假設明明整個伺服器服務 100 萬的成本就可以順跑了,他們可能會出 300 萬來保證服務的安全。


  故障又有分兩種,一種是資料損壞,另一種是服務掉線。


  資料損壞這件事的嚴重性通常高於服務掉線,服務掉線的話,就是當服務從無法使用到恢復使用的時間有『閒置成本』,但資料損壞的話,如果壞到重要資料不可逆的情況,公司是很可能被一波帶走的。


  要避免資料損壞,最直觀的步驟稱為『備份』,就是當原始數據或系統遭遇問題,可以使用來恢復這些數據或系統運行的功能。


  常見的就是備份 321 了:3 份資料,2 種介質,1 個異地。


  『3 份資料』就是所有資料要存三份,至於要如何讓所有儲存的資料都保有一致性,而不會出現版本 1、版本 2、版本 3,這就是軟體工程師該努力的了。

  『2 種介質』就是為了因應對介質災難時可以使資料安全。比如說用光碟和磁碟去存同樣的資料,當地球被高強度電磁風暴掃到之時,全世界的磁碟統一報廢的類世界末日之際,光碟裏的資料也不會陣亡。

  『1 個異地』就是備份的資料起碼要放在兩個不同的位置 (異地)。有些機構會要求異地 30 公里的物理距離,據說是考慮到被核彈打到後的波及半徑,不要說資料被幹走,就算被一顆核彈打到,資料依然不能陣亡。


  好了,做到這一步,縱使其中一個機房被核彈打到,再同時加上被全球性電磁風暴掃到,資料還是可以活著。

  你說想太多?

  不,IT 沒有所謂想太多,只有「這件事的價值值不值得做這麼多」,所謂 IT 大程度上就是價值與金錢的權衡考量。



  我們保證了資料安全,接下來就輪到服務安定了。


  要如何保證服務不掉線呢?

  基本的策略其實很單純,就是多份。

  比如說每台伺服器裏面要有兩顆 CPU,每個伺服器服務程式要有兩個,網路線各自插兩條,硬碟兩個兩個一組 (Raid),電源供應器兩顆,同樣規格的伺服器要兩台,供電來源要接兩條來自不同供電廠的線,就連工程師都聘用兩個 (所以有些工程師就真的是招進去放著,跟買保險一樣)。

  這個步驟稱為『備援』,當主要系統或設備發生故障時,能夠無縫切換到備用系統。正在運作的電腦設備故障時,要有另外一個完全相同的設備可以撐一下,然後發 Alert 給職守的工程師,在備用的電腦設備正在撐一下的時候,偷偷地把故障的部件修好。


  當然不見得都是 2 的倍數。

  正常可能 5 台工作機配上 2 台備援機之類的,但備援的中心思想就是,假設其中一個單點 (Node,就是說一個設備) 故障了的話,要有另外一個可以工作的單點去無縫切換。


  是的,我舉例了『5 台』工作機去當『一個』伺服端的角色。

 ​這種把數台電腦給串聯起來,使其形成一個巨大的電腦單體,把很多台電腦假裝成一台電腦的做法,就叫做『叢集 (Cluster)』,在叢集裡的每台電腦都稱為一個​點 (Node)。

  叢集結構的大前提就是:「用戶只在意服務是否正常,並不在意是哪台電腦提供服務」,只要可以把商品發貨,管它老闆是老王還是小明。


  在這個階段,可以這樣去想像整個伺服器架構:


                                 -----機房--------
:【客戶端電腦】 -> 伺服端 (叢集) |【電腦 A (物理)|
                                 |【電腦 B (物理)|
                                 |【電腦 C (物理)|
                                 -----------------
                                 【備份資料 B

                                 【備份資料 C


  客戶端只要去訪問伺服端系統就可以了,至於是哪台伺服器提供服務的,客戶端不管。

  你可以想像你的服務其中一個單點可能在美國,另一個單點在南港;或是誠品跟博奕公司的機房搞不好其實是鄰居,AWS 的機房直接圈半層樓的數量,2024 以前大部分的亞洲 AWS 服務都在日本或新加坡嗎?所以是哪台伺服器提供服務客戶端不管,也沒意義。


  叢集結構可以擁有以下好處:


1. 電腦 A 燒壞了,B 電腦必須要可以繼續提供服務。

2. 電腦 A 的運算能力滿載,電腦 B、C 可以分擔運算需求。

3. 如果 A、B、C 三台電腦服務不過來龐大的業務量,因為已經是叢集結構了,所以隨時可以增添第四台的電腦 D 去分擔。


  可以做到上述的要求,就稱為伺服器系統符合高可用性 (High Availability, HA)。

  HA 的目的是最小化停機時間、系統避免因單點故障導致服務中斷、快速故障恢復。主要就是冗餘設計、故障轉移機制以及分散負載,更進一步的還會要求監控與自動化。


  啊還是故障了怎麼辦?

  是啊,即使做到這個規模了,伺服端系統還是可能掛掉。臉書會掛掉,ChatGPT 會掛掉,Office 365 也會掛掉,你以為臉書的電腦叢集是 3 台 5 台嗎?它們的電腦叢集是 3 『座』 5 『座』樓廠的,但即使如此,服務還是可能掛掉。


  這種時候就只能把工程師叫起來了哈哈哈,這就是 on-Call,派人快點把中斷的服務修好,避免閒置成本擴大。

  假設公司可以接受的合理閒置成本是 15 分鐘,工程師們就要討論出 15 分鐘內恢復上線的對策;如果不幸地真的發生了伺服端系統掛掉的狀況,使用了恢復對策但卻超過 15 分鐘,就要檢討跟改進。


  沒人願意讓服務中斷,但扣掉天災以外,服務中斷也可能是人禍。

  之前聽過一個案例,有一間做跨國服務的公司,它們的伺服端大半夜被一個不知道在幹嘛的駭客掃射 (DDoS),服務癱瘓。那時候第一線的監控人員要做的第一件事就是打電話,把整個公司的人都叫起來開始戰鬥。


  這絕對不是很熱血的故事,像極了一塊沒有彈性的肝。

  所以服務中斷就……大家體諒一下吧?


  然後事情繼續發展。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.