[spring-projects/spring-boot]允许健康指标与健康端点异步运行,提供其当前状态的视图

2024-06-26 364 views
6

你好,

如果 spring boot 执行器能够提供开箱即用的锁定/信号量/互斥逻辑来防止其端点泛滥,那就太好了。我特别想到了“执行器/健康”,因为这个端点可以通过自定义扩展,HealthIndicators但可能存在问题。我的一个 HealthIndicators 通过调用另一个服务/存储库导致了一个长时间运行的任务(最终:缺少响应/连接超时在一定程度上解决了这个问题)。由于计算时间太长,我的监控系统(consul)发出了更多请求以获取状态。但这只会淹没我的系统……

目前,执行器端点已实现缓存逻辑:一旦计算出值,就会将其缓存。对我来说,缺少的是尚未计算(或过时/无效)的执行器端点值的信号/锁定机制。此功能将有助于避免系统泛滥。

我想知道 SpringBoot Actuator 是否可以提供这样的功能(如缓存......),并且想在自己实施自定义解决方案之前与您联系......

此致。

回答

9

你好@wilkinsona,

我将开始实施类似的事情,并在第一稿准备好后立即回复您

5

@rfelgent 只是为了设定期望,我的评论主要是为了将这两个问题联系在一起。这并不一定意味着我们会决定将这种功能添加到 Spring Boot。正如我在 #25188 的评论中所说,它会增加相当多的复杂性,我们需要权衡利弊。还可以采取几种不同的方法。如果您想实现某些东西并与我们分享,那就太好了。我只是想让你知道,我们可能决定不在这个领域做任何事情,或者决定对你提出的任何建议采取不同的方法。

9

你好 @wilkinsona,

感谢您澄清“我的期望”。:-)

我的主要目标是确保我不会错过 Spring 执行器本身的这个功能。目前看来此功能不可用,但对其他人来说可能也很有价值(感谢问题 #25188 的链接)

无论如何,我更喜欢 Spring Boot Actuator 提供的锁/信号量功能,因为它可以让我免于管理应用程序中的自定义代码或自定义依赖项。

我想和 Spring Boot 团队的某个人讨论一下这个功能以及我对实现的想法,这样我就可以推动这个话题了。如果这个功能或其实现被拒绝,我完全没问题 - 但我们应该先讨论一下,不是吗?

此致

6

来自#2652:

我一直在想是否可以在后台定期运行健康指标,然后健康端点会立即响应当前的聚合状态。

1

你好 @wilkinsona,

抱歉我最近几天没有来!

我注意到,您已经改变了主题:我原来关于“互斥/锁定”功能的想法被放弃,转而采用异步、定期运行的任务?

我可以得出结论:这是最喜欢的设计/概念吗?

这个概念如何防止端点(或其计算)泛滥?

4

我们设想对健康端点的请求将立即返回当前状态,而其他程序将使该当前状态保持最新。这可以通过安排在后台定期运行的程序来实现,或者在收到请求时按需运行。在按需运行的情况下,我们可能需要一个可配置的最大请求等待健康状态更新的时间,然后才能响应 down 或 unknown。

9

这个概念是否包括针对每个健康贡献者制定具有特定速率和/或延迟的专门计划?

6

恐怕我们还不知道,因此设计工作标签为“待定”。我最初的反应是,我们希望避免这种复杂程度,如果我们采用基于调度的方法,我们希望为所有贡献者使用一个时间表。

1

设计工作还没有完成吗?

8

是的。我们可能会在未来一两个月内将其作为 Spring Boot 2.6 规划的一部分进行研究。