问题描述
我正在为PCF中部署的spring boot应用程序实施自动扩展策略。我读过使用内存不是Java应用程序的好主意,因为Java不会经常向OS释放内存。 其次,PCF不建议使用cpu利用率指标。
因此,我正在使用延迟指标来实施策略。现在我的疑问是PCF中的http延迟到底是什么。就像是请求来响应的绝对时间。或从确认请求开始的时间。它会在确认之前考虑队列时间吗?有很多困惑。如果有任何清除,那么我可以正确地实施自动扩展策略。
PS:关于自动缩放的任何其他建议都可以。
解决方法
现在我怀疑PCF中的http延迟到底是什么。就像是请求来响应的绝对时间。或从确认请求开始的时间。它会在确认之前考虑队列时间吗?有很多困惑。如果有任何清除,那么我可以正确地实施自动扩展策略。
从Gorouter的角度来看,这是请求的完整响应时间。
一个更好解释的例子:
- 请求离开您的浏览器
- 通常会遇到一些负载均衡器,然后将其发送到Gorouter。
- Gorouter随后会将请求路由到您的应用程序。
- 您的应用将处理该请求。
- Gorouter将把响应从应用程序代理回去。
自动定标器使用的延迟值是Gorouter公开的一项指标,称为TIMER指标。计时器列出了从Gorouter收到请求的时间到响应完全传递给客户端的时间(即示例中的步骤3-5)。
如果要查看每个请求的实际值,可以运行cf logs
并查看[RTR]
条目,gorouter_time字段将告诉您延迟。您也可以使用cf tail
命令直接查看TIMER指标,但这需要安装一个额外的cf cli插件才能显示相同的数字。
PS:关于自动缩放的任何其他建议都可以。
只要您的响应时间不依赖于太多其他服务,或者您实现了良好的断路器,则延迟是一个很好的度量标准)。当其他服务的缓慢性反映到延迟中并导致自动缩放器不正确地缩放您的应用程序时(实际上,应该缩放上游服务),延迟可能是一个问题。
其他选项:
- HTTP吞吐量,只要您使用的是最新PCF版本。 See here。
- 从您的应用程序发出的自定义指标。使用Spring Boot超级简单。这样,您可以导出有关JVM内存使用情况的更好指标,例如堆使用情况或线程数,从而可以做出更智能的自动伸缩决策。您还可以根据应用中与业务相关的因素实施完全自定义的指标。