中间件体系(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

十四、典型企业落地路径(实战)

  1. 统一 RPC 协议与注册中心
  2. 强制 IDL 契约管理
  3. 治理能力平台化(配置中心)
  4. 打通监控 / 告警
  5. 与 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 是最优解

  1. 对外 OpenAPI / Partner API
  2. 跨语言团队极多
  3. QPS 不高 / RT 不极端敏感
  4. 需要快速生态扩展
  5. 强 API 管理 / 网关治理

典型:支付开放平台、云 API、内部平台能力输出


七、什么时候 RPC 明显更好

这些场景,RPC 不是可选,而是刚需

  1. 内部核心服务
  2. 高并发 / 低延迟
  3. 调用链极长
  4. 强稳定性要求(金融 / 交易)
  5. 强治理(限流 / 熔断 / 降级)

八、现实世界的最优解:分层混合

大厂的真实形态几乎都是:

对外 / 跨域
└── HTTP OpenAPI + SDK + API Gateway

内部核心链路
└── RPC(Dubbo / gRPC)+ 注册中心 + 治理

基础设施层
└── Service Mesh(可选)

不是二选一,而是分层选型。


九、如果你“只能选一个”,怎么选?

选 HTTP + OpenAPI,如果:

  • 你在做 平台 / 中台 / 对外能力
  • 你重视 生态 / 接入效率
  • 你能接受 治理上限

选 RPC,如果:

  • 你在做 内部复杂系统
  • 你重视 稳定性 / 性能
  • 你有 治理诉求

十、终极结论(给架构决策用)

HTTP OpenAPI + 自动 SDK 是“扩展性最优解”, RPC 是“稳定性与治理最优解”。