Google Cloud Platform(GCP) VS HEROKU 小資使用心得

前言

最近試著把side project部署在雲端主機上,也順便學習雲端主機的部署與維運

對於剛起步的小專案,免費絕對是首要考量!

HEROKU本身就有免費方案,雖只要半小時無人使用就會睡眠
但搭配uptime robot定期喚醒,對於極小型應用措措有餘

(可以參考我的文章:讓免費的heroku永不休眠)

一開始想說GCP免費方案絕對足以符合需求
這次就改部署在GCP,順便玩玩看

Heroku

  1. 可以與GitHub上的專案連接,當main有更新時,自動build、deploy
  2. 不必管理Server
  3. 免費的Server、DB
  4. 不像GCP有那麼完整的監控,可加裝add-on另外付費監控。不如GCP的GAE那麼完整
  5. 免費無法綁定HTTPS域名
  6. Server在歐洲或美國,無法指定在亞洲
  7. 免費方案半小時未使用會睡眠,但可透過uptime robot定期喚醒。填上信用卡後,免費時數足以支撐整個月份

2022/08/29 更新

Heroku 2022/08/25發佈公告,從 2022/11/28起,將終止免費服務
僅能使用付費方案
故之後將沒有免費服務可以用了QQ~~

GCP (GAE VS GCE)

首次接觸GCP
第一個遇到的問題就是:我要選GAE還是GCE?

GAE(Google App Engine)

  1. 只需要部署程式,不必煩惱硬體面
  2. 要連DB,啟動DB服務,使用Cloud SQL
  3. 要使用批次作業,則透過GAE自身的Cron Job打自己API喚醒、執行批次作業
  4. 自動啟用https,免費即可直接綁定域名並使用https
  5. LOG則串接GCP的logging功能
  6. 網頁直接提供一切資訊、API被Call的情況、API錯誤訊息…等
  7. 若應用規模變大,於網頁調整後,即可迅速升級規格

GCE(Google Compute Engine)

  1. 相當於VM,要自己處理環境、安裝DB…等一切事務
  2. 基本上你在自己Server上要考量的事,在GCE上都得自行處理
  3. 雖然有提供Windows,但為了省錢,都會選擇Linux,無UI,一切皆須下指令處理
  4. GCE亦可當成GAE使用,連接其他GCP服務(如logging、cloud SQL…等)

心得

比較之下,GAE真的是好棒!
對於小應用,cron Job、logging的免費額度足以負擔
而完全不必煩惱硬體面的一切事務!
於是我就很開心的直接使用GAE了,部署等操作也是相當簡單容易

但後來才發現….
GAE常用的東西都是免費的,唯獨cloud SQL並不在免費的額度裡!
也就是服務被喚醒連上後,就開始計價

剛開始有試用金沒什麼感覺,想說3個月後也是歸零
一直到免費額度幾近消耗完畢後,我才開始正視這個問題

若24×7全時啟動,光DB費用一個月可能就會近萬元台幣

但我只是個微小應用!一個月使用量都還不到5人
就算我的Code寫的很爛一堆重複的Query,也不至於要支付如此高額的營運費用吧!

最初我以為是有查詢、異動DB資料才會收費
天真的加了快取、把一些運算改到前端
但發現每天仍持續被扣錢

再去Google後,才發現,原來cloud SQL被使用就會計價
而就算停用了,因佔用著公共IP,仍會收取基本費用…

GAE亦可部署靜態頁面,但對於子分頁直接輸入網址時,會變成找不到網頁
綁定得由首頁進入後,再到各自分頁,最後就直接將前端調整成SSR了
若不介意此問題的話,也未必得使用GAE,可直接將前端部署在GitHub Page (或GitLab Page)

最後還是上繳了幾千元的「使用費」給 Google

果然,免費的才是最貴-.-
其實GCP官方文件就有寫了,但對於初次使用的新手根本不會發現這麼細微的東西

僅以此文,記錄為了免費服務,無所不用其極的過程…XD

在極短時間內,大調架構,增加Cache模組
結果發現還是不行,又將前端加入SSR,變種成現在這個

API部署在Heroku,使用uptime robot定期喚醒Server
前端使用SSR放在GAE,至少還可以免費綁定域名的架構…

使用了3個免費服務構建起來的專案= =

未來展望

未來流量若真的起來,免費架構不足以應付的話
我就會全部轉Heroku了
畢竟heroku最便宜的付費方案,也才7美金,加上DB的費用(9USD)
入門款還可以將月租金壓至400~500台幣左右
而heroku付費dyno就有always on + https 域名綁定
uptime robot則可以調整成每小時ping一次檢查服務是否中斷,當作備援的Mail提醒

相信同樣的流量若是在GCP上,應該不會便宜到哪去

後記

最後有發現,國外討論區上有人推薦將DB建置在GCE,可以省下極大量的費用
這也是一個不錯的作法

只是架在GCE上,應該仍有備份等相關問題要另外處理吧?

但heroku免費方案亦沒有備援等機制,若GCP還能自己處理似乎還比較好?!

不過在短時間大調架構後…實在沒有心力再去嘗試了XD
就這樣吧……

之前一直搞不懂為什麼Heroku 明明是架在AWS上,但仍火紅一段時間
為何我不直接用AWS就好?

原來他真的簡化了不少事務,對於入門應用相當輕鬆
也不必準備太大量的前導技能在研究那複雜的營運費用上

當用量跨過免費門坎
以單純的WEB應用來看,只要輕量的價格提升Server後應當足以繼續使用
對於前期成本不會造成太大的負擔

結論

  1. GAE很方便,免費方案確實足夠小專案使用,只要你的專案不需要連線DB。因Cloud SQL收費不便宜
  2. 可以將 Server 部署在Heroku分離使用。若希望統一平台維護,可將DB建置在GCE,能省下不少費用
  3. 若期望統一平台維護,使用GCE DB + GAE,可能得考慮將 Server 部署在GCE。因GAE未使用時會自動休眠,每次喚醒連線DB的時間會讓你感覺網頁載入速度很慢
  4. Cloud SQL停用後,仍會收取公共IP保留費用,若確定不需要使用,資料備份完畢後,就直接刪掉吧!
  5. 新手上路、小專案,直接使用Heroku + uptime robot是個好選擇
  6. 若有綁域名需求,Heroku須付費才可以綁Https域名。Server 部署在 Heroku + uptime robot 喚醒;前端使用SSR部署在 GAE 是個可運作的0元方案
  7. 非前後端分離架構,那直接架在GCE應該是最划算的作法,只是可能得手動處理Lets encryption 免費憑證問題,或再寫批次自動Renew