【问题标题】:How can i cluster a spring mvc application?我如何集群一个spring mvc应用程序?
【发布时间】:2012-09-23 17:13:39
【问题描述】:

我在码头服务器上有一个用 spring 编写的 web 应用程序。由于负载平衡,我必须在 Web 服务器上复制 http 会话和 spring-security 上下文。

任何人都可以指出一个可行的示例如何使这成为可能吗?

mvc 控制器是 spring-security-oauth2 的一部分,所以我影响它们的能力有限,而码头是我们环境的先决条件。对于大部分数据和缓存,我们将使用 infinispan。

我找不到任何关于 tu 如何使用 spring 集群的当前信息,所以我很感激每一个帮助。

【问题讨论】:

    标签: spring-mvc spring-security distributed-computing


    【解决方案1】:
    1. 什么是无状态的,自动扩展(像大多数 Spring bean 和控制器一样)

    2. 什么是共享的,必须复制,或者集群中的所有实例都必须共享

      1. 必须复制 HTTP 会话。如果是,那么 Spring 安全性(在会话中存储安全上下文将正常工作

      2. 数据库可以正常工作 - 您可以只使用一个,也可以复制它

      3. Infinispan 应该处理内存中缓存的复制

    如果您只在 HTTP 会话和缓存中存储 Serializable 项,那么集群您的应用程序应该可以正常工作。注意同步代码(是否应该分发锁?)和有状态的 bean。

    另见

    【讨论】:

    • 我知道这些事情,但我找不到任何解释如何配置 spring/jetty 进行会话复制的示例/文档。
    • @Laures:据我所知,Jetty(至少 6 个)不支持开箱即用的会话复制。您必须在其之上使用一些解决方案,例如 Hazelcast、Gigaspace、JGroups、Terracotta、数据库... 参见:webtide.intalio.com/2011/08/… 还可以考虑切换到支持开箱即用集群的 Tomcat。从 Spring 框架的角度来看,您无需更改任何内容(如果需要,您的设计除外)。
    • 太棒了。我有点期望我必须创建一些基于 infinispan/hazelcast 的 spring sesseion-store bean 并将其配置在 mvc 命名空间中的某个位置。现在我可以直接在码头做这件事,因为切换到 tomcat 可能不是一种选择。
    • @Laures:你不必在 Spring 中做任何事情,只需实现这个 Jetty 会话存储并像以前一样使用你的 HTTP servlet 会话。
    【解决方案2】:

    虽然我迟到了,但我认为春季课程可能是一个潜在的候选人。在另一个 Stackoverflow 问题中查看解决方案。

    Session replication with Spring session and Hazelcast over Tomcat/Jetty

    Spring-session Docs

    【讨论】:

    • 当有新的解决方案可用时,总是欢迎新的建议
    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2011-01-13
    • 2023-03-11
    相关资源
    最近更新 更多