iT邦幫忙

2026 iThome 鐵人賽

DAY 3
2
IT Operation

從前後端踏上 AWS 雲端架構勇者之路系列 第 3

兩台主機,真的分開承擔故障了嗎?

  • 分享至 

  • xImage
  •  

今天的主角:AZ,Region 裡彼此隔開的位置

昨天提過,雲端背後仍然是實體機器,需要地方放,也需要供電和網路。放這些機器、替它們供電和接上網路的建築,通常叫做資料中心

一個 Region 並不是只有一棟資料中心。AWS 會把每個 Region 分成好幾個彼此隔開的位置,每個位置由一座或多座資料中心組成,電力和網路都有多準備一套,而且和其他位置分開,蓋在不同的建築裡。

這種 Region 裡彼此隔開的位置,叫做 Availability Zone,簡稱 AZ,就是我們今天的主角。

因為 AZ 之間在實體上是分開的,萬一發生火災、淹水這類少見的事件,AWS 的說明是只會影響其中一個 AZ。可以參考 AWS 官方的 Region 與 AZ 說明。這是 AWS 把 AZ 分開蓋想達到的效果。

那「分開」是分多遠?AWS 全球基礎設施介紹寫到,AZ 之間彼此相隔好幾公里,但都在 100 公里以內,並用低延遲的網路連在一起。

https://ithelp.ithome.com.tw/upload/images/20260916/20040221IgBaDfKol2.png

圖上的東京 Region 畫了 4 個 AZ,是照 AWS 官方的 AZ 清單畫的;AWS 也說明每個 Region 至少有 3 個 AZ。

Region 是地理區域,AZ 是 Region 裡彼此隔開的位置,資料中心則是 AZ 裡實際放機器的地方。

我們開的主機,就放在某個 AZ 的資料中心裡 🙌

EC2 主機和 AZ 是什麼關係?

講到這裡,你可能會想:「那 Day 02 說的 EC2,跟 AZ 又是什麼關係?」

EC2 是 AWS 提供的主機服務,我們在 AWS 上開的一台主機,就是一台 EC2。上面那張圖裡,放在 AZ 1 資料中心裡的那台主機,就是一台 EC2。

EC2 和 AZ 的關係是:

  1. 每一台 EC2,都放在某一個 AZ 裡。 一台主機就在一個 AZ,不會同時橫跨兩個 AZ。
  2. 放在哪個 AZ,是建立 EC2 的時候決定的。 建立時會先選 Region,接著可以自己指定 AZ,也可以讓 AWS 幫你挑一個。
  3. 想分在兩個 AZ,就要建立兩台 EC2,一台放 AZ 1、一台放 AZ 2。 不是開好一台 EC2,AWS 就會自動在另一個 AZ 幫你多準備一台。

EC2 的 Region 與 AZ 說明也是這樣寫:把 EC2 分散建立在多個 AZ,才能在 Region 裡某一個位置出事時保護你的網站;如果所有主機都放在同一個位置,那個位置一出事,所有主機就都用不了。

舉個例子來說,如果發生戰爭,剛好炸彈炸到 AZ1 的區域時,假使你 EC2 跟資料庫都放在那,這樣整組資料就通通不見了 .. 冏

最好服務還是要跨 AZ 會比較安全 XD

實際建立 EC2 的時候,位置是在哪裡選的呢?畫面大概像這樣:

https://ithelp.ithome.com.tw/upload/images/20260916/20040221HcgpWEOd7b.png

先在畫面右上角選 Region,這台 EC2 就會建在東京 Region。接著在「網路設定」裡,決定它放在哪個 AZ。

這裡有個小地方要說清楚:畫面上的欄位不叫 AZ,而是叫子網路。每個子網路都屬於一個 AZ,選了哪個子網路,EC2 就放在那個 AZ;實際畫面上的 AZ 會顯示成 ap-northeast-1a 後面我會都提,AZ 1、AZ 2 這種比較好懂得名稱~

