我正在使用Spring Boot进行微服务,遇到了负载平衡问题。
Spring Actuator为应用程序添加了特殊的Health
和metrics
endpoint;有了这个,可以从正在运行的实例中获取一些基本信息。
我想做的是创建一个(反向)代理(例如使用Zuul和/或Ribbon?),它创建一个集中式负载均衡器,根据实例的健康状态选择实例。
例如,我有以下微服务
客户端
代理
(当客户端向代理发送超文本传输协议请求时,代理应该能够决定哪个到服务器实例的负载最小,并将请求转发到那个实例。
有没有简单的方法可以做到这一点?
谢谢Krisy
如果您想对各种负载数据做出选择,您可以实现自定义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.应该也可以在您的应用程序中找到这些数据。