我有一个连接到其他两个服务的应用程序服务器:Postgres 和 CouchDB。
应用程序服务器部署到要求它有一个健康端点的自动缩放组:/health
。
现在,/health
如果其中一项服务无法访问,端点将返回 500。这有点道理,但会强制自动缩放组“嘈杂”,因为它会在出现问题时不断重新启动自动缩放组。
问题:关于“/健康”检查的最佳实践是什么?他们应该只检查底层服务还是应该检查依赖服务?
我有一个连接到其他两个服务的应用程序服务器:Postgres 和 CouchDB。
应用程序服务器部署到要求它有一个健康端点的自动缩放组:/health
。
现在,/health
如果其中一项服务无法访问,端点将返回 500。这有点道理,但会强制自动缩放组“嘈杂”,因为它会在出现问题时不断重新启动自动缩放组。
问题:关于“/健康”检查的最佳实践是什么?他们应该只检查底层服务还是应该检查依赖服务?
这取决于您实现服务的编程语言和框架。
例如,java 生态系统有一个 spring boot 框架,您可以开箱即用地实现此类功能(spring boot actuator)。
在您的情况下,如果您有不同的编程堆栈,您通常需要在应用程序中实现一个端点,该端点在调用时将返回带有 http 代码 200 的成功响应,并且您还可以返回例如以下 json:
{
"status": "UP"
}
如果您的微服务在 Kubernetes 中自动扩展,则 Kubernetes 本身必须检查此端点的可用性,如果不可用,则创建一个新的微服务实例。
关于对服务(Postgres和CouchDB)的依赖,我更喜欢微服务可用的选项,在服务(Postgres和CouchDB)不可用的情况下,微服务应该为调用客户端返回错误,但微服务无论如何,无论依赖的服务(Postgres 和 CouchDB)如何,都应该可用于扩展系统。