dubbo容错,负载均衡,协议

8.负载均衡

dubbo提供4种负载均衡方式:
  • Random,随机,按权重配置随机概率,调用量越大分布越均匀,默认是这种方式
  • RoundRobin,轮询,按权重设置轮询比例,如果存在比较慢的机器容易在这台机器的请求阻塞较多
  • LeastActive,最少活跃调用数,不支持权重,只能根据自动识别的活跃数分配,不能灵活调配
  • ConsistentHash,一致性hash,对相同参数的请求路由到一个服务提供者上,如果有类似灰度发布需求可采用
dubbo的负载均衡机制是在客户端调用时通过内存中的服务方信息及配置的负责均衡策略选择,如果对自己系统没有一个全面认知,建议先采用random方式。
 
协议
Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的。下面我们就针对Dubbo的每种协议详解讲解,以便我们在实际应用中能够正确取舍

dubbo协议

缺省协议,使用基于mina1.1.7+hessian3.2.1的tbremoting交互。 
连接个数:单连接 
连接方式:长连接 
传输协议:TCP 
传输方式:NIO异步传输 
序列化:Hessian二进制序列化 
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。 
适用场景:常规远程服务方法调用

为什么采用异步单一长连接? 
因为服务的现状大都是服务提供者少,通常只有几台机器,而服务的消费者多,可能整个网站都在访问该服务,比如Morgan的提供者只有6台提供者,却有上百台消费者,每天有1.5亿次调用,如果采用常规的hessian服务,服务提供者很容易就被压跨,通过单一连接,保证单一消费者不会压死提供者,长连接,减少连接握手验证等,并使用异步IO,复用线程池,防止C10K问题。

rmi协议

Java标准的远程调用协议。 
连接个数:多连接 
连接方式:短连接 
传输协议:TCP 
传输方式:同步传输 
序列化:Java标准二进制序列化 
适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。 
适用场景:常规远程服务方法调用,与原生RMI服务互操作

hessian协议

基于Hessian的远程调用协议。 
连接个数:多连接 
连接方式:短连接 
传输协议:HTTP 
传输方式:同步传输 
序列化:表单序列化 
适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。 
适用场景:需同时给应用程序和浏览器JS使用的服务。

http协议

基于http表单的远程调用协议。参见:[HTTP协议使用说明] 
连接个数:多连接 
连接方式:短连接 
传输协议:HTTP 
传输方式:同步传输 
序列化:表单序列化 
适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。 
适用场景:需同时给应用程序和浏览器JS使用的服务

webservice协议

基于WebService的远程调用协议。 
连接个数:多连接 
连接方式:短连接 
传输协议:HTTP 
传输方式:同步传输 
序列化:SOAP文本序列化 
适用场景:系统集成,跨语言调用

thrift协议

memcached协议

redis协议

 
容错===============================
Dubbo提供了集群部署、路由、负载均衡等容错机制,在客户端引用服务时,由MockClusterInvoker封装具体的集群策略类,默认是FailoverCluster类,具体逻辑见《4.4.2 远程引用服务》部分

三、集群策略的种类

1)AvailableCluster: 获取可用的调用。遍历所有Invokers判断Invoker.isAvalible,只要一个有为true直接调用返回,不管成功与否;

2)BroadcastCluster: 广播调用。遍历所有Invokers, 逐个调用每个调用catch住异常不影响其他invoker调用;

3)FailbackCluster: 失败自动恢复, 对于invoker调用失败, 后台记录失败请求,任务定时重发, 通常用于通知;

4)FailfastCluster: 快速失败,只发起一次调用,失败立即保错,通常用于非幂等性操作;

5)FailoverCluster: 失败转移,当出现失败,重试其它服务器,通常用于读操作,但重试会带来更长延迟;

 
原文地址:https://www.cnblogs.com/duanR/p/8446339.html