①、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 協議 。