本文介紹如何通過微服務實現無損發布或無損上下線。
問題現象
您的應用在發布、重啟等操作時,上遊服務(發起調用的服務)可能會請求到正在停止的下遊服務(被調用的服務),導致出現業務流量的錯誤(例如連結逾時、業務報錯等)。
問題原因
下遊服務在請求發起後才開始停止,導致請求不被響應。
下遊服務停止時,由於應用本身邏輯複雜,停止較慢,導致從註冊中心登出服務較晚。
下遊服務正常停止,但上遊服務因其他原因(例如網路故障,資源不足,處理邏輯異常等),沒有及時處理和使用註冊中心給予的新下遊服務地址清單。
使用了舊版本的用戶端,由於機制問題移除下線的地址清單時效性較低。
解決方案
最佳方式為接入微服務治理的無損發布功能。無損發布功能提供一站式的無損發布及上下線服務,免去複雜的排查及解決過程。更多資訊,請參見配置無損滾動發布。
如果無法接入微服務治理的無損發布功能,則需要查看上遊服務的Nacos用戶端日誌,在日誌中檢索下遊服務的名字及關鍵字current ips,並比較下遊服務的變更時間、Nacos用戶端日誌資訊的時間及上遊服務報錯的時間。
若三者基本一致(即發起下遊服務變更後,上遊服務開始報錯,但Nacos用戶端日誌資訊出現後,上遊服務報錯停止),則說明程式正常,可使用下文的通用解決方案。更多資訊,請參見通用解決方案。
若下遊服務的變更時間、Nacos用戶端日誌資訊的時間基本一致,但上遊服務報錯的時間始終未恢複;說明Nacos服務端正確推送了地址,且Nacos用戶端也接收到了地址,但應用程式未使用。您可以按照如下方法進行排查。
非開源架構使用者請檢查應用自身邏輯,查看是否存在緩衝機制且緩衝更新出錯。
開源架構使用者可以到對應社區尋求協助。
若下遊服務的變更時間、Nacos用戶端日誌資訊的時間基本一致,但上遊服務報錯的時間恢複很慢,說明Nacos服務端正確推送了地址且Nacos用戶端也接收到了地址,但應用程式未立刻使用,可以按照以下方法排查。
非開源架構使用者,請檢查應用自身是否有緩衝機制並且緩衝更新存在延遲問題。
請檢查是否使用
ribbon、feign、loadbalance等輔助架構,此類架構存在地址清單緩衝且更新時間較慢,請根據對應架構修改緩衝重新整理配置。其他開源架構使用者可以到對應社區尋求協助。
若排查後仍無法解決,可使用下文的通用解決方案。更多資訊,請參見通用解決方案。
若下遊服務的變更時間與Nacos用戶端日誌資訊的時間、上遊服務報錯的時間相差較大,說明下遊服務變更未被Nacos用戶端感知到,可以按照以下方法排查。
將上遊服務和下遊服務的Nacos用戶端升級至2.X及以上版本。
查看上遊服務是否存在網路故障,資源不足等問題。
排查下遊服務停止時是否存在阻塞邏輯,導致應用無法響應請求但註冊中心仍舊存在。
若排查後仍無法解決,可使用下文的通用解決方案。更多資訊,請參見通用解決方案。