更新时间:2024-10-23 GMT+08:00

负载均衡

负载均衡作用在客户端,是高并发、高可用系统必不可少的关键组件,目标是尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。

  • 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