提问者:小点点

Spring Boot基于运行状况的负载平衡


我正在使用Spring Boot进行微服务,遇到了负载平衡问题。

Spring Actuator为应用程序添加了特殊的Healthmetricsendpoint;有了这个,可以从正在运行的实例中获取一些基本信息。

我想做的是创建一个(反向)代理(例如使用Zuul和/或Ribbon?),它创建一个集中式负载均衡器,根据实例的健康状态选择实例。

例如,我有以下微服务

  • 客户端
  • 代理

当客户端向代理发送超文本传输协议请求时,代理应该能够决定哪个到服务器实例的负载最小,并将请求转发到那个实例。

有没有简单的方法可以做到这一点?

谢谢Krisy


共1个答案

匿名用户

如果您想对各种负载数据做出选择,您可以实现自定义HealthDemator,它会累积某种“随时间的负载”数据,在负载均衡器中使用它来决定将流量发送到哪里。

所有自定义运行状况指示器都将由spring-boot获取,并在执行器 /healthendpoint上调用。

@Component
class LoadIndicator implements HealthIndicator {

    @Override
    Health health() {
        def loadData = ... do stuff to gather whatever load
        return Health.up()
                        .withDetail("load", loadData)
                        .build();
    }

}

也许您已经可以使用一些spring-boot指标了,执行器中有多个endpoint。 /beans, /trace, /metrics.应该也可以在您的应用程序中找到这些数据。