天天看點

Dubbo 路由規則和權重的生效時機

Dubbo 路由規則和權重的生效時機
  • 這裡的 Invoker 是 Provider 的一個可調用 Service 的抽象,Invoker 封裝了 Provider 位址及 Service 接口資訊
  • Directory 代表多個 Invoker,可以把它看成 List ,但與 List 不同的是,它的值可能是動态變化的,比如注冊中心推送變更
  • Cluster 将 Directory 中的多個 Invoker 僞裝成一個 Invoker,對上層透明,僞裝過程包含了容錯邏輯,調用失敗後,重試另一個
  • Router 負責從多個 Invoker 中按路由規則選出子集,比如讀寫分離,應用隔離等
  • LoadBalance 負責從多個 Invoker 中選出具體的一個用于本次調用,選的過程包含了負載均衡算法,調用失敗後,需要重選

生效時機

  • 路由規則(包括條件路由和标簽路由)生效的時機在于生成invoker的過程,如上圖中的Router過程,路由規則會影響invoker對象的生成,例如某個service有providerA和providerB,但是路由規則規定consumer側隻能通路providerB,那麼在這種情況下隻會生成providerB對應的invoker對象。
  • 如果遇到No provider available for the service的錯誤,建議按照下面的步驟去排查,先确認service對應的provider是否存在,再排查provider和consumer的version和group是否一緻,最後排查是否有條件路由影響。
  • 權重調整的生效時機其實是在負載均衡的選擇invokder的過程中,如上圖中的LoadBalance過程,如果權重為0且provider不唯一,那麼權重為0的provider不會被調用,如果provider唯一那麼任何的負責均衡政策都不生效,直接傳回唯一的provider進行調用。

繼續閱讀