Dubbo
dubbo 简介:
dubbo是Alibaba开源的基于RPC远程调用的分布式服务框架。本质上就是服务调用的东西,其核心就是远程通信,集群容错以及自动发现.
dubbo 重要的5个节点:
提供者(provider), 消费者 (consumer), 注册中心 (register)
监控中心 (monitor--dubboadmin), 服务运行容器 (container--spring);
dubbo 调用服务流程:
1:服务容器(spring)负责启动加载运行服务提供者
2:服务提供者在启动时,向注册中心注册自己提供的服务。
3:服务消费者在启动时,向注册中心订阅自己所需的服务。
4:注册中心返回服务提供者地址列表给消费者.
5:服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6:服务消费者和提供者,累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
dubbo 核心
-
远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
-
集群容错: 提供基于接口方法透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
-
自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
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:消费者默认配置