【分布式架构】Dubbo是什么?能做什么?
Dubbo简介
Dubbo 是阿里巴巴开源的 高性能 Java RPC(远程过程调用) 分布式服务框架,之前断更过一段时间,目前已捐赠给 Apache 基金会孵化在维护。它主要解决分布式系统中的 远程服务调用、负载均衡、服务治理 等问题。
简单来说,如果你的系统只是单体应用,不需要 Dubbo;一旦系统进入 分布式/微服务 场景,就会需要类似 Dubbo 的框架来支撑。
核心功能
1. 远程通信
- 基于 NIO(Netty 实现) 的长连接通信,性能高效。
- 支持多种序列化方式(
Hessian
、FastJson 等)。 - 采用 请求-响应模式,
调用远程方法就像调用本地方法一样
,无 API 侵入,只需在配置中声明。
2. 集群容错
- 内置 软负载均衡(随机、轮询、一致性 Hash、最少活跃数等)。
- 支持 失败重试、失败转移、失败快速失败 等容错策略。
- 提供 多协议支持,可在内网中替代传统的硬件负载均衡(如 F5),降低成本并减少单点风险。
对比:
- Dubbo:随机 + 权重 偏向概率分布(通过随机算法结合权重比例分配请求,不同服务实例可根据权重获得不同的调用概率,从而灵活控制流量分配;例如:服务 A 权重为 1,服务 B 权重为 3,那么 B 的被调用概率约为 75%,A 为 25%;偏向概率分布)
- Nginx:轮询 + 权重 偏向顺序调度
3. 服务注册与发现
- 服务启动时自动向 注册中心 注册。
- 消费者调用服务时,只需通过 服务名 访问,不需要写死 IP 和端口。更加的灵活
- 注册中心(如 ZooKeeper)保证服务的动态发现与透明化调用。
ZooKeeper 特性:
- CP 模型:保证强一致性 + 分区容错性。
- 服务提供者上下线时,消费者能自动感知并调整调用。
4. 协议与性能
-
Dubbo 协议:自定义的二进制协议,体积小、解析快,适合高并发场景。
-
对比:
- 二进制协议 → 体积小,无请求头,传输快。
- 文本协议(如 HTTP) → 请求体大,传输慢。
说明:性能瓶颈大多在 I/O 和循环处理,协议优化带来的提升有限,但在高并发下仍有优势。
三、应用场景
- 大型电商系统:订单、库存、支付、用户等系统拆分后,通过 Dubbo 调用。
Dubbo 最新版资料参考:
创建基于Spring Boot的微服务应用