您现在的位置是:首页 > 后台技术 > dubbodubbo

第六章 负载均衡(图文)

第十三双眼睛2021-06-20【dubbo】人已围观

简介集群:集群是一种计算机系统,是一种服务器结构。把一组多个计算机,包括硬件和软
件组织在一个网络中。相互连接起来共同完成某个工作。对用户来说使用的是一个计算机,
集群对用户是透明的。

负载均衡
负载均衡是以集群为前提的。英文名称为 Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行。对于网络应用而言,并不是一开始就需要负载均衡,当网络应用的访问量不断增长,单个处理单元无法满足负载需求时,网络应用流量将要出现瓶颈时,负载均衡才会起到作用。一般通过一个或者多个前端负载均衡器,将工作负载分发到后端的一组服务器上,从而达到
整个系统的高性能和高可用性。负载均衡有两方面的含义:首先,单个重负载的工作分配到多台服务器做并行处理,每个服务器处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高,这是集群(cluster)技术带来的优势。第二层含义是:大量的并发访问或数据流量分担到多台服务器分别处理,减少用户等待响应的时间。每个访问分配给不同的服务器处理。

负载策略
Dubbo 提供了多种均衡策略,缺省为 random 随机调用。
Random LoadBalance
随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
RoundRobin LoadBalance
轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
LeastActive LoadBalance
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
ConsistentHash LoadBalance
一致性 Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。算法参见:http://en.wikipedia.org/wiki/Consistent_hashing。缺省只对第一个参数 Hash,如果要修改,请配置<dubbo:parameter key="hash.arguments"value="0,1" />
配置方式:
<dubbo:service interface="..." loadbalance="roundrobin" />或<dubbo:reference interface="..." loadbalance="roundrobin" />
随机:loadbalance=” random”
轮询:loadbalance=” roundrobin”
最少活跃:loadbalance=” leastactive”
一致性 Hash:loadbalance=” consistenthash”
Zookeepr 集群
集群中只要有超过半数的机器是正常工作的,那么整个集群对外就是可用的;也就是说如果有 2 个 zookeeper,那么只要有 1 个故障了,zookeeper 就不能用了,因为 1 没有过半,所以 2 个 zookeeper 不是高可用的,不能容忍任何 1 台发生故障;同理,要是有3个zookeeper,一个故障了,还剩下2个正常的,过半了,所以3个zookeeper才是高可用的,因为能容忍 1 台发生故障;总结,Zookeeper 集群中 Zookeeper 节点个数是奇数,保证高可用至少要 3 个以上。
搭建 Zookeeper 集群
教学环境,没有那么多的物理服务器,所以在一台计算机上安装 3 个 Zookeeper 搭建一个伪集群。每个安装的 Zookeeper 相当于一个独立的服务器上的集群节点。
(1) 安装 3 个 Zookeeper
把已经安装好的 Zookeeper 复制三份分别命名:
zookeeper-3.4.10_1
zookeeper-3.4.10_2
zookeeper-3.4.10_3
创建 data 目录存放数据
在每个 Zookeeper 的主目录下创建目录 data
(3) 修改 zoo.conf
加入集群中各 Zookeeper 的信息,3 个 Zookeeper 各自 conf 的 zoo.cfg 文件修改内容。
参考 Zookeeper 文档,连接如下:
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper
Zookeeper-3.4.10_1 的 zoo.cfg:
dataDir=/usr/local/zookeeper-3.4.10_1/data/
clientPort=2182
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
其中 2888 端口号是 zookeeper 服务之间通信的端口,3888 是 zookeeper 与选举新的领导者,追随者连接到领导者服务器的端口。server.1 中数字是集群中 Zookeeper 的标志。用来区别其他 Zookeeper。
其他两个 Zookeeper 的 conf/zoo.cfg
zookeeper-3.4.10_2/conf/zoo.cfg
clientPort=2183
dataDir=/usr/local/zookeeper-3.4.10_2/data/
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
 
zookeeper-3.4.10_3/conf/zoo.cfg
clientPort=2184
dataDir=/usr/local/zookeeper-3.4.10_3/data/
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

(4) 增加 myid 文件
Zookpeer使用myid识别当前服务器是谁,和zoo.cfg中的server.1 , server.2,server.3对应。在每个 Zookeeper 数据存放目录 data 下新建 myid 文件。文件没有扩展名。zookeeper-3.4.10_1/data/myid 文件内容是 1,zookeeper-3.4.10_2/data/myid 文件内容是 2zookeeper-3.4.10_3/data/myid 文件内容是 3
(5) 启动三个 Zookeeper
在 zookeeper-3.4.10_1/bin 目录执行命令:./zkServer.sh start
(6) 查看 Zookeeper 状态
执行命令 ./zkServer.sh status
(7) 在 Dubbo 中使用 Zookeeper 集群
A、修改之前的服务提供者的 spring 配置文件,加入注册中心的内容
B、 修改之前的服务消费者的 spring 配置文件,加入注册中心的内容
C、 首先启动服务提供者,向注册中心注册服务
D、再启动服务消费者
服务消费者正常访问服务提供者。
E、 关闭其中一台 Zoopkeeper
F、 在启动服务消费者
服务消费者正常访问服务提供者。
G、再关闭一台 Zookeeper
H、在启动服务消费者
服务消费者不能访问服务提供者。注册中心连接不上。

 

Tags:dubbo

很赞哦! ()

上一篇:第五章 zookeeper

下一篇:返回列表

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计242篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们