我使用Spring Boot进行微服务,而且我遇到了负载均衡问题。
Spring Actuator为应用添加了特殊的health
和metrics
端点;有了这个,可以从正在运行的实例中获取一些基本信息。
我想做的是创建一个(反向)代理(例如,使用Zuul和/或Ribbon?),它创建一个集中式负载均衡器,根据其健康状态选择实例。
例如,我有以下微服务
client
proxy
(< - 我想实现这个)server 1
server 2
当客户端向代理发送http请求时,代理应该能够决定哪个服务器实例负载最小,并将请求转发给该代理。
有一种简单的方法吗?
谢谢, krisy
答案 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。应该也可以在您的应用程序中找到该数据。