负载均衡
需要有集群的环境
-
服务提供者被部署到多个机器上:1、2、3号机器上
-
这时候,服务的消费者A去调用1、2、3三个服务
-
如果A来了一个请求,这个请求到底是访问1还是2还是3,这时候就需要一个负载均衡的策略来影响这个事情
-
如图所示:
Dubbo的负载均衡的策略:
-
Random:按权重随机,默认值。按权重设置随机概率。
即按照三个机器的权重随机访问,下者的访问比例为:1:2:1
-
RoundRobin:按权重轮询
按上图的访问的话,访问顺序应该是:1—>2---->3----->2…
-
LeastActive:最少活跃调用数,相同活跃数的随机。
每一次访问都会去询问所有的服务提供者,然后选择最快的进行调用,每一次访问都会调用,如果活跃度相同的话,就随机调用
-
ConsistentHash:-致性 Hash,相同参数的请求总发到同一提供者。
如果只要第一次访问的是某一个服务提供者,那么只要与第一次访问的服务消费者内容一样的访问,永远都会去访问第一次访问的能够服务提供者
这个是通过hash算法去计算出机器的编号
Random演示
安装上面的截图实现的步骤为:
(1)设置权重:
(2)当上面的服务启动后,再次修改weight、端口号,然后再次启动该机器,就能够实现多个服务了
(3)上面的步骤设置三次,就部署了三个服务,搭建了集群
(4)设置负载均衡的方式为Random
集群容错
出现情况:
- 服务提供者部署了一个集群,分别部署在B、C、D三台机器上
- 服务的消费者来调用服务的提供者,如果这次调用出错了(如果A调用B机器出错了),出错了怎么处理,就是容错机制
集群容错的模式:
-
Failover Cluster
:失败重试。默认值。当出现失败,重试其它服务器,默认重试2次,使用retries配置。一般用于读操作
(比如数据库的,可能会出现执行三次执行sql的情况,所以这种一般用于读的操作)比如说,A调用B出错了,就会去重试C和D,因为C、D是B的集群,直到C和D都失败了,才真正的会抛出异常
-
Failfast Cluster
:快速失败,只发起一次调用,失败立即报错,通常用于写操作
。 -
Failsafe Cluster
:失败安全,出现异常时,直接忽略。返回一个空结果。 -
Failback Cluster
:失败自动恢复,后台记录失败请求,定时重发。必须要调用成功,一次失败过后,过一段时间会再发一次请求,失败了又发一个请求,直到成功
比较重要的操作使用这个
-
Forking, Cluster
:并行调用多个服务器,只要一个成功即返回。一次调用多个服务提供者:B、C、D,只要有一个成功就返回
但是这样的操作比较耗性能
-
Broadcast Cluster
:广播调用所有提供者
,逐个调用,任意一台报错则报错。调用所有的服务提供者,只要有一个失败就报错,成功是需要所有的成功才可以
同步要求比较高的才使用这个
Failover Cluster演示
服务器的配置与Random的演示一样
设置负载均衡的方式为Failover Cluster
服务降级
B机器里面部署了多个服务,消费者A调用B机器里面的三个服务
服务降级出现:因为B机器的性能到了利用到最大化,这时候就需要将不太重要的服务给管关掉,释放资源,保证核心的业务能够进行
服务降级方式:
-
mock= force:return null
表示消费方对该服务的方法调用都直接返回null值,不发起远程调用。来屏蔽不重要服务不可用时对调用方的影响。
-
mock=fail:return null
表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。