Spring Boot基于健康的负载平衡

时间:2016-11-10 10:54:03

标签: spring-boot spring-boot-actuator

我使用Spring Boot进行微服务,而且我遇到了负载均衡问题。

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

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

例如,我有以下微服务

  • client
  • proxy(< - 我想实现这个)
  • server 1
  • server 2

当客户端向代理发送http请求时,代理应该能够决定哪个服务器实例负载最小,并将请求转发给该代理。

有一种简单的方法吗?

谢谢, krisy

1 个答案:

答案 0 :(得分:0)

如果您想对各种负载数据做出选择,您可以实施自定义HealthIndicator,以便随着时间的推移积累某种负载'数据,在负载均衡器中使用它来决定发送流量的位置。

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

@Component
class LoadIndicator implements HealthIndicator {

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

}

也许您已经可以使用一些弹簧靴指标,执行器中有多个端点。 / beans,/ trace,/ metrics。应该也可以在您的应用程序中找到该数据。