Dubbo

72 阅读4分钟

Dubbo

dubbo 简介:

dubbo是Alibaba开源的基于RPC远程调用的分布式服务框架。本质上就是服务调用的东西,其核心就是远程通信,集群容错以及自动发现.

dubbo 重要的5个节点:

提供者(provider), 消费者 (consumer), 注册中心 (register)

监控中心 (monitor--dubboadmin), 服务运行容器 (container--spring);

 

dubbo 调用服务流程:

1:服务容器(spring)负责启动加载运行服务提供者

2:服务提供者在启动时,向注册中心注册自己提供的服务。

3:服务消费者在启动时,向注册中心订阅自己所需的服务。

4:注册中心返回服务提供者地址列表给消费者.

5:服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

6:服务消费者和提供者,累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

 

dubbo 核心

  1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

  2. 集群容错: 提供基于接口方法透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

  3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

 

dubbo 集群容错机制

Failover Cluster,默认容错机制,默认出错重试2次,可通过  retries="2"  来设置重试次数(不含第一次)。

Failfast Cluster,快速失败,只发起一次调用,失败立即报错。比如保存订单这种操作建议使用该容错机制

Failsafe Cluster,失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

Failback Cluster,失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

Forking Cluster,并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过  forks="2"  来设置最大并行数。

Broadcast Cluster,广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于通知所有提供者更新缓存或日志等本地资源信息。

 

dubbo 的负载均衡

Random LoadBalance,随机,按权重设置随机概率。

RoundRobin LoadBalance,轮循,按公约后的权重设置轮循比率。

LeastActive LoadBalance,最少活跃调用数

ConsistentHash LoadBalance,一致性 Hash,相同参数的请求总是发到同一提供者。

 

dubbo 支持的协议:

dubbo://        连接个数:单连接,          连接方式:长连接,          传输协议:TCP,               传输方式:NIO 异步传输

适用范围:传入传出参数数据包较小(建议小于100K),尽量不要用dubbo 协议传输大文件或超大字符串。

 

hessian://       连接个数:多连接           连接方式:短连接           传输协议:HTTP             传输方式:同步传输

适用范围:传入传出参数数据包较大,提供者压力较大,可传文件

 

http://            连接个数:多连接           连接方式:短连接           传输协议:HTTP             传输方式:同步传输

适用范围:暂不支持传文件

webservice://        memcached://       redis://           rmi://             thrift://

 

dubbo 示例

1:启动时检查:如果提供者没有注册服务时消费者启动会报错,这时不需要用到提供者时,直接在消费者配置check=false来设置不检查提供者

2:集群容错:当服务器宕机时,会根据配置的集群容错策略来进行访问其他节点服务器, cluster=””

3:负载均衡:会根据配置负载均衡策略来进行提高提供者的处理效率, loadbalance=””

4:直连提供者:方便测试,方便与同事之间互联联调,url=””

5:只订阅:该服务只能为消费者register="false"

6:只注册:该服务职能为提供者subscribe="false"

7:多协议:不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议

<dubbo:protocol name="dubbo" port="20880" />    <dubbo:protocol name="rmi" port="1099" />

8:多注册中:同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去

<dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" />

<dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" default="false"/>

9:多版本:当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。Version=””

Dubbo 常用配置

dubbo:application:设置服务名    dubbo:registry:注册中心     dubbo:protocol:设置协议

dubbo:service:设置提供者   dubbo:reference设置消费者  dubbo:consumer:消费者默认配置