什么是Dubbo
Apache Dubbo是一款高性能, 轻量级的开源Java RPC分布式服务框架, 它提供了三大核心功能: 面向接口的远程方法调用, 智能容错和负载均衡, 以及服务自动注册和发现。它最大的特点是按照分层的方式来架构, 使用这种方式可以使各个层之间解藕(或者最大限度地松耦合)。从服务模型的角度来看, Dubbo采用的是一种非常简单的模型, 要么提供方提供服务, 要么是消费方消费服务, 所以基于这一点可以抽象出服务提供方和服务消费方两个角色
官网: http://dubbo.apache.org/zh-cn
GitHub: https://github.com/apache/incubator-dubbo
Dubbo的服务治理
特性 | 描述 |
透明远程调用 | 就像调用本地方法一样调用远程方法; 只需要简单配置, 没有任何API侵入 |
负载均衡机制 | Client端LB, 可在内网替代F5等硬件负载均衡器 |
容错重试机制 | 服务Mock数据, 重试次数, 超时机制 |
自动注册发现 | 注册中心基于接口名查询服务提供者的ip地址, 并且能够平滑添加或删除服务提供者 |
性能日志监控 | Monitor统计服务的调用次数和调用时间的监控中心 |
服务治理中心 | 路由规则, 动态配置, 服务降级, 访问控制, 权重调整, 负载均衡 |
自动治理中心 | 无, 比如: 熔断限流, 自动权重配置 |
Dubbo的核心功能
Remoting – 远程通信, 提供对多种NIO框架抽象封装, 包括’同步转异步’和’请求-响应’模式的信息交换方式
Cluster – 服务框架, 提供基于接口方法的透明远程过程调用, 包括多协议支持, 以及软负载均衡, 失败容错, 动态配置等集群支持
Registry: 服务注册中心, 服务自动发现: 基于注册中心目录服务, 使服务消费方能动态的查找服务提供方, 使地址透明, 使服务提供方可以平滑增加或减少机器
Dubbo的组件角色
组件角色 | 说明 |
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 运行容器 |
调用关系说明
- 服务容器Container负责启动, 加载, 运行服务提供者
- 服务提供者Provider在启动时, 向注册中心注册自己提供的服务。
- 服务消费者Consumer在启动时, 向注册中心订阅自己所需的服务
- 注册中心Registry返回服务提供者列表给消费者, 如果有变更, 注册中心将基于长连接腿送变更数据给消费者。
- 服务消费者Consumer 从提供者地址列表中, 基于软负载均衡算法, 选一台提供者进行调用, 如果调用失败, 再选另一台调用
- 服务消费者Consumer和提供者Provider 在内存累计调用次数和调用时间, 定时每分钟发送一次统计数据到监控中心。