一、核心概念与架构设计
为什么选择Dubbo?
核心价值:
- 服务治理能力:解决分布式系统中服务发现、负载均衡、容错等问题,替代传统ESB架构
- 高性能RPC:默认基于Netty的NIO通信,支持多种序列化协议(Hessian2、Protobuf等),单机TPS可达数万
- 服务解耦:通过注册中心实现服务动态注册与发现,支持平滑扩缩容
- 多协议支持:兼容Dubbo/Triple协议(高性能二进制)、HTTP/REST(跨语言)等,满足不同场景
典型应用场景:
// 电商系统服务调用示例
@Reference
private OrderService orderService; // 订单服务
@Reference
private InventoryService inventoryService; // 库存服务
public void createOrder() {
inventoryService.deductStock(); // 同步调用库存服务
orderService.generateOrder(); // 同步调用订单服务
}
二、通信与序列化机制
1. 10层架构设计解析
分层 | 核心组件 | 功能说明 |
---|---|---|
接口服务层(Service) | @Service, @Reference | 业务接口定义与实现 |
配置层(Config) | ServiceConfig, ReferenceConfig | 配置中心集成,支持动态刷新 |
代理层(Proxy) | Javassist动态代理 | 透明化远程调用 |
注册层(Registry) | Zookeeper, Nacos | 服务地址注册与发现 |
路由层(Cluster) | LoadBalance, Router | 负载均衡与路由策略 |
远程调用层(Protocol) | DubboProtocol, TripleProtocol | RPC协议实现,封装调用细节 |
网络传输层(Transport) | Netty, Mina | 底层网络通信(默认Netty) |
各层通过URL参数传递配置,例如:
dubbo://192.168.1.1:20880/service?timeout=3000
2. 通信框架与调用模式
- 默认通信框架:Netty(占90%+使用场景)
- 阻塞 vs 非阻塞:
// 同步阻塞调用(默认) String result = service.syncMethod(param); // 异步非阻塞调用 Future