【问题标题】:When would you use filter health checks?什么时候使用过滤器健康检查?
【发布时间】:2020-09-08 09:56:55
【问题描述】:

我正在阅读这篇文章 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-3.1#filter-health-checks,但无法想象使用过滤器健康检查的实际用例。在现实世界的情况下,我什么时候会使用它?谢谢!

【问题讨论】:

  • 如果你的 api 很大,你可以在组件上做一个过滤器来检查组件是否正常。但是,如果您有微服务架构,那么对您的服务进行简单的修复检查就足够了。

标签: c# .net .net-core health-monitoring health-check


【解决方案1】:

在您共享的同一页面中,您可以看到以下内容:

容器编排器和负载平衡器可以使用运行状况探测来检查应用的状态。例如,容器编排器可以通过停止滚动部署或重新启动容器来响应失败的健康检查。负载均衡器可能会通过将流量从故障实例路由到健康实例来对不健康的应用做出反应。

可以监控内存、磁盘和其他物理服务器资源的使用情况是否正常。

运行状况检查可以测试应用程序的依赖项,例如数据库和外部服务端点,以确认可用性和正常运行。

如您所见,有多种不同类型的健康检查。

我可以看出两个原因:

  1. 不同的报告目的
  • 特定监控客户端的组项目。一个是系统部门,一个是数据库部门
  1. 性能原因
  • 评估数据库的运行状况可能需要一些时间。您可能需要在夜间举起这些,而其他人则每 5 分钟举起一次。过滤将执行正确的过滤。

【讨论】:

  • 感谢您的回复。因此,对于不同的健康检查可用,我假设开发人员需要创建不同的检查集,并为每个集创建一个端点来触发和检查。也许使用MapWhen 和 Predicate 来触发不同的检查集?这听起来正确吗?绝对是预先确定和预先构建的健康检查集,而不是动态创建的,对吧?
  • 完全正确。这完全取决于分组和每个组的目的。
【解决方案2】:

可以使用多种运行状况检查类型。您提供的链接中提到了大多数。 一些比较流行的包括检查数据库连接或端点是否可用。

至于现实生活中的情况:

我将我的服务添加到 kubernetes。如果您不知道 kubernetes 是什么,可以将其视为跟踪我的服务的人。现在在 kubernetes 中,您可以指定健康检查的端点,以便 kubernetes 可以收集有关应用程序状态的信息。 Kubernetes 可以配置为根据您的健康检查状态执行特定操作。 例如 kubernities 要求对您的服务进行一般健康检查。假设数据库连接和您通过端点进行通信的另一个服务。在某个时间间隔内,它会出现降级(不能做我需要它做的事情)状态,因为没有任何工作。那时我可以预先设置 kubernities 以关闭服务或重新启动它。

现在,如果您将服务扩展到相互通信的多个服务和多个数据库。然后您可以看到如何使用 Kubernetes 和运行状况检查来保持对整个系统的良好监控前景。 您可以想象,一些健康检查的复杂性也会增加。

这是一个真实的情况,发生在今天对微服务系统进行健康检查的情况下。真的很有帮助。

希望对你有帮助:D

【讨论】:

  • 感谢您的回复。因此,对于不同的健康检查可用,我假设开发人员需要创建不同的检查集,并为每个集创建一个端点来触发和检查。也许使用MapWhen 和 Predicate 来触发不同的检查集?这听起来正确吗?绝对是预先确定和预先构建的健康检查集,而不是动态创建的,对吧?
  • 是的,这是正确的。 MapWhen 是使用它的方法之一。没有什么比即时进行的健康检查更容易想到的了。但我想如果您依赖第三方服务,可能就是这种情况。假设您对一直请求的天气数据进行了某些操作,但由于某种原因您没有获得天气数据,但服务器是响应式的。但我说的是极端情况,即使在那个时候你也可以为它预先构建。希望对人有所帮助。如果对您有帮助,请不要忘记为答案投票:D
猜你喜欢
  • 2017-07-16
  • 1970-01-01
  • 2016-05-06
  • 2015-10-27
  • 2021-04-20
  • 2022-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多