负载均衡
负载均衡作用在客户端,是高并发、高可用系统必不可少的关键组件,目标是尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。
- Java Chassis的负载均衡作用于微服务消费者,需要微服务应用集成负载均衡模块,启用loadbalance处理链。
配置示例如下:
servicecomb: handler: chain: Consumer: default: loadbalance loadbalance: strategy: name: RoundRobin # 这是开启负载均衡轮询模式,随机模式为Random
在POM中添加如下依赖:
<dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>handler-loadbalance</artifactId> <version>${project.version}</version> </dependency>
- Spring Cloud Huawei负载均衡规则使用了Spring Cloud里面Ribbon的思想,作用在客户端,其原理为:当使用随机规则时,客户端会在下游微服务实例中随机访问一个实例,当使用轮询规则时,客户端会在下游微服务实例中按顺序循环选择Server。
servicecomb: loadbalance: userLoginAction: | rule: Random # 说明负载均衡规则为随机模式,默认是轮询模式RoundRobin
示例
以Spring Cloud Huawei负载均衡demo为例测试负载效果。
此demo中包含consumer、provider-one、provider-two、provider-three四个微服务,分别启动4个微服务,然后通过界面访问: http://${consumer-ip}:8090/load-balance?id=111
- 当规则选择为轮询模式RoundRobin,也是框架默认模式时,结果会按版本号有规律顺序的返回,如下:
provider id-----> 11111 port ----->8091 ,version----->0.0.1 provider id-----> 11111 port ----->8092 ,version----->0.0.2 provider id-----> 11111 port ----->8093 ,version----->0.0.3 provider id-----> 11111 port ----->8091 ,version----->0.0.1 provider id-----> 11111 port ----->8092 ,version----->0.0.2 provider id-----> 11111 port ----->8093 ,version----->0.0.3
- 当规则选择为随机模式Random时,结果将是无规律的返回,如下:
provider id-----> 11111 port ----->8091 ,version----->0.0.1 provider id-----> 11111 port ----->8092 ,version----->0.0.2 provider id-----> 11111 port ----->8091 ,version----->0.0.1 provider id-----> 11111 port ----->8093 ,version----->0.0.3 provider id-----> 11111 port ----->8093 ,version----->0.0.3 provider id-----> 11111 port ----->8092 ,version----->0.0.2