階段 8 · 上線與維運(部署)
Serverless
不用自己管理伺服器,由平台按請求執行後端程式。
先用一句話理解
不用自己管理伺服器,由平台按請求執行後端程式。
打個比方
像叫計程車,不用買車養車,需要時才叫。
什麼時候會遇到
流量不固定、API 輕量、想減少維運時。
再往深一點看
Serverless 不是「沒有伺服器」,而是「你不用管伺服器」——平台在接到請求時啟動你的函式、執行完畢後把資源釋放,你只為實際執行的次數和時間付費,不是租一台持續在跑的機器。它和傳統 hosting 的差別在於:傳統伺服器(如 Render 的 web service)是一個長時間跑著的程序,serverless function(如 Vercel 的 API routes)是「用時才啟動、用完即丟」。這帶來兩個重要限制:一是 timeout,函式執行時間有上限(Vercel 免費版 10 秒、付費版最多 300 秒);二是冷啟動(cold start),函式久沒被呼叫後第一次啟動會慢一點。Serverless 最適合的是輕量短暫的 API 請求、webhook 處理、定時小工作,不適合影片轉檔、大型資料處理這類需要長時間或持續記憶體狀態的任務。
舉個例子
你的 Next.js 在 Vercel 上,每個 `/api/` 路由就是一個 serverless function——使用者呼叫 `/api/send-email` 時 Vercel 啟動一個 function 實例,呼叫 Resend API 寄出信件後函式結束,Vercel 回收資源,下次再來才重新啟動,你不需要管伺服器有沒有在跑、記憶體夠不夠。
常見誤解
- - 在 serverless function 裡執行長時間工作(影片轉檔、大量 PDF 產生、爬蟲),碰到 timeout 限制工作中途被強制終止,結果既沒完成又耗費了費用。
- - 在 serverless function 外部宣告「全域變數」來暫存狀態(例如快取 DB 連線),以為不同請求可以共享,但 serverless 每次可能啟動不同實例,全域狀態根本不可靠。
- - 沒意識到冷啟動問題,使用者第一個請求要等幾百毫秒以上,以為是程式效能問題一直找 bug,其實是 function 剛啟動的正常行為。
相關名詞
相關服務
VercelCloudflare PagesAWS