National Taiwan University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

2

Local AI

--

Uedu Code

--

台灣大學 AQI 70 24°C PM2.5 17
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 05

從一台到很多台:擴展與成本

水平擴展、自動擴展規則與費用估算
Interaction 20 minute(s)

Learning Objectives

  • 比較垂直擴展與水平擴展的做法、優點與限制
  • 說明負載平衡器在水平擴展中的角色,以及伺服器為什麼最好不要自己保存使用者狀態
  • 看懂自動擴展規則:最少與最多台數、CPU 門檻、連續觀察時間與冷卻時間
  • 比較按時計費與按次計價(無伺服器),並養成關機、設定預算警示的習慣

選課當天,網站撐得住嗎?

平常一個網站可能只有零星幾個人在用;到了選課開放的那一刻、或作業截止前一小時,同時連線的人可能暴增好幾十倍。 上一課的網站只有一台主機,流量一大就會開始排隊:回應越來越慢,最後逾時。

要讓網站撐住尖峰,有兩個方向:

方向 做法 比喻
垂直擴展(scale up) 把這台主機換成更大的規格:更多 vCPU、更多記憶體 把一個收銀員換成手腳更快的收銀員
水平擴展(scale out) 多開幾台一樣的主機,用負載平衡器分攤請求 多開幾個收銀台
垂直擴展 水平擴展
優點 簡單,程式幾乎不用改 理論上可以一直加;一台壞了其他台還在(順便解決單點故障)
限制 單台機器有規格上限;換規格通常要重新開機 程式要設計成可以多台同時執行;架構比較複雜
適合 資料庫這類不容易拆開的服務、流量穩定的小網站 網頁伺服器、API 這類可以複製很多份的服務

雲端時代的網站,大多以水平擴展為主。

水平擴展的前提:伺服器不要記住使用者

水平擴展時,同一位使用者的第一個請求可能被負載平衡器送到伺服器 1,下一個請求送到伺服器 3。 如果登入狀態、購物車只存在伺服器 1 的記憶體或硬碟裡,換到伺服器 3 就「忘記你是誰」了。

所以可以水平擴展的伺服器,通常設計成無狀態(stateless):

狀態 放在哪裡
會員、成績、留言 共用的資料庫
登入狀態(session) 共用的快取服務或資料庫,或存在加密的 Cookie 裡
使用者上傳的檔案 共用的物件儲存(object storage),不要存在某一台伺服器的硬碟

這樣每台伺服器都一模一樣,隨時可以加一台、關一台,不影響使用者。這也是下一個主題「自動擴展」能夠成立的前提。

自動擴展:讓系統自己加機器、減機器

人工盯著流量加減機器太累,也來不及。雲端服務商提供自動擴展(autoscaling):你寫好規則,系統依監控數據自動調整台數。 一組典型的規則長這樣:

設定 意思 本課模擬器的設定(示意)
最少台數 再閒也要保留幾台 1 台
最多台數 再忙也不超過幾台,避免帳單失控 6 台
擴充門檻(scale out) 什麼情況要加機器 平均 CPU 連續 2 個時間單位超過 70%,加一台
縮減門檻(scale in) 什麼情況要減機器 平均 CPU 連續 3 個時間單位低於 30%,減一台

為什麼要「連續」好幾個時間單位?CPU 用量本來就會上下跳動,只看一瞬間就加減機器,台數會來回震盪。 很多服務還會設定冷卻時間(cooldown):加完一台之後先等一段時間,讓新機器開機、開始分擔流量,再判斷要不要繼續加。 注意加機器不是瞬間完成的,新機器要開機、啟動程式,這段期間使用者仍然會感受到變慢。

縮減比擴充更保守(觀察更久),是常見的設計:寧可多付一點錢,也不要剛減完機器流量又湧上來。

互動練習:自動擴展

模擬器每 0.6 秒前進一個時間單位,伺服器的處理能力、回應時間與費用都是示意值。依任務操作:先不要勾選自動擴展,按「上課尖峰(600)」把流量拉到尖峰,看回應時間變多慢;接著勾選「開啟自動擴展」,流量維持在上課尖峰,觀察伺服器一台一台加上去,直到回應時間回到 300 ms 以下(圖上的參考線);最後按「平常(100)」讓流量回落,等一下,看伺服器自動減少。同時留意「累計費用」怎麼增加。完成後可以再試「選課當天(1100)」:台數加到上限 6 台還是不夠快,想一想最多台數該怎麼訂。

