1

我会尽量清楚地描述我的问题。假设我在 Amazon EC2 上运行 Java REST Web 服务。HTTP 请求通过字符串“testString”到达我的一项服务。我将它保存在某个通用类的内存中,假设我将它添加到字符串列表('stringsList')中。

我的问题是:如果我的 Web 服务有多个实例,那么每个实例都可以使用此字符串吗? 如果用户将产生一个调用“stringsList.getString('testString')”的 HTTP 请求,它肯定会得到字符串?或者它可能会错过它,因为它可用,但在我的 Web 服务的不同实例上?

我希望能够将我的 Web 服务作为具有负载平衡和多个实例的可扩展服务运行,但仍然能够保存一些特定的 HTTP 请求信息(也许这正是 REST 应该是无状态的原因,因此我的设计是如果我想这样做错了吗?)。我的目标是这样的网络服务:

可扩展的网络服务(来自 Heroku)

我会尽量提供细节,虽然我不太确定:

  1. 如果我通过 SSH 将 Web 服务运行到我的 EC2 实例,并且只有一个这样的实例,那不会有问题,对吧?
  2. 如果我做同样的事情,但对于许多实例,并通过 Amazon Elastic 负载平衡?
  3. 如果 2 的答案是可能会错过,但我仍然想实现这一点,那么替代方法是什么?
  4. 也许在 Amazon EC2 上这样做不是一个好主意,而是在不同的服务上?如果有,是哪一个?

    • 将它放入数据库不是我想要的,我只想将它保存在内存中几个小时以备不时之需。

谢谢,
立然

4

2 回答 2

1

Memcache 似乎是解决这个问题的自然选择。但是,它不仅在 Google App Engine 上可用。如果您愿意,也可以在 EC2 上运行您自己的 Memcache 服务器。

于 2011-05-04T20:23:18.270 回答
0

Amazon 上没有“共享内存”概念,不,该字符串并非在所有实例上都可用。这是简单的数据库,但你说你不想使用数据库。

可以始终将用户定向到他们最初被定向到在负载均衡器上使用 cookie 的同一实例,但听起来这并不能解决您的问题,我猜该字符串不仅适用于设置它的用户.

Google App Engine 可能更适合。它支持跨您使用的 servlet 实例的Memcache,并且所有 servlet 实例都可以访问同一个 memcache。

于 2011-05-03T20:49:06.507 回答