選一朵容易了解的雲
執行極致 DevOps 的關鍵
在 Gaiwan 的工作,身為 Developer 的我有時候也要處理布署的問題。而布署通常有兩種選項:
布署在一台雲端主機 (cloud server) 之上
布署在無伺服器運算 (serverless) 之上
多數的時候,1 比 2 單純的太多。
選項 2 通常會衍生以下的問題:
要用 docker 包裝程式的執行檔,做成 image 。
相對複雜的權限設置。比方說,該程式可以存取哪些資源。
運作中的程式必須嚴格地遵循 12 factor App 裡談的:「無狀態」
要設定合理的水平式擴充上下限
通常會綁定特定的雲平台。AWS, GCP, Azure 的 serverless 用法都不一樣。
雲平台經常變更 serverless 的使用方式,增加了遷移(migration)成本。例如,GCP 近期宣布淘汰 Container Registry,迫使我將所有既有的 serverless 服務遷移至 Artifact Registry。
根據我的布署經驗,簡單比較後,我認為「雲端主機應該作為預設選項,因為無伺服器運算的複雜度遠高於其優勢。」許多雲服務的繁瑣選項旨在優化機器效能與配置彈性,但這也帶來了更高的人力與認知成本。
然而,一旦當認知成本過高時,運維的工作就不太可能不交給專人負責。

對雲服務的思考
我個人的經驗裡,使用 Exoscale 或是 Digital Ocean 的個人體驗,比使用 AWS, GCP 好得多。一部分原因是因為這些雲服務供應商主打的賣點之一,就是使用者體驗;更深層的原因則是,小間的雲服務供應商真的就沒有提供那麼多功能,功能變少了,使用者的決策也簡單多了。
仔細想想,我們可以把雲服務的廠商分成三大類:
傳統的虛擬主機商,類似 Bluehost
小間的雲服務供應商,類似 Exoscale, Digital Ocean
大間的雲服務供應商,類似 AWS, GCP, Azure
區分虛擬主機 (web hosting) 與雲服務 (cloud service) 的關鍵差異,應該是下列幾項核心功能:
存儲服務 (S3)
管理式關聯式資料庫 (managed RDS)
FaaS (Lambda-like)
自動擴展 (Autoscaling Platform)
CDN
API & DevOps 整合
根據我非正式的統計,如果不討論資料工程相關的功能,即無伺服器資料倉儲 (Serverless Data Warehouse)、BI、AI 這類功能,多數公司使用雲服務,用來用去的功能,大致就是在雲端主機 (cloud hosting) 搭配上述六項核心功能之內。
由於資料工程的服務,我優先考慮 Clickhouse, DuckDB, Metabase 等目前相對非主流的選項,於是,對於我來講,三大雲服務反而不是最適合的選項,中小型的雲服務供應商若提供簡單易用的使用者界面才是我的最佳選項。
結論
如今,許多文章推崇 DevOps,並將其定義為「促進開發與運維人員協作的文化、實踐與方法論」。
我認為,真正極致的 DevOps 應該能讓 80% 的情境下,單一工程師即可完成開發(Development)與運維(Operation)。而要實現這一點,首要任務是簡化運維(Ops)。

