如何保證 Serverless 業務部署更新的一致性?
從我做 Serverless 工具開始,就經常會遇到有人問這樣一個問題:如何保證Serverless業務部署更新的一致性。
所謂的一致性在這裡指的是:我們透過工具在本地進行專案部署,此時再有人透過其他途徑(例如控制檯等),對專案進行
過更新等操作,此時我再在本地進行專案部署,是不是會直接覆蓋?
例如,當使用者 A 在本地更新了業務,因為一些特殊情況,導致出現了一個線上異常情況“x”,此時使用者 B 重新更新,將這
個內容修復了,但是 B 沒有及時同步給 A 這個事情,A 又更新了新的功能,直接覆蓋了 B的內容,這個時候之前的異常 x 又
出現了,如果此時在 A 更新的時候,可以感知到線上資源已經變動,那麼這種事情就不會再次發生。
目前基於 Serverless Devs 的阿里雲函式計算元件,已經支援了線上“異動”的感知能力,包括了以下幾個情況:
1. 本地新建並部署一個線上沒有的資源
1. 本地部署完成,線上更新,本地再次部署
1. 本地新建並部署一個線上已經有的資源
實驗準備
透過s init建立一個函式(選擇Alibaba Cloud Serverless, 選擇HTTP Function - Python3 Example):
此時我們檢視一下s.yaml:
該專案部署到線上之後的表現就是在cn-hangzhou區建立一個fc-deploy-service服務,以及http-trigger-function函式
本地新建並部署一個線上沒有的資源
此時,我們確定一下線上並沒有對應資源,所以我們部署一下:
部署完成,很順利:
開啟瀏覽器,檢視反饋給我們的自定義地址:
此時,我們可以在本地,更新一下這個函式程式碼:
儲存部署:
完成之後,再檢視線上資源:
整個過程,還是比較貼近傳統的基本流程,也沒有觸發線上異動,算是中規中矩的理想過程。
本地部署完成,線上更新,本地再次部署
此時,我們對線上資源進行變更,首先在控制檯找到函式:
修改程式碼,並部署。
部署完成之後,我們重新整理一下剛才的地址:
可以看到已經更新。此時,我們再從本地進行部署:
可以看到,系統已經感知到我們的程式碼變化,此時,我們選擇yes,完成之後在檢視線上資源:
此處需要額外說明的是,只要是函式計算的服務,函式,觸發器發生變化,此處都可以進行感知,不管是配置還是程式碼。
本地新建並部署一個線上已經有的資源
此時,我們再進行最後的實驗,我們將本地專案刪除,重新建設。然後執行部署,由於剛剛實驗過的原因,我們已經線上上
存在了這些資源,所以此時算是部署一個線上的資源。
此時可以看到,系統感知到這個資源本地沒部署過,線上並且已經存在,所以此時需要確定是否覆蓋。
總結
程式碼在其他場景被更新,需要我們在當前得到感知,這個事情其實是非常重要的,和程式碼的安全釋出密不可少。而此時, 透過Serverless Devs是可以做到的。
那麼問題來了,如果我已經有了一個專案,我想整合到cd流程,我不想出現互動式操作,應該如何處理呢?
此時我們提供一個--use-local引數,用來強行覆蓋線上配置,透過這樣的指令就可以實現無互動的,本地優先。
每一個工具的誕生,都要有一個成長的過程,Serverless Devs正在不斷的成長。期待更多更好的功能出現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981534/viewspace-2782212/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 冗餘資料一致性,到底如何保證?
- 如何保證MySQL和Redis資料一致性?MySqlRedis
- 資料庫和快取的一致性如何保證資料庫快取
- 如何保證快取和資料庫的一致性?快取資料庫
- Seata-AT 如何保證分散式事務一致性分散式
- kafka-如何保證訊息的可靠性與一致性Kafka
- 如何保證快取與資料庫的雙寫一致性?快取資料庫
- Zookeeper 如何保證分散式系統資料一致性分散式
- 使用雙非同步後,如何保證資料一致性?非同步
- 如何保證快取(redis)與資料庫的雙寫一致性快取Redis資料庫
- 如何保證資料新增或修改成功失敗的一致性?
- 趣說 | 資料庫和快取如何保證一致性?資料庫快取
- 美團二面:Redis與MySQL雙寫一致性如何保證?RedisMySql
- FAQ系列|如何保證主從複製資料一致性
- Serverless Devs 的官網是如何透過 Serverless Devs 部署的Serverdev
- 詳解新支點雙機熱備如何保證業務的不中斷
- 如何保證mongodb和資料庫雙寫資料一致性?MongoDB資料庫
- MySQL是怎麼保證資料一致性的MySql
- 如何用 Serverless 一鍵部署 Stable Diffusion?Server
- 如何做Serverless自動化部署Server
- go-zero微服務實戰系列(六、快取的一致性如何保證)Go微服務快取
- Spark CommitCoordinator 保證資料一致性SparkMIT
- 阿里面試題:如何保證快取與資料庫的雙寫一致性?阿里面試題快取資料庫
- 即學即會 Serverless | 如何解決 Serverless 應用開發部署的難題?Server
- 思考線上如何既保證不影響查詢,又能做更新操作
- 如何保證MongoDB的安全性?MongoDB
- 面試常問:如何保證Redis快取和資料庫的資料一致性NRXW面試Redis快取資料庫
- 【面試普通人VS高手系列】Redis和Mysql如何保證資料一致性面試RedisMySql
- load data語句如何保證主備複製資料一致性(一)
- 深度學習 | 如何開發、部署 Serverless 應用?深度學習Server
- 保證分散式系統資料一致性的6種方案分散式
- CnosDB如何確保多步操作的最終一致性?
- gorm是如何保證協程安全的GoORM
- 比特幣是如何保證安全的?比特幣
- vue3.4的更新,保證你看的明明白白Vue
- 如何保證遊戲長盛不衰遊戲
- 如何保證軟體質量
- TCP如何保證可靠性TCP