看板 Soft_Job ※ 圖文整理 回首頁

[情報] 月付 12 美金伺服器能扛多少人?

作者:chinghanho
時間:2026-09-29(Asia/Taipei)
來源:Arjay McCandless/13:18/2026-09-25/en-US
月付 12 美金伺服器能扛多少使用者?影片封面
▲ YouTube 封面:一台 $12 server,到底能撐多少人同時在用?
不是紙上算帳——租一台最便宜的機器,灌到它壞掉,再看兩次小快取能多扛多少。

一、一台機器、三件東西全塞進去

Arjay 本來想用 AWS,帳號一堆鳥事之後改租 DigitalOcean 的 Basic Droplet:月付 12 美金、1 顆共享 vCPU、2 GB RAM、50 GB SSD,系統是 Ubuntu 24.04。

流量進來先過 Nginx(反向代理),再丟給 Node.js 後端,資料放 Postgres。三個都在同一台。沒有 Redis、沒有 CDN、沒有外面託管的資料庫、沒有自動擴展、沒有 Docker、沒有 Kubernetes——刻意用「有人會真的這樣上線」的極簡架構。

月付 12 美金規格:1 shared vCPU、2 GB RAM
▲ 實驗主角:$12/月、1 shared vCPU、2 GB RAM,一台機器跑完全部。

二、應用不是 Hello World

他做了一個迷你社群:讀 feed、開單篇、按讚、發文(幾個 GET/POST)。資料庫先灌好 5 萬用戶、50 萬貼文、兩百多萬讚,約 360 MB,有該有的 index,Postgres 也依記憶體調過——不是故意做爛來衝戲劇數字。

三、「使用者」是什麼?用 k6 模擬真人

k6 是產生虛擬使用者的壓測工具。每個虛擬使用者會:讀 feed → 等 3–7 秒 → 開貼文 → 再等 → 15% 機率按讚、2% 機率發文 → 再等幾秒 → 迴圈。平均一圈約 20 秒、兩次多一點請求,所以一個「同時活躍的人」大概只有 0.1 req/s。

重點:不是同一毫秒打 2,500 發;是 2,500 個人各自在逛。每個人有自己的帳號跟 JWT,不是共用同一個身分。

四、壓測機跟被測機分開

流量產生器若跟被測應用同機,會吃掉你要量的 CPU/RAM,實驗就髒了。他另租一台較大的 droplet(4 vCPU/8 GB),整個實驗只開約四小時,費用不到一美金;兩台同在紐約機房,RTT 不到 1 ms,量到的幾乎是應用本身,不是跨網延遲。

不要把 k6 跟被測應用放同一台
▲ 同機跑 k6 會搶資源,等於污染實驗;負載產生器要獨立開一台。

五、過關標準先講清楚

只回 200 但每頁等 30 秒,這種「撐住了」沒人要用。

六、基準結果:大約 2,500 同時活躍

記得:這是「同一瞬間在用」的人,不是註冊數或日活。2,500 concurrent 換算成日活,可能是好幾萬,看流量尖峰怎麼長。

1,000 與 2,000 人延遲分布:尾巴先壞
▲ 1k→2k:中位數幾乎沒變,p95 卻慢了約 8 倍——平均還好時,最慢那 5% 已經在叫。

七、到底是什麼壞掉?

不是 RAM(才用約一半、沒有 swap)、不是 Postgres(活躍查詢很少)、不是磁碟(幾乎全在記憶體、cache hit 極高)、不是網路(遠低於 1 Gbit)。

是 CPU。 2.5k 約 80%、3k 進 90%、4k 接近 99%。請求進來比 CPU 做完還快,佇列越堆越長,延遲就爆炸。共享 CPU 的 steal 大多只有 0–2%,這次可忽略。

排除 RAM、資料庫、磁碟、網路
▲ 逐項排除後,真正撞牆的是 CPU 算力跟不上進來的請求。

八、優化一:在 Node 裡快取 feed

幾千個人其實在讀「同一份」公開 feed,卻每次都打到 Postgres 重組 JSON。他在 Node 裡加約 1 秒的記憶體快取,miss 時用 single-flight 讓同時間的請求共用一次查詢;發文會清掉快取。沒有 Redis、沒有多一台機器。

效果:同時活躍上限從約 2,500 → 4,000。同樣 4,000 人,p95 從 4.5 秒掉到約 260 ms。

Node 記憶體快取 feed 與 single-flight
▲ v2:feed 快取放在 Node 記憶體(約 1 秒),命中就不必再問 Postgres。

九、優化二:快取再往前推到 Nginx

每個請求還是要進 Node。Nginx 自己也會做 proxy cache——資料再靠近一點使用者。觀念是:資料庫最遠,再來是 app 記憶體、API gateway/Nginx、CDN、最後是使用者裝置。

單點狂打 GET /feed 的原始上限約 280 req/s → Node cache 約 1,200 → Nginx cache 超過 10,000(壓測機先爆)。換回真人行為模型:4,000、5,000 都過,大約 5,200 踩到門檻(p95 ~160 ms、p99 ~474 ms、0 錯誤)。

v1/v2/v3 單點 feed 吞吐對比
▲ 同一支 feed:無快取 ~280 → Node cache ~1,200 → Nginx cache 10,800+ req/s(壓測機先沒力)。

十、所以答案是多少?

看你的請求在幹嘛。每發都在生 AI 圖、轉碼、跑超重查詢——可能只剩兩位數。讀多、高度可快取——一台便宜機器衝到幾千同時活躍並不神祕。

想自己測:先看真實使用者怎麼打 API,用 k6 建成虛擬使用者,依自己的失敗門檻一路加流量。多數 coding agent 也寫得動 k6 script,重點是你要先定義「壞掉」長什麼樣子。

十一、看完可以帶走的


※ 來源:YouTube/Arjay McCandless《How Many Users Can a $12 Server Handle?》(13:18,2026-09-25)。非官方圖文整理,數字以影片口述與畫面為準。

推 danielschmider5069(YT): 意譯—同一份 feed 快很久等於變成靜態站;至少按讚/發文要清快取,不然數字好看但產品不真。
→ waleedalrashed1411(YT): 意譯—格式很適合學系統;下一步想看 Redis、Nginx 壓縮、再上 Cloudflare/CDN 能推多遠。
推 Spirit_njm(YT): 意譯—自己用 Go 寫遊戲服,1 vCPU/0.5 GB 模擬到約 6 萬併發 WebSocket;砍掉 Caddy、塞進程式裡。
→ gocasimiro(YT): 意譯—希望同機同架構再比 Python/Node/Go/Rust,看語言何時真的划算。
→ OP: 本篇為非官方圖文整理;留言擷取自 YouTube 留言區並精煉/意譯,非正式推文。