中间件体系(Middleware Platform)
目标:为业务系统提供统一、稳定、高可用、可治理的基础运行能力
P0(运行基础)
├── 网关(Kong / APISIX)
├── 配置中心(Nacos)
├── RPC 平台(Dubbo)
├── 数据存储(MySQL / PostgreSQL / Mongo)
P1(解耦与性能)
├── MQ(Kafka / RabbitMQ)
├── 缓存平台(Redis / Memcached)
├── 搜索(Elasticsearch)
├── 文件存储(MinIO)
P2(治理与稳定)
├── 缓存失效监控 & 一致性
├── 任务调度(Airflow / XXLJob)
├── 中间件监控与告警
P3(平台化)
├── 中间件统一管控台
├── 多租户 / 资源隔离
├── 成本 & 容量管理
中间件体系的本质不是“技术选型”,而是“运行能力抽象”:
RPC 平台(Remote Procedure Call Platform)
下面我将以企业级中间件与平台治理视角,对 RPC 平台(Remote Procedure Call Platform)做一次全面、深入、可落地的展开。内容不局限于 Dubbo,而是覆盖 架构模型、协议、治理能力、平台化建设、与 Mesh/网关/配置中心的协同,可直接作为平台设计或技术方案底稿。
一、RPC 平台的本质定位
一句话定义:
RPC 平台是“服务间高性能通信 + 治理 + 契约管理”的统一基础设施。
它解决的不是“怎么调接口”,而是:
- 服务如何被发现
- 调用如何稳定
- 契约如何演进
- 故障如何被隔离
- 通信如何被治理
二、RPC 平台在企业技术体系中的位置
业务服务
│
├── 应用框架(Spring Boot / Quarkus)
│
├── RPC SDK(Dubbo / gRPC / Thrift)
│
├── RPC 平台
│ ├── 注册发现
│ ├── 路由
│ ├── 治理
│ ├── 观测
│
├── 网络 / K8s / Service Mesh
│
└── 基础设施
RPC 平台解决 “服务与服务之间” 的通信问题。
三、RPC 与 HTTP API 的本质区别
| 维度 | RPC | HTTP API |
|---|---|---|
| 语义 | 方法调用 | 资源访问 |
| 性能 | 高 | 中 |
| 契约 | 强(IDL) | 弱(OpenAPI) |
| 治理 | 深 | 浅 |
| 内部系统 | 首选 | 次选 |
| 对外接口 | 不适合 | 适合 |
四、RPC 平台的核心组成模块
RPC 平台能力模型
├── 通信协议层
├── 服务注册发现
├── 路由 & 负载均衡
├── 治理能力
├── 契约与版本管理
├── 可观测性
└── 安全
五、通信协议与技术选型(不局限 Dubbo)
1️⃣ 主流 RPC 技术对比
| 技术 | 协议 | 特点 | 适用场景 |
|---|---|---|---|
| Dubbo | TCP / HTTP2 | 治理能力强 | Java 体系 |
| gRPC | HTTP/2 + Protobuf | 跨语言标准 | 多语言 |
| Thrift | Binary | 轻量高效 | 传统 |
| SOFA RPC | TCP | 稳定成熟 | 金融 |
| RSocket | Reactive | 双向流 | 实时 |
2️⃣ 序列化协议
- Protobuf(主流)
- Thrift Binary
- Kryo
- Hessian
六、服务注册与发现(平台核心)
常见注册中心
- Nacos
- Etcd
- Consul
- Zookeeper(逐步淘汰)
能力要求
- 实例心跳
- 健康检查
- 动态上下线
- 元数据(版本 / 标签)
七、路由与负载均衡(精细化治理)
路由能力
- 条件路由(标签 / Header)
- 版本路由
- 灰度路由
负载均衡策略
- Round Robin
- Least Active
- Consistent Hash
- 权重
八、稳定性治理(RPC 平台的核心价值)
1️⃣ 超时 / 重试
- 调用级配置
- 方法级超时
- 指数退避
2️⃣ 熔断 / 降级
- 错误率熔断
- RT 熔断
- 本地降级逻辑
3️⃣ 隔离
- 线程池隔离
- 连接池隔离
- 租户隔离
九、服务契约与版本治理(非常关键)
IDL 管理
- Protobuf / Thrift IDL
- 中央仓库
- 向后兼容校验
版本演进策略
- 新增字段向后兼容
- 废弃字段标记
- 双版本共存
十、可观测性(Observability)
Metrics
- QPS
- RT
- 错误率
- 熔断次数
Tracing
- TraceID 透传
- 调用拓扑
Logging
- 慢调用日志
- 错误调用采样
十一、安全与权限
- mTLS
- 服务级 ACL
- 调用方鉴权
- 与 IAM 集成
十二、RPC 平台 vs Service Mesh
| 维度 | RPC 平台 | Service Mesh |
|---|---|---|
| 调用方式 | SDK | Sidecar |
| 治理粒度 | 方法级 | 流量级 |
| 侵入性 | 中 | 低 |
| 语言绑定 | 强 | 弱 |
| 性能 | 高 | 稍低 |
现实中常见形态: RPC + Mesh 并存
十三、RPC 平台的平台化设计
平台应提供的能力
RPC 平台控制台
├── 服务注册视图
├── 接口 / 方法管理
├── 路由规则
├── 治理策略
├── SLA / SLO
├── 监控 & 告警
└── 审计
数据模型(示意)
Service
├── name
├── version
├── owner
├── SLA
│
Method
├── timeout
├── retry
├── circuit_breaker
十四、典型企业落地路径(实战)
- 统一 RPC 协议与注册中心
- 强制 IDL 契约管理
- 治理能力平台化(配置中心)
- 打通监控 / 告警
- 与 Mesh / 网关协同
十五、常见反模式
- ❌ 直接 HTTP 内部调用
- ❌ 无 IDL 随意改接口
- ❌ 全局重试导致雪崩
- ❌ 无方法级治理
HTTP+openapi+SDK vs rpc
这是一个非常专业、而且必须“分场景回答”的问题。 结论如果一句话说完是:
HTTP OpenAPI + 自动 SDK 并不是“比 RPC 更好”,而是“在一类问题上更优,在另一类问题上明显不如 RPC”。
下面我从架构本质、工程效率、治理深度、性能、长期演进成本五个维度,把这个问题彻底拆开。
一、两种模式在“本质”上的差异
1️⃣ HTTP OpenAPI + 自动 SDK
本质是:
“资源 API + 客户端封装”
- 协议:HTTP/REST
- 契约:OpenAPI
- SDK:由 OpenAPI 生成(Client Stub)
- 语义:资源操作(GET / POST / PUT)
核心目标
- 标准化
- 对外可用
- 跨语言友好
- 降低接入门槛
2️⃣ RPC(Dubbo / gRPC 等)
本质是:
“分布式方法调用”
- 协议:二进制 / HTTP2
- 契约:IDL(Protobuf / Thrift)
- SDK:强类型 Stub
- 语义:方法调用
核心目标
- 高性能
- 强治理
- 强契约
- 内部系统稳定性
二、工程体验对比(这是很多人直觉“HTTP 更好”的原因)
| 维度 | HTTP + OpenAPI | RPC |
|---|---|---|
| 学习成本 | 极低 | 中 |
| 调试 | curl / Postman | 专用工具 |
| 跨语言 | 天然友好 | 需要支持 |
| SDK 生成 | 非常成熟 | 成熟 |
| 对外开放 | 非常适合 | 不适合 |
所以结论一:
如果你的目标是“平台化、对外、生态化”,HTTP OpenAPI 几乎完胜。
三、但关键差距在“治理深度”(分水岭)
1️⃣ HTTP + SDK 的治理上限
HTTP + SDK 能做的治理,基本是:
- 超时
- 重试
- 简单限流
- 网关级熔断
但它天然缺失:
- 方法级语义治理
- 强一致的调用约束
- 精细化失败感知
举例:
- 无法区分“业务失败 vs 系统失败”
- 无法天然表达“幂等 / 非幂等”
2️⃣ RPC 的治理深度
RPC 原生支持:
- 方法级超时 / 重试
- 方法级熔断
- 调用上下文透传
- 强一致契约(IDL)
一句话:
RPC 是“为治理而生的”。
四、性能与稳定性(大规模系统的硬指标)
性能对比(同等条件下)
| 指标 | HTTP + JSON | gRPC / Dubbo |
|---|---|---|
| 序列化 | 慢 | 快 |
| 网络开销 | 大 | 小 |
| 延迟 | 高 | 低 |
| CPU | 高 | 低 |
在 高 QPS、低延迟、核心链路 场景:
HTTP + SDK 是明显劣势
五、长期演进成本(很多团队低估了)
HTTP + OpenAPI 的“隐性成本”
- OpenAPI 很容易“文档先行、实现漂移”
- SDK 与服务版本不同步
- 弱约束 → API 滥用
- 语义难以演进(REST 资源膨胀)
RPC 的长期优势
- IDL 即唯一事实源(SSOT)
- 编译期约束
- 不兼容变更直接阻断
六、什么时候 HTTP + OpenAPI 真的更好
✅ 这些场景,HTTP + OpenAPI + SDK 是最优解
- 对外 OpenAPI / Partner API
- 跨语言团队极多
- QPS 不高 / RT 不极端敏感
- 需要快速生态扩展
- 强 API 管理 / 网关治理
典型:支付开放平台、云 API、内部平台能力输出
七、什么时候 RPC 明显更好
✅ 这些场景,RPC 不是可选,而是刚需
- 内部核心服务
- 高并发 / 低延迟
- 调用链极长
- 强稳定性要求(金融 / 交易)
- 强治理(限流 / 熔断 / 降级)
八、现实世界的最优解:分层混合
大厂的真实形态几乎都是:
对外 / 跨域
└── HTTP OpenAPI + SDK + API Gateway
内部核心链路
└── RPC(Dubbo / gRPC)+ 注册中心 + 治理
基础设施层
└── Service Mesh(可选)
不是二选一,而是分层选型。
九、如果你“只能选一个”,怎么选?
选 HTTP + OpenAPI,如果:
- 你在做 平台 / 中台 / 对外能力
- 你重视 生态 / 接入效率
- 你能接受 治理上限
选 RPC,如果:
- 你在做 内部复杂系统
- 你重视 稳定性 / 性能
- 你有 治理诉求
十、终极结论(给架构决策用)
HTTP OpenAPI + 自动 SDK 是“扩展性最优解”, RPC 是“稳定性与治理最优解”。
- 中间件体系(Middleware Platform)
- RPC 平台(Remote Procedure Call Platform)
- 一、RPC 平台的本质定位
- 二、RPC 平台在企业技术体系中的位置
- 三、RPC 与 HTTP API 的本质区别
- 四、RPC 平台的核心组成模块
- 五、通信协议与技术选型(不局限 Dubbo)
- 六、服务注册与发现(平台核心)
- 七、路由与负载均衡(精细化治理)
- 八、稳定性治理(RPC 平台的核心价值)
- 九、服务契约与版本治理(非常关键)
- 十、可观测性(Observability)
- 十一、安全与权限
- 十二、RPC 平台 vs Service Mesh
- 十三、RPC 平台的平台化设计
- 十四、典型企业落地路径(实战)
- 十五、常见反模式
- HTTP+openapi+SDK vs rpc
