Netflix Zuul 负载均衡配置

在微服务架构中,负载均衡是一种重要的技术,用于将网络请求分散到多个服务器上,以提高系统的可用性和性能。通过负载均衡,可以避免单个服务器过载,同时提高整个系统的稳定性和响应速度。

Zuul 作为 API 网关,内置了负载均衡功能,可以自动将请求分发到后端服务集群中的不同实例上。Zuul 的负载均衡机制主要依赖于 Ribbon 和 Eureka(或其他服务发现组件)。

Ribbon 是 Netflix 开源的一个客户端负载均衡器,它可以自动从服务注册中心(如 Eureka)获取服务实例列表,并根据配置的负载均衡算法选择一个实例来处理请求。Zuul 内部集成了 Ribbon,可以方便地使用其负载均衡功能。

Ribbon 提供了多种负载均衡算法,如轮询(Round Robin)、随机(Random)、最少活跃请求数(Least Active)等。这些算法可以根据实际需求进行选择,以实现不同的负载均衡效果。

Eureka 是 Netflix 开源的服务注册与发现组件,它可以帮助微服务架构中的服务实例自动注册和发现。当 Zuul 作为 API 网关时,它可以与 Eureka 集成,从 Eureka 中获取后端服务的实例信息,并利用 Ribbon 实现负载均衡。

配置与使用

集成 Eureka

要在 Zuul 中集成 Eureka,需要在 Zuul 的配置文件中添加 Eureka 客户端的配置,如服务注册中心的地址、应用名称等。例如:

## 服务地址
eureka:
  client:
    enabled: true
    service-url:
      # 注册中心路径,表示我们向这个注册中心注册服务,如果向多个注册中心注册,用“,”进行分隔
      defaultZone: http://localhost:8761/eureka
  instance:
    hostname: localhost
    # 心跳间隔5s,默认30s。每一个服务配置后,心跳间隔和心跳超时时间会被保存在server端,
    # 不同服务的心跳频率可能不同,server端会根据保存的配置来分别探活
    lease-renewal-interval-in-seconds: 5
    # 心跳超时时间10s,默认90s。从client端最后一次发出心跳后,
    # 达到这个时间没有再次发出心跳,表示服务不可用,将它的实例从注册中心移除
    lease-expiration-duration-in-seconds: 10

配置 Ribbon

在集成了 Eureka 之后,Zuul 会自动使用 Ribbon 进行负载均衡。如果需要自定义负载均衡算法或其他 Ribbon 配置,可以在配置文件中进行相应设置。例如:

# zuul 负载均衡配置
zuul:
  # 路由配置
  routes:
    service-order:
      path: /api/order/**
      service-id: service-order
    service-product:
      path: /api/product/**
      service-id: service-product


# ribbon 相关配置
ribbon:
  # 读取超时时间,单位为毫秒,此处设置为 5 秒
  ReadTimeout: 5000
  # 连接超时时间,单位为毫秒,此处设置为 2 秒
  ConnectTimeout: 2000
  # 为所有服务配置统一规则,所有服务都使用轮训策略
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule

# 为 service-product 服务配置单独规则
service-product:
  ribbon:
    # 仅为 service-product 服务采用随机访问负载均衡规则
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

启动&验证

编写好上述配置后,重启服务,服务启动情况如下图:

5a5df30ef2a6b1ebe6287e928b7c2ff1_1734067279545-743b5792-791a-4f1b-be3f-31419d8c6b6b.png

上图中,我们启动了两个 SERVICE-PRODUCT 服务,启动方式如下图:

93554b73f69aaada51669f788b83c5a0_1734067871365-5e98e27d-764d-4096-bee5-85bd47f9e4ea.png

c3c117dad9b73b294f9464399538d66e_1734067908747-e19ae35d-2c3f-4191-bef5-b9d0b047fbb9.png

168863eacb983a1974f4d576ca223a9c_1734068058834-980f08c2-b401-421b-820a-727dd27d566f.png

最后使用浏览器访问 http://localhost:9000/api/product/product/1 地址,效果如下图:

2e514517a52b84f4fbba570da957ca0c_1734067527394-86906eae-4390-4a59-b821-a2837b7eaea3.gif

上图中,port 在 8091 和 18091 之间徘徊,没有规律,随机的。

点击下载/查看本教程相关资料或者源代码。
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号