Dubbo通信協議

①、Dubbojava

  Dubbo 缺省協議採用單一長鏈接和 NIO 異步通信,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的狀況。json

  反之,Dubbo 缺省協議不適合傳送大數據量的服務,好比傳文件,傳視頻等,除非請求量很低。瀏覽器

  • Transporter: mina, netty, grizzy
  • Serialization: dubbo, hessian2, java, json
  • Dispatcher: all, direct, message, execution, connection
  • ThreadPool: fixed, cached

  特性緩存

  缺省協議,使用基於 mina 1.1.7 和 hessian 3.2.1 的 tbremoting 交互。安全

  • 鏈接個數:單鏈接
  • 鏈接方式:長鏈接
  • 傳輸協議:TCP
  • 傳輸方式:NIO 異步傳輸
  • 序列化:Hessian 二進制序列化
  • 適用範圍:傳入傳出參數數據包較小(建議小於100K),消費者比提供者個數多,單一消費者沒法壓滿提供者,儘可能不要用 dubbo 協議傳輸大文件或超大字符串。
  • 適用場景:常規遠程服務方法調用

 

②、RMI服務器

  RMI 協議採用 JDK 標準的 java.rmi.* 實現,採用阻塞式短鏈接和 JDK 標準序列化方式。注意:若是正在使用 RMI 提供服務給外部訪問,同時應用裏依賴了老的 common-collections 包的狀況下,存在反序列化安全風險。併發

  特性frontend

  • 鏈接個數:多鏈接
  • 鏈接方式:短鏈接
  • 傳輸協議:TCP
  • 傳輸方式:同步傳輸
  • 序列化:Java 標準二進制序列化
  • 適用範圍:傳入傳出參數數據包大小混合,消費者與提供者個數差很少,可傳文件。
  • 適用場景:常規遠程服務方法調用,與原生RMI服務互操做

 

③、Hessian 異步

  Hessian 協議用於集成 Hessian 的服務,Hessian 底層採用 Http 通信,採用 Servlet 暴露服務,Dubbo 缺省內嵌 Jetty 做爲服務器實現。memcached

  Dubbo 的 Hessian 協議能夠和原生 Hessian 服務互操做,即:

  • 提供者用 Dubbo 的 Hessian 協議暴露服務,消費者直接用標準 Hessian 接口調用。
  • 或者提供方用標準 Hessian 暴露服務,消費方用 Dubbo 的 Hessian 協議調用。

  特性

  • 鏈接個數:多鏈接
  • 鏈接方式:短鏈接
  • 傳輸協議:HTTP
  • 傳輸方式:同步傳輸
  • 序列化:Hessian二進制序列化
  • 適用範圍:傳入傳出參數數據包較大,提供者比消費者個數多,提供者壓力較大,可傳文件。
  • 適用場景:頁面傳輸,文件傳輸,或與原生hessian服務互操做

 

④、Http

基於 HTTP 表單的遠程調用協議,採用 Spring 的 HttpInvoker 實現

  特性

  • 鏈接個數:多鏈接
  • 鏈接方式:短鏈接
  • 傳輸協議:HTTP
  • 傳輸方式:同步傳輸
  • 序列化:表單序列化
  • 適用範圍:傳入傳出參數數據包大小混合,提供者比消費者個數多,可用瀏覽器查看,可用表單或URL傳入參數,暫不支持傳文件。
  • 適用場景:需同時給應用程序和瀏覽器 JS 使用的服務。

 

⑤、WebService

  基於 WebService 的遠程調用協議,基於 Apache CXF 的 frontend-simple 和 transports-http 實現。

  能夠和原生 WebService 服務互操做,即:

  • 提供者用 Dubbo 的 WebService 協議暴露服務,消費者直接用標準 WebService 接口調用,
  • 或者提供方用標準 WebService 暴露服務,消費方用 Dubbo 的 WebService 協議調用。

  特性

  • 鏈接個數:多鏈接
  • 鏈接方式:短鏈接
  • 傳輸協議:HTTP
  • 傳輸方式:同步傳輸
  • 序列化:SOAP 文本序列化
  • 適用場景:系統集成,跨語言調用

 

⑥、Thrift

  當前 dubbo 支持的 thrift 協議是對 thrift 原生協議 的擴展,在原生協議的基礎上添加了一些額外的頭信息,好比 service name,magic number 等。

  使用 dubbo thrift 協議一樣須要使用 thrift 的 idl compiler 編譯生成相應的 java 代碼,後續版本中會在這方面作一些加強。

 

⑦、緩存

  基於 memcached 實現的 RPC 協議 。

  基於 Redis 實現的 RPC 協議 。

相關文章
相關標籤/搜索