1.什么是负载均衡

先来个官方的解释。

维基百科对负载均衡的定义:负载均衡改善了跨多个计算资源(例如计算机,计算机集群,网络链接,中央处理单元或磁盘驱动的的工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间,并避免任何单个资源的过载。使用具有负载平衡而不是单个组件的多个组件可以通过冗余提高可靠性和可用性。负载平衡通常涉及专用软件或硬件。

上面讲的大家可能不太好理解,再用通俗的话给大家说一下。

比如我们的系统中的某个服务的访问量特别大,我们将这个服务部署在了多台服务器上,当客户端发起请求的时候,多台服务器都可以处理这个请求。那么,如何正确选择处理该请求的服务器就很关键。假如,你就要一台服务器来处理该服务的请求,那该服务部署在多台服务器的意义就不复存在了。负载均衡就是为了避免单个服务器响应同一请求,容易造成服务器宕机、崩溃等问题,我们从负载均衡的这四个字就能明显感受到它的意义。

2. Dubbo 提供的负载均衡策略

在集群负载均衡时,Dubbo 提供了多种均衡策略,默认为 random 随机调用。可以自行扩展负载均衡策略。

1)Random LoadBalance(默认,基于权重的随机负载均衡机制)

  • 随机,按权重设置随机概率。
  • 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权

2)RoundRobin LoadBalance(不推荐,基于权重的轮询负载均衡机制)

  • 轮循,按公约后的权重设置轮循比率。
  • 存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

3)LeastActive LoadBalance

  • 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
  • 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

4)ConsistentHash LoadBalance

  • 一致性 Hash,相同参数的请求总是发到同一提供者。(如果你需要的不是随机负载均衡,是要一类请求都到一个节点,那就走这个一致性hash策略。)
  • 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
  • 缺省只对第一个参数 Hash,如果要修改,请配置 <dubbo:parameter key="hash.arguments" value="0,1" />
  • 缺省用 160 份虚拟节点,如果要修改,请配置 <dubbo:parameter key="hash.nodes" value="320" />

3.配置方式

xml 配置方式

服务端服务级别

<dubbo:service interface="..." loadbalance="roundrobin" />

客户端服务级别

<dubbo:reference interface="..." loadbalance="roundrobin" />

服务端方法级别

<dubbo:service interface="..."> <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>

客户端方法级别

<dubbo:reference interface="..."> <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>

注解配置方式:

消费方基于基于注解的服务级别配置方式:

@Reference(loadbalance = "roundrobin")
HelloService helloService;

四、zookeeper宕机与dubbo直连的情况

zookeeper宕机dubbo直连的情况在面试中可能会被经常问到,所以要引起重视。

在实际生产中,假如zookeeper注册中心宕掉,一段时间内服务消费方还是能够调用提供方的服务的,实际上它使用的本地缓存进行通讯,这只是dubbo健壮性的一种体现。

dubbo的健壮性表现:

  1. 监控中心宕掉不影响使用,只是丢失部分采样数据
  2. 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
  3. 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
  4. 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
  5. 服务提供者无状态,任意一台宕掉后,不影响使用
  6. 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

我们前面提到过:注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。所以,我们可以完全可以绕过注册中心——采用 dubbo 直连 ,即在服务消费方配置服务提供方的位置信息。

xml配置方式:

<dubbo:reference id="userService" interface="com.zang.gmall.service.UserService" url="dubbo://localhost:20880" />

注解方式:

@Reference(url = "127.0.0.1:20880")
HelloService helloService;

