指南

什麼是無伺服器(Serverless)?無伺服器運算簡單解說

無伺服器係一種運行程式碼嘅方式,你唔需要自己設定或者管理任何伺服器。你將程式碼交俾雲端供應商,而佢只會喺有嘢觸發時先運行嗰段程式碼,例如一個網頁請求、一個上載嘅檔案,或者一個付款通知,然後就停止。你一般只需要為程式碼實際運行嘅時間付費,而唔係為一部閒置著嘅機器付費。

用 AI 建造嘢時,點解無伺服器重要

用 AI 建造應用程式時,你睇託管選項或者程式碼,就好可能會遇到「無伺服器函式」、「邊緣函式」(edge functions)或者「雲端函式」。好多託管平台都提供呢類功能,而有啲 AI 建構器亦會以呢種方式部署後端。明白呢個模式,有助你解答三條實際問題:

  • 成本。 冇人用嘅時候,你嘅應用程式會唔會都要俾錢?
  • 速度。 點解一段冷清時間之後嘅第一個請求會慢啲?
  • 限制。 點解一個耗時嘅任務(例如生成一份大型報告,或者處理一段影片)會超時?

同時,知道無伺服器唔係咩嘢,亦好有幫助:佢唔係代表冇後端。你仍然有伺服器端程式碼,只係由別人負責運行部機器。基礎知識可以睇什麼係伺服器。

日常生活比喻

傳統伺服器就好似擁有一部私家車。佢一直都喺度,隨時可以即刻開行,但不論你有冇用佢,你都要付費:保險、泊車、保養。

無伺服器就好似叫的士。你只需要為你搭嘅每一程付費;如果一百個人同時需要車,就會來一百部的士。不過,車子到達可能要等一陣(即冷啟動),每程都有最長行車時間,而且司機唔會記得你上次嘅車程(函式係無狀態,stateless)。

無伺服器函式點運作

最常見嘅形式稱為函式即服務(functions as a service):

  1. 你寫一個函式,即一段處理某類事件嘅小程式碼,例如「處理發送到 /api/bookings 嘅 POST 請求」。
  2. 你部署佢。 供應商會儲存佢,並將佢連接到一個觸發器:一個網址、一個排程、儲存空間入面嘅新檔案,或者佇列中嘅一則訊息。
  3. 事件到達。 供應商會啟動你函式嘅一個副本(或者重用一個已經暖機嘅副本),運行佢,然後返回結果。
  4. 自動擴展。 如果同時有一千個請求到達,供應商會並行運行多個副本,上限視乎你帳戶嘅限制。
  5. 進入閒置。 流量停止時,副本就會關閉。冇嘢運行,就唔使為運算付費。

一個細小嘅 JavaScript 無伺服器函式可能會咁樣寫:

export default async function handler(request) {
  const { name } = await request.json();
  return Response.json({ message: `Hello, ${name}` });
}

你唔需要寫程式碼去啟動伺服器、開啟埠口或者保持程序運行。呢啲全部都由平台處理。

「無伺服器」亦會被較寬鬆地用於其他會自動擴展、按用量收費嘅代管服務,例如無伺服器資料庫,佢哋閒置時就會暫停。

常見名詞

名詞意思
函式(Function,FaaS)供應商按需要運行嘅一個細小程式碼單元。
觸發器/事件(Trigger/event)啟動函式嘅原因,例如 HTTP 請求、檔案上載、計時器或者佇列訊息。
冷啟動(Cold start)函式嘅新副本要先啟動,才能處理請求所造成嘅延遲。
暖機(Warm)一個已經運行中、可以即時回應嘅副本。
無狀態(Stateless)函式喺每次運行之間唔會保留記憶。任何必須持續保存嘅嘢都要放入資料庫或者儲存空間。
超時(Timeout)一次運行所允許嘅最長時間。例如 AWS Lambda 嘅上限係 15 分鐘;好多平台預設嘅時限遠遠短於呢個。
邊緣函式(Edge function)喺好多個靠近用戶嘅地點運行嘅函式,通常限制較嚴。
縮減至零(Scale to zero)冇流量時,唔運行任何嘢,亦唔需要為運算付費。

實例:一個細型預約網站

一間瑜伽室嘅預約網站,每個星期日晚上新課表推出時會有一陣訪問高峰,平日其他時間就幾乎冇人。

  • 用一部長期開著嘅伺服器,瑜伽室就要 24 小時付費租用一部機器,容量要配合星期日晚上嘅高峰,而平時大部分時間都閒置。
  • 用無伺服器函式,GET /api/classes 同 POST /api/bookings 都係函式。星期日嘅高峰會自動啟動多個副本;而喺一個寧靜嘅星期二早上,幾乎冇嘢運行,賬單亦接近零。

