问题描述
我有一个应用程序服务器,该服务器连接到另外两个服务:Postgres和CouchDB。
应用服务器已部署到自动伸缩组,这需要它具有运行状况终结点:/health
。
现在,/health
端点在其中一项服务不可访问时返回500。哪种方法有意义,但会强制自动伸缩组“嘈杂”,因为在出现问题时,它会不断重新启动自动伸缩组。
问题:关于“ /健康”检查的最佳实践是什么?他们应该只检查基础服务还是应该检查从属服务?
解决方法
这取决于您实现服务的编程语言和框架。
例如,java生态系统具有一个Spring Boot框架,您可以立即实现此类功能(Spring Boot执行器)。
在您的情况下,如果您有其他编程堆栈,则通常需要在应用程序中实现一个终结点,该终结点在被调用时将返回带有http代码200的成功响应,并且还可以返回例如以下json:
{
"status": "UP"
}
如果您的微服务正在Kubernetes中自动扩展,则Kubernetes本身必须检查此端点的可用性,如果不可用,则创建一个新的微服务实例。
关于对服务(Postgres和CouchDB)的依赖性,我希望微服务可用,如果服务(Postgres和CouchDB)不可用,则微服务应为调用客户端返回错误,但是无论依赖服务(Postgres和CouchDB)如何,微服务无论如何都应该可用于伸缩系统。