需要更多教程,微信扫码即可

Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(3)相关推荐

  1. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(2)

    1.Dubbo 的架构图解 上述节点简单说明: Provider: 暴露服务的服务提供方 Consumer: 调用远程服务的服务消费方 Registry: 服务注册与发现的注册中心 Monitor: ...

  2. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(1)

    1.什么是 Dubbo? Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错 ...

  3. springboot dubbo负载均衡配置

    springboot dubbo负载均衡配置 1.多zookeeper yml配置 2.负载配置 random roundRobin leastActive consistentHash 1.多zoo ...

  4. Dubbo 负载均衡配置

    Dubbo 负载均衡配置 Dubbo 提供了4种负载均衡实现,分别是基于权重随机算法的 RandomLoadBalance.基于最少活跃调用数算法的 LeastActiveLoadBalance.基于 ...

  5. Dubbo内置4种负载均衡算法(详解)

    1.1 什么是负载均衡 在实际开发中,一个服务基本都是集群模式的,也就是多个功能相同的项目在运行,这样才能承受更高的并发,这时一个请求到这个服务,就需要确定访问哪一个服务器 Dubbo框架内部支持负载 ...

  6. dns服务器怎么优化,总结DNS服务器负载均衡配置的原理及优缺点

    负载均衡技术能够平衡服务器集群中所有的服务器和请求应用之间的通信负载,根据实时响应时间进行判断,将任务交由负载最轻的服务器来处理,以实现真正的智能通信管理和最佳的服务器群性能,从而使网站始终保持运行和 ...

  7. L4和L7负载均衡原理和常用负载均衡架构实现

    L4和L7负载均衡原理 四层负载均衡原理 所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器.以常见的TCP为例,负载均衡设备在接 ...

  8. 地址设置nginx负载均衡_nginx负载均衡配置实例

    什么是负载均衡? 负载均衡主要通过专门的硬件设备或者通过软件算法实现.通过硬件设备实现的负载均衡效果好.效率高.性能稳定,但是成本比较高.通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性. ...

  9. Nginx+Tomcat负载均衡配置

     Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?下面然给我们详细来了解一下吧 Ng ...

最新文章

  1. MySQL 性能调优的10个方法
  2. 光流 | OpenCV实现简单的optical flow(代码类)
  3. adb 切换默认桌面_公告 | 武林外传手游官方服务器全面开放桌面版体验
  4. python怎么把数据写进txt_python 如何将数据写入本地txt文本文件的实现方法
  5. LCD显示实验----STM32f4--HAL
  6. 15. OD-去除程序最后退出时弹出的注册模态对话框,eXeScope、Resource_Hacker工具的学习
  7. cad2017怎么改变选择方式_近视手术方式这么多,到底该怎么选择?
  8. mysql加服务器命令_mysql服务器常用命令
  9. 正则表达式过滤多个词语并替换为相同长度的星号
  10. 重启iis最快速的方法
  11. 百度、谷歌搜索引擎原理
  12. matlab xcorr lags,[转载]matlab中xcorr的用法
  13. 操作系统第七、八章习题
  14. Android 部分手机拍照后获取的图片被旋转
  15. java连不上sqlserver_java和SQL连接不上——解决步骤
  16. Chrome谷歌浏览器不能输入中文问题
  17. Ubuntu下搭建hadoop出现Permission denied (publickey,password)的问题
  18. 树莓派安装smbus_如何配置树莓派并安装有用的库
  19. 洛谷:ISBN号码(c语言)
  20. 【java反射】反射是啥?是干啥用的?

热门文章

  1. 嘀嗒公司被约谈 要求全面暂停进出京跨城网约车、顺风车等业务
  2. 任正非:6G华为也是领先世界 或在十年后投入使用
  3. 18岁男子吸电子烟一年肺如70岁老人,怒诉电子烟公司
  4. 9月26日发布?一加7T系列被“扒光”:硬核到没朋友
  5. 是兄弟就来砍我!“贪玩蓝月”母公司实控人被捕:曾是中国最年轻富豪
  6. 荣耀20 Pro三色渲染图曝光:后置潜望式镜头+3D ToF镜头
  7. 「十年老测试」测试员的职场之路
  8. 提高django model效率的几个小方法
  9. Spring容器创建流程(3)对beanFactory设置
  10. 压缩命令_linux中压缩文件命令gzip和tar的压缩选项的简单用法