兩台 EC2,要放同一個 AZ 還是分開?

延續 Day 02 的活動報名網站,這篇假設主機放在東京 Region。

只有一台主機時,它一出問題,整個網站就跟著停。這種「一個地方壞掉,整個服務就停擺」的情況,常被叫做單點故障。所以網站準備了兩台 EC2:原本那台叫做 Web 1,多準備的那台叫做 Web 2,Web 代表上面跑的是網站的程式。兩台各自裝了一份一樣的後端程式,做的是同一件事:接收報名、處理請求等等。

https://ithelp.ithome.com.tw/upload/images/20260916/20040221TPSJTeC1Is.png

只是主機會壞,放主機的地方也可能出事。這兩台要放在哪裡,假設有兩份方案:

  • 方案甲:兩台都放在同一個 AZ。
  • 方案乙:兩台分開,放在兩個不同的 AZ。

https://ithelp.ithome.com.tw/upload/images/20260916/20040221voG7v1sejo.png

方案甲的 Web 1、Web 2 都在 AZ 1,AZ 2 沒有主機

方案乙則是 Web 1 在 AZ 1、Web 2 在 AZ 2。

同事問你兩台主機放在哪裡,有兩種回法:

回覆 A:「兩台都放在東京 Region。」

回覆 B:「兩台都在東京 Region,Web 1 在 AZ 1,Web 2 在 AZ 2。」

回覆 A 沒有說錯,但聽的人還是不知道,這兩台是擠在同一個位置,還是分開放。

回覆 B 多講了 AZ,對方才能判斷某個位置出事時,兩台會不會一起受影響。

選了 AZ,會多花錢嗎?

第一次看到建立 EC2 的畫面,很容易擔心:「選不同的 AZ,會不會比較貴?」

  • 選 AZ 這個動作本身不用錢。
  • 真正多出來的,是多開的那一台。 兩台 EC2 就是兩台的費用。以 t4g.micro 這種小型規格為例,東京每小時 US$0.0108,一個月開 730 小時大約 US$7.88,兩台就是兩倍。
  • EC2 之間跨 AZ 傳資料要收費。 放在不同 AZ 的兩台 EC2 互相傳資料,官方價格表列的是每 GB US$0.01,而且傳出去、收進來兩個方向會各算一次;同一個 AZ 裡傳資料則不收費。

用前面的兩份方案來看:方案甲、方案乙都是兩台主機,主機的費用一樣;差別在方案乙的兩台分在不同 AZ,如果兩台之間要互相傳資料,同一個 AZ 裡的兩台,走 AWS 內部的位址互相連,傳資料不收費

不過如果繞到對外的公開網址,就算在同一個 AZ,價格表一樣列每 GB US$0.01。內部位址和對外網址差在哪,後面講到 VPC 時會再分享到~

出事的時候,兩份方案各剩下什麼?

要回答這個問題,得先知道這次出了什麼事。

同樣是網站出狀況,範圍可能差很多:可能只是主機上的後端程式當機,主機本身還在運作;可能是整台主機故障;也可能是整個 AZ 都不能用。

https://ithelp.ithome.com.tw/upload/images/20260916/20040221eqFaP5ErOA.png

判斷之前,先說清楚這篇說的正常的主機:主機本身有在運作,上面的後端程式也在執行。主機還在運作、程式卻當掉了,就不算。

判斷的時候,我會建議照兩個步驟來:

  1. 先把事件的範圍圈出來。 說整個 AZ 不可用,就圈整個 AZ;說只有某個程式當機,就只圈那個程式。範圍不要自己放大,也不要自己縮小。
  2. 再看哪些主機在圈外。 在圈外、本身也正常的主機,才算這次事件後還正常的主機。

那麼,我們拿兩個事件來試試看。

事件一:AZ 1 整個不可用,AZ 2 正常

這次的條件是:AZ 1 整個不可用