取捨亦會出現。星期二早上第一個打開網站嘅人,可能要多等一陣,因為冷啟動。資料庫要處理來自多個函式副本嘅大量短暫連線,或者需要連線池(connection pooler)。而如果瑜伽室之後想加入「為所有人生成年度出席 PDF」嘅任務,佢可能會超出函式嘅時限,需要另外喺其他地方運行。

無伺服器幾時啱用,幾時唔啱

較啱用較唔啱用
流量低、突然湧現或者難以預測持續大量流量,此時一直開著嘅伺服器可能更平
短暫嘅請求/回應任務:API、表格處理器、webhook長時間運行嘅工作:大型影片處理、大數據匯入
唔想管理伺服器嘅小團隊需要保持即時連線開啟嘅應用程式(例如部分聊天或者多人遊戲功能),除非平台支援
事件處理:「當檔案上載時,製作縮圖」需要喺多次請求之間保留大量記憶體嘅應用程式

常見誤解

  • 「無伺服器即係冇後端。」 意思係冇伺服器需要管理。你仍然要寫同保護後端程式碼。
  • 「無伺服器一定較平。」 流量少時係平,但如果流量高而且穩定,按每次請求計費可以累積成一筆大數目。
  • 「無伺服器可以無限擴展。」 平台有並發上限,而你嘅資料庫可能會比函式先成為瓶頸。
  • 「喺函式入面儲存嘅檔案,下次都會在。」 本地儲存是暫時性嘅。應該使用資料庫或者檔案儲存空間。
  • 「縮減至零即係無伺服器。」 兩者有關連,但並不完全相同。有啲平台會將你嘅應用程式當作一般伺服器運行,閒置時休眠,並喺下一個請求到達時喚醒。佢哋能夠節省類似嘅費用,首個請求延遲亦相近,但冇函式式嘅每次請求時限。

要問你嘅 AI 建構器嘅嘢

  • 「呢個後端會以無伺服器函式運行,定係以長期開著或者會休眠嘅伺服器運行?對成本有咩影響?」
  • 「有冇任務可能會超出平台嘅時限?如果有,我哋應該點樣處理?」
  • 「所有必須持續保存嘅嘢,都要儲存喺資料庫或者檔案儲存空間,而唔係記憶體或者本地檔案。」
  • 「如果好多副本同時運行,資料庫連線應該點樣管理?」
  • 「應用程式閒置之後,第一個請求會有幾多延遲?」

Mythex 點樣託管應用程式

Mythex 唔會將其託管描述為無伺服器函式。你發布時,應用程式會以一般網頁應用程式或者容器嘅形式運行,由 Mythex 為你管理,你唔需要設定任何託管。佢係縮減至零:已發布嘅應用程式同其資料庫閒置時會休眠,並喺下一次訪問時喚醒;休眠嘅應用程式唔會有運算費用,只有流量高峰時先會啟動額外機器(Pro 計劃每項服務最多 3 部)。附加嘅 Postgres 資料庫亦會喺閒置 5 分鐘後休眠,並按佢保持運行嘅時間收費。所以你可以享有「用多少付多少」嘅大部分好處,而一段冷清時間之後,首個請求嘅延遲亦會類似。詳情可以參閱文件中嘅託管限制,以及我哋嘅指南網頁託管同減少託管成本。

常見問題

簡單嚟講,無伺服器係咩意思?

無伺服器即係你將程式碼交俾雲端供應商,佢只喺有需要嗰陣先運行,例如有請求到達時,而你唔使設定或者照顧任何伺服器。你通常只需要為程式實際運行嘅時間付費,而唔係為一部長期開著嘅機器付費。

無伺服器真係冇伺服器嗎?

其實有伺服器,只係你唔使管理佢哋。供應商喺自己嘅機器上運行你嘅程式碼,請求到達時先啟動,負載增加時就擴展,閒置時就關閉。

什麼係冷啟動(cold start)?

冷啟動係無伺服器函式閒置一段時間之後運行時,額外多出嚟嘅延遲,因為供應商要先啟動一個全新嘅副本。視乎平台、語言同程式碼大小,延遲可以由幾乎察覺唔到,到一秒或者以上不等。

無伺服器比一般伺服器平嗎?

對於流量少或者時多時少嘅應用程式,通常係平,因為閒置時你幾乎唔使付費。對於流量龐大而且持續嘅應用程式,一部長期開著嘅伺服器反而可能更平。要視乎你嘅使用模式同供應商嘅收費。

無伺服器平台有咩例子?

知名例子包括 AWS Lambda、Google Cloud Run functions、Azure Functions、Cloudflare Workers,以及 Vercel 同 Netlify 等託管平台嘅函式功能。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)