工作總結 - 重構2 重構服務平滑替換舊服務的流程

本文是之前文章重構總結的後續文章,本文介紹代碼重構完成後,重構服務平滑替換舊服務的流程。
代碼開發完畢,此時線網上舊的代碼依然在正常運行,此時我們不能一下子將新服務替換舊的服務。我們通常要經過以下幾個流程:

改造舊服務,使其兼容新服務模型

在重構後的服務中,我們可能會對已有的數據庫、交互接口、中間件等進行變更。爲了保證後續新老服務的平滑升級,在確認新服務的模型後,還需要對舊服務進行開發,讓其兼容新服務的模型,可能包括但不限於數據庫遷移、中間件升級新增、接口變化等等。經過測試後,發佈線網環境。

新服務測試環境測試

在測試環境裏,對所有測試用例進行測試,完成所有基本功能和壓力測試。
這裏需要同時對新老服務進行單元測試,保證相同的功能接口的輸出一致。

新服務使用線網的數據進行測試

在線網獨立部署測試環境,測試使用的數據必須是從真實環境複製下來,部署獨立的數據庫,緩存等服務,避免影響生產環境。
再做一次對所有測試用例進行測試,完成所有基本功能和壓力測試
這裏開始做集成測試,完全模擬用戶的操作行爲,對服務進行測試。此時測試人員主要是內部人員

通過tcpcopy引流生產環境請求到測試環境

以上的主要測試的對象是測試人員,可能無法覆蓋所有的場景。此時如果有我們真實的客戶使用我們的新系統,如果發現問題馬上反饋給我們進行修正,那最好。但是這個是理想情況,實際很難做到,而且如果系統有太多BUG,對用戶的體驗也不好。不過我們使用tcpcopy部分實現以上的場景。tcpcopy的用法可以參考這篇文章:tcpcopy的簡單用法:https://xnow.me/ops/simple-tcpcopy-use.html)
此時,我們可以通過tcpcopy將生產環境裏用戶的所有請求複製一份轉發到我們測試環境,讓用戶相同的行爲同時操作生產環境的服務和我們在測試環境裏的服務,然後我們需要監控新服務的日誌、中間的數據、最後生成的結果是不是符合預期。如果有問題,則進行修改。這樣保證最大可能保證重構後的服務符合預期。
如果系統的流量不大,則可以全部複製到測試環境。如果流量過大,則可以考慮只對一些典型或重要用戶的請求複製到測試環境

發佈到預發佈環境測試

經過以上的步驟後,我們新服務已經比較健壯了,可以讓我真正的客戶使用了。我們將新服務發佈到預發佈環境。所謂的預發佈指服務使用的數據庫、緩存、服務器等資源和生產環境相同,即新服務已經在生產環境中,但是隻有我們配置的部分用戶的請求才會被髮送到這個服務上。
部署完畢後,

  • 第一步還是我們的內部客戶(如測試人員)進行測試;
  • 第二步,通過後,我們可以選擇一些關係比較好的客戶,事先說明原因,請他們發現問題後,及時反饋;
  • 第三步,第二步運行一段時間後,如果沒有問題,可以逐步將其它用戶引流到新服務器,同時增加新服務的機器。
    在這個過程同時修正新發布的bug。

新的服務完全替換舊服務

此時,將舊服務下線,新的服務完全替換舊服務

這裏將我們重構後的新服務上線過程和大家分享一下,以上就是重構服務上線的主要流程,實際操作通常比這個更復雜,問題更多。所有在上線之前,需要我們做預案,儘可能對所有的情況都有對應的處理方案,尤其是失敗後,如何快速回滾到正常情況。

發佈了108 篇原創文章 · 獲贊 208 · 訪問量 80萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章