前一天我們比過兩種擺法,最後推薦的是把兩台主機分開放在兩個 AZ,也就是下圖的方案乙:東京 Region 裡有兩台 EC2 主機,Web 1 在 AZ 1、Web 2 在 AZ 2。

今天我們拿方案乙做一次演練,在AWS 的白皮書,它提到啊,大部分常見的災害應該只會影響一個 AZ
比較少見的大範圍災害,或是 Region 裡的服務本身出了問題,影響就可能不只一個 AZ。
AWS 也有一個公開的事件摘要頁,裡面列了幾次以 Region 為單位描述的服務事件,讓你知道他們確實曾經發生過這類事情(抖抖
我們就趁這個機會來演練看看情境,圈起來整個東京 Region。AZ 1、AZ 2,還有東京其他的 AZ,全部都在圈內。

方案乙的 Web 1、Web 2 雖然分在兩個 AZ,但這兩個 AZ 都在東京 Region 裡,會一起受影響,沒有留下正常的主機。
大阪 Region 多開的一台 EC2 主機。它上面還沒程式也沒資料,暫時先叫它空白主機
每個 Region 在設計上都和其他 Region 隔開。所以想躲開「整個東京 Region 不能用」這種事件,東西就得放到東京以外的 Region。
這演練就呼應到我們的標題:分在兩個 AZ,擋不住整個 Region 不能用。
會提出這個細節,只是想呼籲讀者,你可能還有這個考量需要留意
在做防災演練的時候,我們會評估一個網站能在說好的時間內恢復服務,少掉的資料也在能接受的範圍內。這取決於你和合作廠商訂定契約時來定,有可能是 30 分內修復好、60 分鐘內修復好
以前在做政府專案時,保固合約有時候也會提到,必須得在 48 hr 內修復好,不然就會有罰金
但是越賺錢的平台,所要求的災害復原速度可能就要更快,畢竟每分每秒都是摳摳
那再回到主機,大阪那台空白主機目前位置在範圍外
要做到足夠的復原,至少得先有三樣東西:
這三條算是基本條件,除此之外同時也要進行災害復原時間的確認
因為大阪的主機不一定要一直開著,也可以等出事再開;所以像是開機、部署程式花的時間,都得算進恢復花的時間~

AWS 另一份講出事後怎麼把服務救回來的白皮書也有提到:除了資料外,程式和設定也要能在用來復原的 Region 重新部署;而且這套復原方式要定期測試,才是真的 ok。
「服務最後有恢復,就算過關吧?」
天下哪有那麼好康的事情(欸
大部分來說會有兩個上限:
舉個例子。備份每 1 小時做一次,最後一次在 10:00,結果 10:50 東京出事了。
用 10:00 的備份還原,10:00 到 10:50 之間的新報名就不見了,這就是「資料少掉 50 分鐘」。
演練完,會量到兩個對應的數字:恢復花了多久、資料少掉多久。兩個數字要各自對照自己的上限。

延續這例子,假設這次演練的結果是這樣:
| 項目 | 事先說好的上限 | 演練實測 | 結果 |
|---|---|---|---|
| 恢復花了多久 | 1 小時 | 40 分鐘 | 過關 |
| 資料少掉多久 | 30 分鐘 | 50 分鐘 | 沒過 |
恢復花了 40 分鐘,在 1 小時內,這項過關;資料少掉 50 分鐘,超過 30 分鐘的上限,這項就沒過。
這裡有幾個很常見的誤會:
所以上限要事先跟廠商跟團隊說清楚,醜話先說在前頭,並分享目前的機制是如何,費用是否可以接受,才能確保雙方能達成共識
讀到這裡,你可能會想:「那到底什麼時候放兩個 AZ 就夠,什麼時候才要跨 Region?」
雖然我很想說廠商有錢,跨 Region 當然最好 XD (誤
不過還是有些判斷的順序,要看網站能不能接受停下來。例如有了兩個上限,再加上費用,就能把這件事用這個切角來規劃看看
| 比較 | 放兩個 AZ(同一個 Region) | 放兩個 Region(東京+大阪) |
|---|---|---|
| EC2 主機放在哪裡 | 東京 Region 的 AZ 1、AZ 2 各一台 | 東京 Region 的 AZ 1、AZ 2 各一台,再加上大阪 Region |
| 擋得住的事件 | 一台主機壞掉、一個 AZ 不能用 | 左邊的都擋得住;大阪準備好、也演練過的話,還有機會擋住整個東京 Region 不能用 |
| 整個東京 Region 出事時 | 只能等 AWS 修好 | 可以把服務切到大阪 |
| 資料備份 | 放在東京就好 | 還要事先複製一份到大阪 |
| 平常要多做的事 | 顧好兩台主機 | 還要顧大阪的主機(或出事時照著開起來的步驟)、資料備份、切換,並定期演練 |
| 費用 | 比較少 | 比較多 |
光說「比較多」還是很模糊,用一個簡單的假設算算看看:
用到的單價是主機東京每小時 US$0.0108
大阪每小時 US$0.0109
備份存放東京、大阪都是每 GB 每月 US$0.05;從東京傳資料到大阪,每 GB US$0.09
| 每月費用 | 放兩個 AZ | 跨 Region:只把備份放到大阪 | 跨 Region:大阪多開一台待命 |
|---|---|---|---|
| 東京 2 台主機 | US$15.77 | US$15.77 | US$15.77 |
| 東京的備份(20 GB) | US$1.00 | US$1.00 | US$1.00 |
| 大阪的備份(20 GB) | - | US$1.00 | US$1.00 |
| 傳資料到大阪(30 GB) | - | US$2.70 | US$2.70 |
| 大阪 1 台待命主機 | - | - | US$7.96 |
| 合計 | 約 US$16.77 | 約 US$20.47 | 約 US$28.43 |
像是有的時候,廠商出一張嘴希望災害演練還原可以更完善時
拿出這種報表讓廠商評估,也正是雲端工程師的工作內容之一,畢竟真正看到金額,就會更審慎評估多出來的摳摳,以及預期會額外花多少時間,畢竟也需要定時去做災房演練~
我會建議先問自己三個問題:
下面就整理成一張表:
| 網站的情況 | 比較適合 |
|---|---|
| 停幾個小時雖然困擾,但還能接受;預算和人力都有限 | 放兩個 AZ |
| 想多一層保險,但出事時可以接受花比較久恢復 | 兩個 AZ,再把備份放到另一個 Region |
| 整個 Region 出事時,也要在很短的時間內恢復;或是合約、法規有要求 | 跨 Region,而且要定期演練 |
最後分享一下我們公司的做法:目前只有放在同一個 Region 的兩個 AZ,沒有做跨 Region,主因是我們是學習系統,而非高頻的電商平台,用 AZ 有跨資料中心我們認為就很足夠,就沒跨 Region。但判斷標準建議還是以上表為主
最後小結一下~
| 重點 | 記住這句 |
|---|---|
| 兩個 AZ 擋得住什麼 | 擋得住一個 AZ 出事,擋不住整個 Region 不能用;但別因此記成跨 AZ 沒有用 |
| 在另一個 Region 放主機 | 空白主機只做到位置在範圍外;還要能跑的程式、事先放好的資料備份、演練過的切換 |
| 演練怎麼驗收 | 恢復花了多久、資料少掉多久,各自對照自己的上限,不能相加,也不能互相抵銷 |
| 放兩個 AZ 還是跨 Region | 先看怕哪種事件、Region 出事時網站能不能等、多花的錢和力氣划不划算 |
下次聽到「我們已經做了跨 AZ,很安全」,或是「我們有跨 Region,很安全」
如果你還想更進階問細節的話,或許你還能問:
希望這篇文章,有助於你對 Region 跟 AZ 有更深入的瞭解,我們下回見 :D