AZ 2 正常,AZ 2 裡的主機和程式本身也都正常。

那就先圈範圍:整個 AZ 1~

https://ithelp.ithome.com.tw/upload/images/20260916/200402211COf1uUZnb.png

再看圈外。方案甲的 Web 1、Web 2 都在 AZ 1,兩台都在圈內,這次沒有留下正常的主機

方案乙的 Web 1 在 AZ 1 受影響,但 Web 2 在 AZ 2,還有一台正常的主機

事件二:換成只有 Web 1 的程式當機

https://ithelp.ithome.com.tw/upload/images/20260916/20040221gA637T43OS.png

現在的狀況是:只有 Web 1 上的後端程式當機,Web 1 主機本身還在運作;AZ 1、AZ 2 都正常,兩份方案的 Web 2,主機和程式也都正常。

一樣先圈範圍:這次只圈「Web 1 上的後端程式」,範圍比事件一小很多。Web 1 的程式當掉了,照前面的定義,Web 1 這次不算正常的主機。

再看圈外:兩份方案的 Web 2 都不在這個範圍裡,本身也正常。所以這次兩份方案都還有一台正常的 Web 2

小結論

我們沒辦法事先挑哪個 AZ 出事。一個 AZ 放兩台,只要剛好是那個 AZ 出事,兩台就一起停;兩個 AZ 各放一台,不管是哪一個 AZ 出事,都還留得下一台。

所以兩個 AZ 各放一台的好處,是多擋住了「一個 AZ 不能用」這種事件,而且主機一樣是兩台、不用多開;要多付的,是兩台之間跨 AZ 傳資料的費用。

那實務上比較推薦哪一種?如果這個網站是要真的給使用者用的,我會建議先用兩個 AZ 各放一台AWS 官方的 Region 與 AZ 說明把「把應用程式部署在多個 AZ」寫成最佳實務,這樣就算一個 AZ 出事,網站還有機會繼續服務

AWS 講架構的官方文件 Well-Architected 說得更直接:正式上線的服務,至少要部署在同一個 Region 的兩個 AZ

那什麼時候才輪到一個 AZ 放兩台?除了剛才說的傳輸費用,AWS 在 EC2 裡其實有一種設定,是刻意把幾台主機集中在同一個 AZ、擺得很近,官方文件建議用在很在意網路延遲或傳輸量、而且流量大多發生在這幾台主機之間的服務。

如果只是自己練習、測試,停下來也沒有真正的使用者受影響,那不用急著為「AZ 出事」多做準備哩~

最後來總結下:

重點 記住這句
Region、AZ、資料中心 Region 是地理區域,AZ 是 Region 裡彼此隔開的位置,資料中心是 AZ 裡實際放機器的地方
EC2 和 AZ 一台 EC2 只放在一個 AZ,建立時就決定,畫面上選的是子網路;想分在兩個 AZ,就要建立兩台
一個 AZ 放兩台 擋得住一台壞掉;但那個 AZ 一出事,兩台一起停。走內部位址傳資料不收費
兩個 AZ 各放一台 一台壞掉、一個 AZ 出事都擋得住;主機一樣是兩台,多付跨 AZ 傳資料的費用。正式上線的服務,實務上比較推薦這種
判斷的方法 先把事件的範圍圈出來,再看圈外還有沒有正常的主機

下次聽到「我們準備了兩台主機,所以很安全」

相信你直覺就會想問:

  1. 這兩台實際上分別在哪個 AZ?
  2. 我們擔心的事件,範圍有多大?
  3. 出事之後,使用者的請求有辦法送到還正常的主機嗎?

希望這個 AZ 篇對你有幫助,我們下篇見 :D


上一篇
網站放上雲端,是放在哪裡?先認識 AWS Region
下一篇
分在兩個 AZ,就不怕整個 Region 出事嗎?
系列文
從前後端踏上 AWS 雲端架構勇者之路9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言