分布式系統的核心難題是「遠程服務如何通訊」。Java 生態提供了豐富的技術棧:RMI、Hessian、Dubbo 前身、gRPC 先驅等。本文從網絡通信基本原理出發,層層剖析應用層協議、主流框架實現機制,為技術選型提供決策依據。
所有遠程通訊本質:將請求序列化為字節流 → 經傳輸協議發送 → 遠端反序列化處理 → 結果返回。
| 層級 | 選項 | 特點 |
|---|---|---|
| 傳輸協議 | TCP、UDP、HTTP | TCP 可靠、UDP 低延遲、HTTP 穿透防火牆 |
| 網絡 IO | BIO、NIO、AIO | BIO 簡單阻塞、NIO 多路復用、AIO 異步回調 |
| 協議 | 序列化格式 | 傳輸 | 特點 |
|---|---|---|---|
| RMI | Java Object Serialization | TCP | Java 專用、Stub/Skeleton 代理、強類型 |
| XML-RPC | XML | HTTP | 跨語言、可讀性好、體積大、解析慢 |
| Binary-RPC | 二進制 | HTTP | XML-RPC 二進制版、體積小、解析快 |
| Hessian | 私有二進制 | HTTP | Caucho 開發、高性能、跨語言、Web 友好 |
| Burlap | XML | HTTP | Hessian 的 XML 版本、調試友好 |
RMI 流程:Client → Stub → 序列化 → TCP → Skeleton → 反序列化 → 實現類 → 返回路徑對稱

JMS:Java 消息服務規範,實現有 ActiveMQ、RabbitMQ(非JMS)、Kafka(非JMS)
| 模式 | 特點 | ||||
|---|---|---|---|---|---|
| Queue (P2P) | 一對一、負載均衡、消息持久化 | ||||
| Topic (Pub/Sub) | 一對多、廣播、訂閱者模式 |
| 框架 | 核心協議 | 序列化 | 傳輸 | IO 模型 | 特色 |
|---|---|---|---|---|---|
| JBoss Remoting | 多協議適配 | Java/JBoss 序列化 | TCP/HTTP | BIO/NIO | 統一 API 屏蔽協議差異、支持同步/異步/單向 |
| Spring Remoting | RMI/HTTP/Hessian/Burlap | 按協議 | 按協議 | 按協議 | 代理模式、Spring 配置式、透明調用 |
| Hessian/Burlap | 自有 | 私有二進制/XML | HTTP | BIO | 輕量、跨語言、無 IDL、Web 友好 |
| XFire/Axis/CXF | SOAP | XML | HTTP | BIO | WebService 標準、契約優先、工具鏈豐富 |
| ActiveMQ | JMS | OpenWire/Protobuf | TCP/UDP/HTTP | NIO | 企業級 MQ、集群、持久化、事務 |
| MINA/Netty | 自定義 | 可插拔 | TCP/UDP | NIO | 網絡框架而非 RPC、高性能、編解碼器鏈、Netty 為現代標準 |
| EJB 3 | RMI/IIOP | Java 序列化 | TCP | BIO | 容器管理事務/安全/池化、重量級 |
遠程通訊技術棧深度決定了分布式系統的上限。理解底層原理(傳輸+IO+序列化)是看穿框架本質的鑰匙。現代架構傾向:gRPC/Thrift 做內部 RPC,REST 做外部 API,MQ 做異步解耦,Netty 做基礎設施。選型無銀彈,唯有匹配業務場景、團隊能力、演進路線。