全部產品
Search
文件中心

Microservices Engine:如何?無損發布或無損上下線

更新時間:Jul 06, 2024

本文介紹如何通過微服務實現無損發布或無損上下線。

問題現象

您的應用在發布、重啟等操作時,上遊服務(發起調用的服務)可能會請求到正在停止的下遊服務(被調用的服務),導致出現業務流量的錯誤(例如連結逾時、業務報錯等)。

問題原因

  • 下遊服務在請求發起後才開始停止,導致請求不被響應。

  • 下遊服務停止時,由於應用本身邏輯複雜,停止較慢,導致從註冊中心登出服務較晚。

  • 下遊服務正常停止,但上遊服務因其他原因(例如網路故障,資源不足,處理邏輯異常等),沒有及時處理和使用註冊中心給予的新下遊服務地址清單。

  • 使用了舊版本的用戶端,由於機制問題移除下線的地址清單時效性較低。

解決方案

最佳方式為接入微服務治理的無損發布功能。無損發布功能提供一站式的無損發布及上下線服務,免去複雜的排查及解決過程。更多資訊,請參見配置無損滾動發布

如果無法接入微服務治理的無損發布功能,則需要查看上遊服務的Nacos用戶端日誌,在日誌中檢索下遊服務的名字及關鍵字current ips,並比較下遊服務的變更時間Nacos用戶端日誌資訊的時間上遊服務報錯的時間

  • 若三者基本一致(即發起下遊服務變更後,上遊服務開始報錯,但Nacos用戶端日誌資訊出現後,上遊服務報錯停止),則說明程式正常,可使用下文的通用解決方案。更多資訊,請參見通用解決方案

  • 下遊服務的變更時間Nacos用戶端日誌資訊的時間基本一致,但上遊服務報錯的時間始終未恢複;說明Nacos服務端正確推送了地址,且Nacos用戶端也接收到了地址,但應用程式未使用。您可以按照如下方法進行排查。

    • 非開源架構使用者請檢查應用自身邏輯,查看是否存在緩衝機制且緩衝更新出錯。

    • 開源架構使用者可以到對應社區尋求協助。

  • 下遊服務的變更時間Nacos用戶端日誌資訊的時間基本一致,但上遊服務報錯的時間恢複很慢,說明Nacos服務端正確推送了地址且Nacos用戶端也接收到了地址,但應用程式未立刻使用,可以按照以下方法排查。

    1. 非開源架構使用者,請檢查應用自身是否有緩衝機制並且緩衝更新存在延遲問題。

    2. 請檢查是否使用ribbonfeignloadbalance等輔助架構,此類架構存在地址清單緩衝且更新時間較慢,請根據對應架構修改緩衝重新整理配置。

    3. 其他開源架構使用者可以到對應社區尋求協助。

    4. 若排查後仍無法解決,可使用下文的通用解決方案。更多資訊,請參見通用解決方案

  • 下遊服務的變更時間Nacos用戶端日誌資訊的時間上遊服務報錯的時間相差較大,說明下遊服務變更未被Nacos用戶端感知到,可以按照以下方法排查。

    1. 將上遊服務和下遊服務的Nacos用戶端升級至2.X及以上版本。

    2. 查看上遊服務是否存在網路故障資源不足等問題。

    3. 排查下遊服務停止時是否存在阻塞邏輯,導致應用無法響應請求但註冊中心仍舊存在。

    4. 若排查後仍無法解決,可使用下文的通用解決方案。更多資訊,請參見通用解決方案

通用解決方案

  1. 下遊服務停止前, 需要使用Nacos更新執行個體OpenAPI修改enabled=false或在MSE控制台下線執行個體。隨後通過監控、日誌等手段,確認該下遊服務節點已沒有請求。更多資訊,請參見OpenAPI下線應用執行個體

  2. 停止下遊服務節點,執行變更。

  3. 確認變更下遊服務節點完成,下遊服務節點能夠正確提供服務後,需要使用Nacos更新執行個體openAPI修改enabled=true或在MSE控制台上線執行個體。更多資訊,請參見OpenAPI上線應用執行個體