我会试着清楚地描述我的问题。 假设我在Amazon EC2上运行了一个Java REST Web服务。 HTTP请求通过字符串“testString”到达我的一个服务。我将它保存在一些通用类的内存中,假设我将它添加到字符串列表('stringsList')中。
我的问题是:如果我有多个我的网络服务实例,这个字符串是否会在每个实例上都可用? 如果用户将生成一个调用“stringsList.getString('testString')”的HTTP请求, 它会得到字符串肯定吗?或者它可以错过它,因为它可用,但在一个 我的网络服务的不同实例?
我希望能够将我的Web服务作为可扩展的Web服务运行,并且具有多个负载平衡功能 实例,但仍然能够保存一些特定的HTTP请求信息(也许这个 正是为什么REST应该是无状态的,因此如果我想这样做,我的设计是错误的 ? )。 我瞄准的网络服务是这样的:
Scalable web service (from Heroku)
我会尝试提供细节,虽然我不太确定:
在Amazon EC2上执行此操作可能不是一个好主意,但在不同的服务上?如果是这样,哪一个?
谢谢,
丽然
答案 0 :(得分:1)
Memcache似乎是这个问题的自然选择。但它不仅适用于Google App Engine。如果您愿意,也可以在EC2上运行自己的Memcache服务器。
答案 1 :(得分:0)
亚马逊上没有“共享内存”概念,不,该字符串不会在所有实例上都可用。这是简单的数据库,但你说你不想使用数据库。
总是可以将用户引导到他们最初被指向使用负载均衡器上的cookie的同一个实例,但听起来这并不能解决您的问题,我猜这个字符串不只是为了用户设定它。
Google App Engine可能更适合。它支持您使用的servlet实例中的Memcache,并且所有servlet实例都可以访问相同的内存缓存。