Dubbo是一个分布式服务框架,是国内阿里巴巴的维护的一个项目,后开源给Apache。
Dubbo是什么?
简单来说,dubbo就是一款高性能、轻量级的RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
那么什么又叫作RPC?
RPC【Remote Procedure Call】--->远程过程调用。是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,远程机器根据传过来的参数运行代码最后返回一个结果给调用者。
RPC基本原理:
RPC两个核心模块:通信、序列化。
ok,了解了什么事RPC以后我们转过头来看dubbo。
Dubbo的架构以及角色:
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
调用关系说明:
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo的负载4种负载均衡策略
- 随机,按权重设置随机概率,在一个截面上碰撞的概率较高,但调用越大分布越均匀
- 最少活跃调用数。响应快的提供者接受越多请求,响应慢的接受越少请求
- 轮询模式。按公约后的权重设置轮询比例。但存在响应慢的服务提供者会累积请求
- 一致性Hash,相同参数的请求总是发到同一提供者