如何保證 Serverless 業務部署更新的一致性?

Serverless發表於2021-07-20

從我做 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章