【问题标题】:Glassfish Amazon AWS EC2 instances and ELB caching issueGlassfish Amazon AWS EC2 实例和 ELB 缓存问题
【发布时间】:2011-04-28 17:28:45
【问题描述】:

我有 2 个 EC2 实例运行 Glassfish 应用服务器(运行完全相同的已部署应用程序),这些实例在 Elastic Load Balancer 下运行。这很好用,但我担心缓存与 EJB 不一致。

情况: 客户端向 ELB 发送请求,该请求转发到 EC2 实例 1。一些 EJB 对象,我们称之为 EJB1,被缓存。 客户端 --> ELB --> EC2-1(EJB1 缓存)

不久之后,客户端发送另一个请求,但现在该请求被转发到 EC2 实例 2。EJB1 现在缓存在该实例上。 客户端 --> ELB --> EC2-2(EJB1 缓存)

不久之后,客户端发送另一个请求并转发到 EC2 实例 1。EJB1 仍在缓存中但不是最新的,从而导致缓存不一致。 客户端 --> ELB --> EC2-1(EJB1 缓存)

不幸的是,我还没有真正看到这个问题,但我觉得这是一种可能性。除了关闭 EJB 的缓存之外,防止这种情况发生的正确方法是什么?

谢谢。

【问题讨论】:

    标签: glassfish amazon-ec2 ejb load-balancing


    【解决方案1】:

    Amazon 在负载均衡器上提供“session stickiness”支持。这意味着,假设用户启用了 cookie,他们会在会话的整个生命周期内被发送到同一个 EC2 实例。

    【讨论】:

    • 感谢您的回复。我认为这肯定会起作用,但是它需要修改我们的应用程序(这是针对 iOS 本机应用程序的)。我们将对此进行调查。
    【解决方案2】:

    在您实施 2 级缓存之前,您的实例不会共享缓存。

    以下是 2 级缓存解决方案的几个链接。 (开源)http://www.terracotta.org/ehcache/ (大量现金)http://www.oracle.com/technetwork/middleware/coherence/overview/index.html

    【讨论】:

    • 感谢您的回答 - 这是我们在扩大规模时必须考虑的问题。目前我们已禁用应用服务器上的缓存。
    猜你喜欢
    • 2018-03-26
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2014-11-02
    • 1970-01-01
    • 2018-11-28
    • 2022-11-24
    相关资源
    最近更新 更多