1. 程式人生 > >【總結】RPC框架Dubbo深入分析

【總結】RPC框架Dubbo深入分析

  • 異常和日誌
  • 可能攜帶完整的上下文資訊,比如出錯原因,出錯的機器地址,呼叫對方的地址,連的註冊中心地址,使用Dubbo的版本等。
  • 儘量將直接原因寫在最前面,所有上下文資訊,在原因後用鍵值對顯示。
  • 丟擲異常的地方不用列印日誌,由最終處理異常者決定列印日誌的級別,吃掉異常必需列印日誌
  • 列印ERROR日誌表示需要報警,列印WARN日誌表示可以自動恢復,列印INFO表示正常資訊或完全不影響執行。
  • 建議應用方在監控中心配置ERROR日誌實時報警,WARN日誌每週彙總傳送通知。
  • RpcException是Dubbo對外的唯一異常型別,所有內部異常,如果要丟擲給使用者,必須轉為RpcException。
  • RpcException不能有子型別,所有型別資訊用ErrorCode標識,以便保持相容。
配置和URL 配置物件屬性首字母小寫,多個單詞用駝峰命名(Java約定)。配置屬性全部用小寫,多個單詞用"-"號分隔(Spring約定)。URL引數全部用小寫,多個單詞用"."號分隔(Dubbo約定)。儘可能用URL傳參,不要自定義Map或其它上下文格式,配置資訊也轉成URL格式使用。儘量減少URL巢狀,保持URL的簡潔性。單元和整合測試 單元測試統一用JUnit和EasyMock,整合測試用TestNG,資料庫測試用DBUnit。保持單元測試用例的執行速度,不要將效能和大的整合用例放在單元測試中。保持單元測試的每個用例都用try...finally或tearDown釋放資源。減少while迴圈等待結果的測試用例,對定時器和網路的測試,用以將定時器中的邏輯抽為方法測試。對於容錯行為的測試,比如failsafe的測試,統一用LogUtil斷言日誌輸出。擴充套件點基類與AOP
AOP類都命名為XxxWrapper基類都命名為AbstractXxx。擴充套件點之間的組合將關係AOP完成,ExtensionLoader只負載載入擴充套件點,包括AOP擴充套件。儘量採用IoC注入擴充套件點之間的依賴,不要直接依賴ExtensionLoader的工廠方法。儘量採用AOP實現擴充套件點的通用行為,而不要用基類,比如負載均衡之前的isAvailable檢查,它是獨立於負載均衡之外的,不需要檢查的是URL引數關閉。對多種相似型別的抽象,用基類實現,比如RMI,Hessian等第三方協議都已生成了介面代理,只需將將介面代理轉成Invoker即可完成橋接,它們可以用公共基類實現此邏輯。基類
也是SPI的一部分,每個擴充套件點都應該有方便使用的基類支援模組與分包 基於複用度分包,總是一起使用的放在同一包下,將介面和基類分成獨立模組,大的實現也使用獨立模組。所有介面都放在模組的根包下,基類放在support子包下,不同實現用放在以擴充套件點名字命名的子包下。儘量保持子包依賴父包,而不要反向。