雲端架構的水平擴充,以GCP為例
水平擴充是現在相當重要的一個雲端功能,比如寫這篇文章的前一天11/11,電商如果沒有使用水平擴充的雲端服務,他們得準備超強頻寬與Load balancer還有一堆機器,成本就爆掉,可能撐不過還是當機。
但這些準備好了11/11過了以後就浪費掉了,因為機器是會折舊的,明年他就變過時的機器了。
GCP平台下的水平擴充
我本身在規劃上一個系統就有考慮到水平擴充與收縮的功能,GCP可以做到水平擴充的有很多,包含VM都可以做到。
但水平擴充如果用在無伺服器架構的Cloud Run上是相當划算的。
因為Cloud Run平時會關閉容器,所以到凌晨的時候沒人在用是不會有費用,除了冷啟動時間以外(現在可以投入兩倍CPU加快啟動容器),Cloud Run要被水平擴充到當掉自己的荷包大概會先爆掉,如果轉化率夠高的話那爆掉是反方向的,就是滿到爆掉。
水平擴充的好處
以我在設計Cloud Run的容器的時候,我一定是最佳化RAM的使用,讓主要的程式碼最多只要512 MB RAM就可以執行。然後vCPU的使用我盡量使用單執行緒,也就是一個容器給他的資源只要1 vCPU / 512 MB RAM。
如果同時有100個Users在輪流呼叫這個容器呢?當然一個容器撐不住,就會開很多個平行的容器,直到能全部處理這100個使用者,當然這100個使用者不會串通好的同時用同時關掉。
所以有時可能會有30~40個容器個體,有時可能只有10多個個體,這樣在成本上就很好節省,又不會讓網站掛掉。
有狀態的網站程式呢?
如果是有狀態的網站程式,這就不能用Cloud Run,因為Cloud Run是無狀態的。
那就要開VM 做一個Template,然後做一個Group,接著設定vCPU到幾%的時候要啟動新的VM來均分。
因為我的程式碼幾乎都使用無狀態的API,所以我這個部分就不說太多,上面的資訊是Google的培訓課程教的,詳細操作可以運ChatGPT或GPT4。
結論
最好是使用可以水平擴充水平收縮的服務,這樣可以為程式增加可用性,又可以節省很多成本。