抓住搜索参数和术语的救命稻草。
的关键属性JVM
是V
for virtual (至少在这个问题的上下文中)。如何JVM
通过负载平衡跨越机器集群,使其JVM
本身是分布式的?
有点像这:
https://www.cacheonix.org/articles/Distributed-Java-application-on-multiple-JVMs.gif
这样应用程序只能看到一个单一的 JVM
?
答案1
详细阐述我的评论并假设您没有想到一些非常深奥的事情......
也许您正在查看该图并将其解释为用户正在使用一个应用程序,由于 JVM 之间存在某种协调,该应用程序可以在会话期间随时与后端上的任何 JVM 进行通信。这不是它通常的工作方式……至少在广泛使用的架构中不是这样。
该图几乎肯定描绘了具有独立 JVM 的经典分布式环境。如果客户端(用户应用程序)要求在请求之间维护状态(a会议)有多种选择,但它们仍然涉及 JVM,而不了解其他 JVM。
实现此目的最直接、最常见的方法是使用支持所谓的负载均衡器粘性会话。简而言之,这意味着一旦客户建立了身份那么负载均衡器将在会话期间(例如,直到用户注销)始终将客户端的请求路由到同一个 JVM。
我说的是什么意思身份?通常这意味着用户已登录并成功通过身份验证,之后将选择一个唯一的 ID 并将其与用户的所有后续请求相关联。对于 Web 应用程序(例如使用 RESTful API 的应用程序),此 ID 通常在 HTTP 标头中传递。使用这样的标头可以让大多数负载均衡器轻松提取 ID。
或者,您可以放弃粘性会话并将会话状态存储在数据库中,并要求 JVM 在每次收到请求时使用会话 ID 查找该状态。这增加了一些复杂性和开销,但并非闻所未闻。不过,在此模型中 JVM 仍然是独立的。
(您还可以让客户端应用程序在其发出的每个请求中完整地传递会话状态,但除其他问题外,这还存在安全问题。)