Glassfish Amazon AWS EC2实例和ELB缓存问题

问题描述:

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

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

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

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

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

谢谢。

亚马逊在负载均衡器处提供“session stickiness”支持。这意味着,假设用户启用了Cookie,它们将在会话的整个生命周期内发送到相同的EC2实例。

+0

感谢您的回复。这肯定会工作,我会想,但它需要修改我们的应用程序(这是一个iOS本机应用程序)。这是我们将考虑的事情。 – aSadhankar 2011-04-29 20:59:04

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

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

+0

谢谢你的回答 - 这是我们在扩大规模时必须考虑的事情。现在我们已经禁用了应用程序服务器上的缓存。 – aSadhankar 2011-05-03 04:03:12