【发布时间】:2018-03-27 15:34:56
【问题描述】:
我有一个 java servlet 应用程序 (.war)。应用程序本身是无状态的,只进行计算。它通过 REST API(使用 Jersey 2 实现)公开其功能。我正在使用多个实例在 Cloud Foundry 上部署应用程序,但结果是所有请求都仅转发到 1 个实例,并且始终是同一个实例。
该应用有一个路由,我可以使用 X-CF-APP-INSTANCE 标头向特定实例发送请求,但我希望我的实例能够自行平衡。
根据 Cloud Foundry 文档,gorouter 在选择应为请求提供服务的实例时应使用循环策略。我是否遗漏了配置中的某些内容,或者是否有人经历过这样的行为?
【问题讨论】:
-
您使用的请求批次大小是多少?您是否运行了一批请求(例如 20、40 或 100 个)并查看哪个应用程序实例如何处理它们?您在日志中看到了什么应用实例 ID?
-
负载平衡应该自动发生。它不会的主要原因是如果您使用会话。如果设置了 JSESSIONID,您最终将获得粘性会话,并且请求将转到同一个应用程序实例。您如何向应用程序发送请求?您可以尝试使用
curl之类的方法来发送请求吗?默认情况下,这不会维护会话,因此它应该在所有应用程序实例之间循环。另外,检查curl -vv的详细输出,看看服务器是否正在尝试为 JSESSIONID 设置 cookie。 -
首先 - 感谢您的提示。我肯定有负载平衡的问题。无论我如何发送请求(curl、swagger、jmeter、浏览器休息扩展),它们总是会发送到同一个实例。 “cf logs”证实了这一点,我可以看到 [APP/PROC/WEB/0] 或 [APP/PROC/WEB/1] 例如 0 或 1。我能够使用 X-CF-APP- 处理单个实例INSTANCE 标头...
标签: cloud-foundry