Spring boot 基于Spring引导健康的负载平衡

Spring boot 基于Spring引导健康的负载平衡,spring-boot,spring-boot-actuator,Spring Boot,Spring Boot Actuator,我正在使用SpringBoot进行微服务,但我遇到了负载平衡的问题 Spring Actuator为应用程序添加了特殊的健康和指标端点;这样,可以从正在运行的实例中获取一些基本信息 我想做的是创建一个(反向)代理(例如,使用Zuul和/或Ribbon?),它创建一个集中式负载平衡器,根据实例的运行状况选择实例 例如,我有以下微服务 客户端 proxy(如果您想对各种负载数据进行选择,您可以实现自定义的HealthIndicators来累积某种“随时间变化的负载”数据,在负载平衡器中使用它来决定

我正在使用SpringBoot进行微服务,但我遇到了负载平衡的问题

Spring Actuator为应用程序添加了特殊的
健康
指标
端点;这样,可以从正在运行的实例中获取一些基本信息

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

例如,我有以下微服务

  • 客户端

  • proxy
    (如果您想对各种负载数据进行选择,您可以实现自定义的
    HealthIndicator
    s来累积某种“随时间变化的负载”数据,在负载平衡器中使用它来决定将流量发送到何处

    所有自定义健康指示器将由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();
        }
    
    }
    

    也许您已经可以使用一些spring boots度量,执行器中有多个端点。/beans、/trace、/metrics。应该也可以在您的应用程序中找到这些数据。

    如果您想对各种负载数据进行选择,您可以实现自定义的
    HealthIndicator
    来积累某种“lo”广告随着时间的推移'的数据,使用这个在您的负载平衡器,以决定在哪里发送流量

    所有自定义健康指示器将由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();
        }
    
    }
    

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

    这一切都取决于您希望拆分的负载类型。如果是纯基于请求的负载,为什么不将流量拆分为50/50呢服务器都启动了?否则,您可以扩展
    运行状况
    端点,随着时间的推移累积负载,并使用负载平衡器中的数据来决定向何处发送流量。我希望根据服务器的当前负载系数(例如CPU)而不是请求数(因此基本上不完全基于请求)进行平衡这完全取决于您希望拆分的负载类型。如果是纯基于请求的负载,那么如果服务器都准备好了吗?否则,您可以扩展
    运行状况
    端点以随着时间积累负载,并使用负载平衡器中的数据来决定向何处发送流量。我希望根据服务器的当前负载系数(例如CPU)而不是请求数(因此基本上不完全基于请求)进行平衡是的,我想要类似的东西——我不知道的是,如何在负载平衡中访问此类负载数据(我实际上可以“手动”将平衡中的一些REST请求发送到服务器,但Spring可能提供了一些帮助(例如,每个客户端注入健康对象?)我使用过的负载平衡器,我自己没有实现,但通常会发出http请求,以检查状态代码(2xx、4xx、5xx)确定主机是否健康。如果您实现了自己的,您可能会查看实际响应数据,以确定主机是否健康,以及它所承受的负载类型。是的,这是我的计划:-)我只是不知道,如果Spring有某种内置的访问主机运行状况的功能,或者是什么,我必须“手动”完成看看
    /metrics
    端点,它返回诸如内存、可用内存、正常运行时间、系统平均负载等数据。例如,您是正确的;此端点比健康更适合我的需要-更新了我的问题(但是,我仍然不知道如何从代理访问此信息)是的,我想要类似的东西——我不知道的是,如何在负载平衡中访问此类负载数据(我实际上可以“手动”将平衡中的一些REST请求发送到服务器,但Spring可能提供了一些帮助(例如,每个客户端注入健康对象?)我使用过的负载平衡器,我自己没有实现,但通常会发出http请求,以检查状态代码(2xx、4xx、5xx)确定主机是否健康。如果您实现了自己的,您可能会查看实际响应数据,以确定主机是否健康,以及它所承受的负载类型。是的,这是我的计划:-)我只是不知道,如果Spring有某种内置的访问主机运行状况的功能,或者是什么,我必须“手动”完成看看
    /metrics
    端点,它返回诸如内存、可用内存、正常运行时间、系统平均负载等数据。例如,您是正确的;此端点比健康更适合我的需要-更新了我的问题(但是,我仍然不知道如何从代理访问此信息)