雲端怎麼收費

剛才的累計費用會隨台數增加,因為最常見的計價方式是按時計費:機器開著多久,就付多久的錢。整理常見的計價方式:

計價方式 怎麼算 適合 要注意
按時計費(虛擬機) 規格越大、開越久越貴;閒著沒人用也照算 一直有人在用的服務 忘了關機最容易爆帳單
按次計價(無伺服器,serverless) 依請求次數與實際執行時間計費;沒有請求時幾乎不收費 流量很少或忽高忽低的服務、偶爾才跑一次的工作 很久沒人用時,第一個請求要等平台準備執行環境(冷啟動);流量很大時反而可能比較貴
儲存 依存放的資料量與時間 硬碟、備份、物件儲存 虛擬機關機後,硬碟通常仍在計費
網路傳輸 資料從雲端傳出去的量 影片、大型檔案下載 常被忽略;CDN 可以降低部分成本
長期承諾 承諾使用一段時間換取比較低的單價 長期、穩定的正式服務 中途不用也要付;學生專題通常用不到

無伺服器(serverless)不是真的沒有伺服器,而是你只上傳一段函數或程式,伺服器由平台在有請求時才準備、用完收回, 你不必管理任何一台機器。延伸閱讀可看 /cs 的〈雲端運算(進階)〉文章。

互動練習:估算一學期的雲端費用

所有單價都是示意值,只用來理解「怎麼算」,不是任何服務商的報價。依任務操作:先選一個 vCPU 與記憶體的規格,看虛擬機每月大約多少錢;再把「每天開機(小時)」從 24 降到 8 小時以下,看每月省了多少,也對照「如果 24 小時都開著」那一列;最後調整「每月請求(萬次)」,比較按次計價在請求少與請求多時,什麼時候比較划算。

不讓帳單嚇到你:五個習慣

雲端最常見的意外,不是被駭客攻擊,而是忘了關掉的資源在背景默默計費。做專題時養成這些習慣:

習慣 做法
不用就關機 只在展示或開發時開機。注意「關機」通常只停掉運算費用,硬碟與保留的公用 IP 可能仍在計費
用完就刪除 學期結束、專題完成後,刪掉虛擬機、硬碟、快照、負載平衡器這些資源;各家的計費細節不同,以官方說明為準
設定預算警示 在帳單頁面設定預算,花費到某個比例(例如 50%、80%、100%)時寄信通知你。警示只是通知,多半不會自動停機
從小規格開始 先用最小的規格,真的不夠再升級;搭配自動擴展時一定要設定最多台數
每週看一次帳單 找出不認得的項目;資源加上標籤(例如 project=final-demo),比較容易分辨

免費額度與學生方案能省下不少錢,但每家的規則不同、也常常調整。開始使用前先讀清楚,並設定預算警示,第 06 課會介紹怎麼找。

想一想:擴展

1.

把網站從一台 2 vCPU 的主機換成一台 8 vCPU 的主機,這屬於哪一種擴展?

2.

網站改成三台伺服器輪流處理請求後,使用者常常被登出。最可能的原因是?

3.

自動擴展規則為什麼通常要求 CPU「連續一段時間」超過門檻才加機器,並設定冷卻時間?

第 1 次作答

想一想:成本

1.

一個小組專題網站,只有每週上課時段會有人使用。下面哪一種做法最能控制費用?

2.

專題結束後你把虛擬機「關機」了。下面哪一個說法比較正確?

第 1 次作答

重點精華回顧

  • 垂直擴展換更大的機器,簡單但有上限;水平擴展多開幾台、用負載平衡器分攤,是雲端的主流,也順便避免單點故障。
  • 水平擴展的伺服器要無狀態:登入狀態、上傳檔案、資料都放在共用的地方。
  • 自動擴展規則:最少與最多台數、CPU 擴充與縮減門檻、連續觀察時間與冷卻時間;新機器開機需要時間。
  • 按時計費閒著也照算;按次計價(無伺服器)沒有請求就幾乎不收費,但有冷啟動,流量大時不一定便宜。儲存與網路傳輸也要算。
  • 不用就關機、用完就刪除、設定預算警示、從小規格開始、每週看帳單。本課所有金額都是示意值。
這一課完成了!
Next lesson:部署上線與雲端服務商
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。