Dubbo 是阿里巴巴开源的高性能 Java RPC 框架,广泛应用于微服务架构中:
核心架构:
1. 服务提供者(Provider)
- 暴露服务的应用
- 启动时向注册中心注册服务
- 可以部署多个实例实现负载均衡
2. 服务消费者(Consumer)
- 调用远程服务的应用
- 启动时从注册中心订阅服务
- 通过代理调用远程服务
3. 注册中心(Registry)
- 服务注册与发现的核心组件
- 常用实现:Zookeeper、Nacos、Redis
- 负责维护服务列表和健康状态
4. 监控中心(Monitor)
- 统计服务调用次数和调用时间
- 提供服务治理数据支持
- 常用实现:Dubbo Admin、Prometheus
5. 容器(Container)
- 服务运行容器
- 常用:Spring Container、Spring Boot
核心特性:
1. 远程调用
- 支持多种协议:Dubbo、RMI、Hessian、HTTP、Webservice、Thrift、REST
- 默认使用 Dubbo 协议(基于 Netty)
- 支持同步和异步调用
2. 集群容错
- Failover:失败自动切换,默认策略
- Failfast:快速失败,只发起一次调用
- Failsafe:失败安全,出现异常时忽略
- Failback:失败自动恢复,后台记录失败请求
- Forking:并行调用,只要一个成功即返回
- Broadcast:广播调用,所有调用都成功才算成功
3. 负载均衡
- Random:随机,按权重设置随机概率
- RoundRobin:轮询,按公约后的权重设置轮询比率
- LeastActive:最少活跃调用数
- ConsistentHash:一致性 Hash,相同参数的请求总是发到同一提供者
4. 服务降级
- Mock 数据
- 返回 null
- 抛出指定异常
5. 服务限流
- 并发数限制
- QPS 限制
6. 服务路由
- 条件路由
- 标签路由
- 脚本路由
7. 配置中心
- 动态配置
- 配置版本管理
- 配置推送
使用示例:
服务提供者:
java@Service public class UserServiceImpl implements UserService { @Override public User getUserById(Long id) { return new User(id, "张三"); } } // 配置 <dubbo:service interface="com.example.UserService" ref="userService"/>
服务消费者:
java// 配置 <dubbo:reference interface="com.example.UserService" id="userService"/> // 使用 @Autowired private UserService userService; public void test() { User user = userService.getUserById(1L); }
优势:
- 高性能:基于 Netty,支持长连接
- 易用性:与 Spring 深度集成
- 可扩展:支持多种协议和负载均衡策略
- 服务治理:完善的服务治理功能
- 社区活跃:阿里巴巴和社区持续维护
适用场景:
- Java 微服务架构
- 内部服务调用
- 高并发场景
- 需要完善服务治理的系统