Learning Objectives
- 依序說出在瀏覽器輸入網址後,請求經過的各站:DNS、負載平衡器、伺服器、資料庫
- 說明伺服器所在區域為什麼會影響等待時間(延遲)
- 說明 HTTPS 保護了什麼,以及 CDN 為什麼能讓圖片、CSS 這類靜態檔案更快送達
- 說明備援(redundancy)與負載平衡器如何讓一台伺服器故障時網站仍然能用
按下 Enter 之後發生了什麼事
在瀏覽器輸入 https://example.com、按下 Enter,不到一秒網頁就出現了。這一秒裡,你的請求其實跑了好幾站:
瀏覽器 ──① DNS:網域名稱換成 IP──▶ 知道要連到 203.0.113.10
──② 建立連線+HTTPS 加密──▶ 負載平衡器
──③ 挑一台健康的伺服器──▶ 伺服器
──④ 查資料──▶ 資料庫
◀──────────────⑤ 組好的網頁一路傳回來──────────────────┘
──⑥ 網頁裡的圖片、CSS、JavaScript──▶ CDN(離你最近的節點)
把網站放上雲端之後,這條路上的每一站幾乎都是你可以設定的雲端服務。 這一課先把整條路走一遍,後面幾課再分別深入:第 03、04 課自己架一台伺服器,第 05 課處理負載平衡與擴展。
① DNS:把網域名稱換成 IP 位址
網路上的電腦靠 IP 位址找到彼此,例如 203.0.113.10;但人比較容易記 example.com 這樣的網域名稱。
DNS(Domain Name System,網域名稱系統)就像網路的電話簿,負責把名稱換成位址。
| 步驟 | 發生什麼事 |
|---|---|
| 查快取 | 瀏覽器與作業系統先看自己最近有沒有查過;有就直接用 |
| 問 DNS 伺服器 | 沒有的話,問網路業者或學校提供的 DNS 伺服器 |
| 一層一層往下問 | 這台 DNS 伺服器再依序問根伺服器、.com 的伺服器、example.com 的權威伺服器,拿到答案 |
| 記住一段時間 | 答案會被快取一段時間(TTL),下次就不用再問 |
當你在雲端架好網站,要做的事就是在網域的 DNS 設定裡加一筆 A 紀錄:example.com → 203.0.113.10。
之後全世界查 example.com,都會得到你那台主機的位址。
換了主機 IP 之後,有些人的電腦還連到舊位址?那是因為舊答案還在快取裡,等 TTL 過期就會更新。
② 連線與 HTTPS:先把通道加密
知道 IP 之後,瀏覽器要和對方建立連線。網址開頭是 https:// 時,雙方還會先進行一次 TLS 交握:
- 伺服器出示憑證(certificate),證明「我真的是 example.com」;憑證由瀏覽器信任的憑證機構簽發
- 雙方協調出一把只有彼此知道的加密金鑰
- 之後傳送的網址路徑、表單內容、Cookie 都經過加密
| HTTP | HTTPS | |
|---|---|---|
| 內容 | 明文傳送,路上的人看得到 | 加密傳送 |
| 身分 | 無法確認對方是不是真的網站 | 憑證證明網站身分 |
| 預設連接埠 | 80 | 443 |
HTTPS 防的是「傳送途中被偷看或竄改」,例如在公共 Wi-Fi 上被人攔截登入密碼。它不保證網站本身是好人: 釣魚網站也可以申請到憑證。交握需要來回好幾趟,所以伺服器離你越遠,這一步花的時間越多。
區域與延遲:距離是物理問題
雲端服務商在世界各地都有機房,分成好幾個區域(region),例如東亞、美國西岸、歐洲; 一個區域裡通常還有好幾個彼此獨立的機房,叫可用區(availability zone)。建立伺服器時,你要選它放在哪個區域。
請求在網路上傳送需要時間,這段時間叫延遲(latency)。延遲有一部分是物理限制: 訊號在光纖裡跑得很快,但台灣到美國或歐洲有上萬公里,來回一趟就要花上一段不能再壓縮的時間;而建立 HTTPS 連線還要來回好幾趟。
| 伺服器所在區域 | 從台灣連過去,來回一趟大約(示意) |
|---|---|
| 台灣 | 數毫秒到十幾毫秒 |
| 日本 | 幾十毫秒 |
| 美國西岸 | 一百多毫秒 |
| 歐洲 | 兩百多毫秒 |
以上都是示意的量級,實際數字依網路業者、路由與時段而不同。選區域的原則很簡單:放在離使用者近的地方。 同學都在台灣,就不要把專題伺服器放在歐洲。
③④ 負載平衡器、伺服器與資料庫
使用者多的網站,不會只有一台伺服器。請求先到負載平衡器(load balancer),由它把請求分配給後面好幾台伺服器:
| 站 | 工作 |
|---|---|
| 負載平衡器 | 對外只有一個入口;把請求輪流分給後面的伺服器,並定期做健康檢查,自動避開沒有回應的那一台 |
| 伺服器 | 執行你的程式(例如 Nginx+Flask),依照請求產生網頁 |
| 資料庫 | 存放會員、成績、留言等資料;每台伺服器都連到同一個資料庫,所以不管請求被分到哪一台,看到的資料都一樣 |
HTTPS 的加密常常在負載平衡器這一站就解開,後面的伺服器只要處理一般的請求,這叫 TLS 終止(TLS termination)。
伺服器把網頁組好之後,再沿著原路經過負載平衡器傳回你的瀏覽器。瀏覽器拿到 HTML,發現裡面還引用了圖片、CSS、JavaScript, 於是又送出更多請求,這就輪到 CDN 上場。
⑥ CDN:把靜態檔案放到離你近的地方
網頁裡有兩種內容:
- 動態內容:每個人看到的不一樣,例如「你的成績」,要由伺服器即時查資料庫產生
- 靜態檔案:每個人拿到的都一樣,例如 Logo 圖片、CSS、JavaScript、影片
靜態檔案不需要每次都跑回遠方的伺服器。CDN(Content Delivery Network,內容傳遞網路)在世界各地放了很多節點, 把靜態檔案複製一份放在離使用者近的節點上。台灣的使用者從台灣的節點拿圖片,美國的使用者從美國的節點拿。
| 好處 | 說明 |
|---|---|
| 比較快 | 距離短,延遲小 |
| 減輕伺服器負擔 | 大部分的流量(圖片、影片)由 CDN 處理,伺服器專心處理動態請求 |
| 比較耐得住尖峰 | 大量使用者同時下載同一張圖片時,由很多個節點分攤 |
改了 CSS 卻沒生效?可能是 CDN 或瀏覽器還在用快取的舊檔。常見的做法是讓檔名帶版本號,例如
style.v2.css。
備援:不要讓一台機器決定網站的生死
剛才的模擬器裡,關掉一台伺服器,網站照樣能開,因為負載平衡器把請求送到其他台。這就是備援(redundancy): 重要的元件準備不只一份,壞掉一份還有其他份頂著。
| 元件 | 常見的備援做法 |
|---|---|
| 伺服器 | 好幾台放在負載平衡器後面,最好分散在不同的可用區 |
| 資料庫 | 主要資料庫之外,另有即時同步的備用資料庫,主要的壞了就切換過去;另外定期備份 |
| 機房 | 重要服務分散在不同可用區,甚至不同區域,一個機房停電不會全部停擺 |
| DNS、CDN | 服務商本身就分散在全球很多節點 |
只有一台伺服器時,它就是單點故障(single point of failure):它一停,整個網站就停。
如果把所有伺服器都關掉,負載平衡器找不到任何可以處理的伺服器,使用者會看到 502 Bad Gateway 這類錯誤。
備援要花錢:兩台伺服器就要付兩台的費用。專題展示可以先從一台開始,但要知道風險在哪裡;第 04 課會親身體驗單點故障。
想一想:請求的路線
在瀏覽器輸入 https://example.com 後,最先要完成的是哪一件事?
你的同學都在台灣,為什麼專題伺服器不建議放在歐洲的區域?
下面哪一種內容最適合交給 CDN 傳送?
想一想:HTTPS 與備援
網址列出現 https:// 與鎖頭圖示,代表什麼?
三台伺服器放在負載平衡器後面,其中一台當機了。使用者最可能遇到什麼情況?
重點精華回顧
- 一次請求的路線:DNS 把網域換成 IP → 建立連線與 HTTPS 加密 → 負載平衡器 → 伺服器 → 資料庫 → 原路傳回;網頁裡的靜態檔案再由 CDN 送達。
- DNS 像電話簿;架好網站後,在網域的 DNS 設定加一筆 A 紀錄指向主機 IP。查詢結果會被快取一段時間(TTL)。
- HTTPS 加密傳送內容並用憑證證明網站身分;它不保證網站本身可信。
- 延遲有一部分來自物理距離;伺服器要放在離使用者近的區域。本課的毫秒數都是示意值。
- 負載平衡器把請求分給多台伺服器,並用健康檢查避開故障的那一台;只有一台伺服器時,它就是單點故障。
- CDN 把靜態檔案放在離使用者近的節點,比較快,也減輕伺服器的負擔。