如何實現不停機部署?

數次在面試時被問到這個問題,搜集了一些資訊,記錄一下。

聲明:基於我個人的理解撰寫,有可能不是 Best Practice

自己實際操作過的環境

公司 A

程式以 PHP 為主,如果有緊急的 hotfix 要部署,就直接將新的 code 用 rsync 或其他方式直接丟到執行環境。但我們不能把特例當平常,說這是 zero-downtime 好像會被笑。

除此之外每週固定有三小時的停機時間,一般要作任何更改就是在這段時間部署並測試。

公司 B

沒有固定維護時間。

部份服務,如 Nginx Proxy 或 DNS 可以先切走之後,再進行主機規格或組態調整。

其他的服務就沒這麼幸運了,直接線上部署,再趕快接著測看有沒有壞掉,或是等客戶爆炸。

雪上加霜的是這裡的部署是由壁壘分明的運維部門進行的,開發部門想推動流程的改變難度極高。

幾種作法

Rolling update 滾動升級

通常用於已經 Container 化的較為靈活的環境,配合 Load Balancer 來管理流量。

小部份的引入新版本的 instance ,舊的 instance 將現有的事項執行完成後即關閉。

順帶一提,Nginx 的 master / worker 在更新 config 時也是用類似的模式在運作的。\

Blue / Green 藍綠部署

準備兩組不同的環境,一組為原版,另一組為異動過的版本,直接從 Router 或其他可以導流的環節將所有流量導到新的環境,有問題時只需要再切回來即可,缺點是維護另一組環境有一定的成本

出處:https://martinfowler.com/bliki/BlueGreenDeployment.html

canary deployment 金絲雀部署

有點像是Rolling Update ,但不同版本會同時在線上服務,可以用於發現問題或使用者反應

最後修改日期: 2021-12-21

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。