如何降低應用程式的託管成本
要降低託管成本,首先要找出實際在運行的是什麼,以及為何運行,然後在沒有人使用時讓一切進入休眠。在可以縮減至零的託管平台上,閒置的應用程式和休眠的資料庫費用極低,因此最大的節省通常來自移除令它們保持醒着的因素(最常見的是每隔數秒查詢資料庫的程式碼),然後是減少頻寬,並刪除無人使用的應用程式。
大部分小型應用程式的問題不在於流量,而在於「有東西一直開着」。本指南會教你如何找出並解決這個問題,並提供可以交給 AI 應用程式建置工具的提示。
你實際上要為什麼付費
小型應用程式的託管費用通常來自幾個項目。知道哪一項的費用最高,就知道應該從哪裏著手。
| 費用項目 | 主要成因 | 常見解決方法 |
|---|---|---|
| 運算(伺服器) | 機器的規格,以及運行的時數 | 讓它休眠;選擇合適的規格 |
| 資料庫 | 資料庫的大小,以及它醒着的時間 | 停止持續查詢,讓它可以休眠 |
| 頻寬 | 訪客下載的資料量 | 壓縮圖片,快取檔案 |
| 儲存空間 | 你保存的檔案和資料 | 刪除不需要的舊上載檔案、記錄及備份 |
| 第三方 API | 呼叫 AI 模型、地圖、電郵及短訊服務 | 快取結果,設定使用上限 |
許多現代的託管平台(包括 Mythex)都可以縮減至零:當沒有人使用應用程式時,伺服器會停止運行,因此不產生運算費用,並會在下次有人造訪時重新啟動。這樣一來,問題就由「我的伺服器規格有多大?」變成「我的伺服器為何一直醒着?」
第 1 步:查看費用花在哪裡
在改動任何東西之前,先打開你的託管服務的用量頁面,找出:
- 哪一個專案的費用最高。通常一個應用程式就佔了大部分的賬單。
- 哪一個類別:運算、資料庫、頻寬或儲存空間。
- 何時產生費用。 如果深夜沒有用戶時,費用仍然是一條平穩的直線,這就是某些東西令應用程式保持運行的線索。
在 Mythex 上,用量詳情 會顯示過去 30 日的用量,分為建置(AI agent)及運行(託管、頻寬、資料庫及檔案儲存),並按專案細分。
第 2 步:讓閒置的應用程式及資料庫休眠
這是大部分小型應用程式最有效的節省方法。閒置時休眠、並在下次有請求時醒來的資料庫,在非繁忙的時段幾乎不產生費用。但如果資料庫每隔數秒就被查詢一次,它便永遠不會閒置,你就要全日為它付費。
Mythex 的託管限制清楚說明了已發佈應用程式的運作方式:休眠中的應用程式不產生運算費用;資料庫以最小規格開始,忙碌時逐步擴展,閒置 5 分鐘後休眠,並按其規格乘以醒着的時間收費。因此,即使每隔數分鐘、日夜不停地查詢一次資料庫的應用程式,也會被當作一直處於忙碌狀態而收費;相反,沒有背景「閒聊」的同一個應用程式,費用則很低。
以下是一些常見會令應用程式保持醒着的情況:
- 輪詢。 頁面每隔 2 至 5 秒就問伺服器「有沒有新東西?」只要一部筆記型電腦保持該分頁開啟,資料庫就永遠不會休眠。
- 自動重新整理的儀表板,即使沒有人查看,也會按計時器重新載入資料。
- 正常運行監控工具,每分鐘 ping 應用程式一次。
- 伺服器程式碼中的背景循環,例如一個永遠運行、用來清理或同步資料的
setInterval。 - 預定的「保持活躍」請求,有人為了避免首次造訪時速度慢而加入。這些請求的運作方式就是阻止休眠,而這正是最花錢的地方。
請 AI 幫你找出這些情況:
檢查程式碼,找出任何按計時器運行,或重複查詢資料庫的部分:輪詢、setInterval、自動重新整理、背景循環。列出每一項、運行的頻率,以及在沒有人開啟頁面時是否仍然運行。暫時不要改動任何東西。
然後逐一修正:
儀表板每 3 秒會輪詢 /api/orders。請改為只在瀏覽器分頁可見時才重新整理,並將間隔由 3 秒改為 60 秒。加入一個手動重新整理按鈕。
如果你的應用程式確實需要即時更新(例如聊天或即時記分板),可以詢問是否能改為只在有事情發生時推送更新,而不是不斷詢問。對很多應用程式來說,「用戶返回分頁時才重新整理」已經足夠。
第 3 步:選擇合適的伺服器規格
規格較大的機器每小時收費較高。許多由 AI 建置的應用程式一開始使用預設規格已經足夠;問題通常出在為了解決其實是查詢緩慢的問題,而要求「更強的運算能力」。
- 保持能夠應付流量而不出錯的最小規格。
- 如果出現記憶體不足而當機,首先請 AI 檢查應用程式是否一次把太多資料載入記憶體中(例如整張資料表,而不是一頁的查詢結果)。
- 只有在量度到流量確實需要時,才增加機器數量。
在 Mythex 上,機器規格會在發佈時按應用程式的需要而選定;額外的機器只會在流量很大時啟動,流量下降後便會再次休眠。費用跟隨規格而變,所以如果你認為規格過大,可以在對話中要求改用較小的規格。
第 4 步:減少頻寬
頻寬是訪客下載的資料量。圖片通常佔最大的比重。
- 壓縮圖片,並使用 WebP 或 AVIF 等新式格式。
- 將圖片調整至實際顯示的尺寸。一張 4,000 像素的相片,如果只以 400 像素的縮圖顯示,大部分下載的資料都是浪費的。
- 對首屏以下的圖片使用延遲載入。
- 快取靜態檔案(腳本、樣式、圖片),讓回訪的用戶不用重複下載。參閱什麼是快取。
- 不要讓應用程式在每次頁面瀏覽時都提供大型檔案。
檢查應用程式中的每一張圖片。將它們調整至最大的顯示尺寸,轉換為 WebP,並對首屏以下的圖片使用延遲載入。告訴我前後的總大小。
更快的頁面與更低的頻寬通常是同時出現的,詳情請參閱如何令你的網站速度更快。
第 5 步:清理無人使用的項目
- 取消發佈舊的應用程式,例如測試部署、已完成的實驗,或去年的活動網站。
- 刪除舊的上載檔案、記錄及不需要的匯出檔案。
- 刪除你不再使用的共享預覽連結。 在 Mythex 上,開啟預覽連結會喚醒專案,並使用你的點數,因此一個被遺忘、卻仍有人不斷開啟的連結,依然會產生費用。
- 移除未使用的服務,例如應用程式已不再呼叫的 API 伺服器或背景工作程式。
第 6 步:考慮改用靜態網站
如果你的網站沒有登入功能、沒有儲存用戶資料,也沒有伺服器邏輯(例如宣傳網站、個人作品集、餐牌),它就可以是一個靜態網站:純粹以 CDN 提供的檔案。它不需要運行伺服器或資料庫。在 Mythex 上,靜態網站閒置時不會消耗點數。
這個網站沒有登入功能,也沒有儲存資料。能否改建為沒有伺服器的靜態網站?我們會失去什麼?
第 7 步:留意付費 API 的用量
對於呼叫 AI 模型、地圖或短訊服務的應用程式,第三方的費用可能遠超託管費用。
- 任何按次收費的功能,都要求用戶登入。
- 設定每位用戶的使用上限(參閱什麼是速率限制)。
- 快取不會改變的結果,例如同一地址的地理編碼。
- 在每個服務供應商設定消費上限或提醒。
常見錯誤
- 憑估計而非量度。 先查看用量細分;最昂貴的部分往往與你預期的不同。
- 買較大的伺服器來解決速度問題。 缺少資料庫索引,或載入過多資料,通常才是真正的原因。
- 對所有東西都進行輪詢。 每一個每隔數秒的計時器,都是令資料庫保持醒着的原因。
- 為了令應用程式保持「暖機」而 ping 它。 這會抵消縮減至零所帶來的節省。可以接受首次造訪時短暫的喚醒時間,或者刻意選擇一直運行並為此付費。
- 忘記舊的部署。 無人使用、卻仍附有資料庫和背景工作的應用程式,費用會悄悄累積。
- 未經壓縮的圖片。 對小型網站來說,這往往是最大的頻寬費用來源。
檢查清單
- 我知道哪個專案、哪個類別(運算、資料庫、頻寬、儲存空間)的費用最高。
- 沒有人查看時,沒有任何東西每隔數秒輪詢資料庫。
- 儀表板以合理的間隔重新整理,或只在分頁可見時才重新整理。
- 沒有正常運行監控工具或背景循環在無合理理由下令應用程式保持運行。
- 伺服器是能夠正常運作的最小規格。
- 圖片已調整大小、壓縮並使用延遲載入;靜態檔案已快取。
- 舊的應用程式已取消發佈,舊檔案已刪除,不用的預覽連結已移除。
- 沒有資料或登入功能的網站已改為靜態網站。
- 付費 API 設有登入要求、每位用戶的上限,以及服務供應商的消費提醒。
在 Mythex 上節省成本
Mythex 的建置與託管共用同一個點數餘額,因此節省的託管費用可以留下更多點數用於建置。以下是幾點 Mythex 專屬的資訊:
- 已發佈的應用程式及其資料庫在閒置時會休眠,並在下次造訪時醒來。資料庫會在閒置 5 分鐘後休眠,因此移除持續輪詢通常是最大的節省。
- Pro 計劃在託管、資料庫、頻寬、檔案儲存及預覽沙盒方面,收費為免費計劃的一半;AI 的費用在兩個計劃中相同。詳情請參閱點數。
- 在餘額不足、可能令已發佈應用程式暫停之前,你會收到電郵通知;而暫停的應用程式會保留其資料庫及檔案。
如果想了解整體的營運成本,請參閱建立應用程式需要多少錢及什麼是網站託管。
常見問題
為什麼我的應用程式用戶不多,託管費用卻很高?
通常是有東西令它一直保持運作。例如每隔數秒查詢資料庫的程式碼、每分鐘 ping 一次的正常運行監控工具,或者被遺忘的背景循環,即使沒有訪客,也會令伺服器和資料庫全日不停運行。
休眠中的應用程式還會收費嗎?
在可以縮減至零的託管平台上,休眠中的應用程式在運算方面的費用很少,甚至是零;但通常仍需為儲存的資料付費。在 Mythex 上,已發佈的休眠應用程式不會產生運算費用,其資料庫會在閒置 5 分鐘後休眠,而且只為它醒着的時間收費。
輪詢會增加託管費用嗎?
如果每隔數秒就輪詢一次,資料庫便永遠不會有閒置的時段,因此無法休眠。應減少輪詢的次數,只在有人查看頁面時才進行,或改用推送更新,而不是不斷詢問。
靜態網站的託管成本是否比網頁應用程式低?
一般來說是的。靜態網站只是透過 CDN 提供的檔案,不需要運行伺服器或資料庫。如果你的網站沒有登入功能,也沒有儲存資料,改用靜態網站建置是其中一個最能節省成本的方法。