Веб-сервис для нескольких экземпляров с балансировкой нагрузки - сохранение данных запросов - PullRequest
1 голос
/ 01 мая 2011

Я постараюсь четко изложить свой вопрос.Предположим, я запустил веб-сервис Java REST на Amazon EC2.HTTP-запрос попадает в один из моих сервисов со строкой «testString».Я сохраняю его в памяти в каком-то общем классе, допустим, я добавляю его в список ('stringsList') строк.

Мой вопрос: если у меня несколько экземпляров моего веб-сервиса,будет ли эта строка доступна в каждом из этих экземпляров? Если пользователь выдаст HTTP-запрос, который вызывает "stringsList.getString ('testString')", он точно получит строку?Или он может пропустить его, потому что он доступен, но на другом экземпляре моего веб-сервиса?

Я хочу иметь возможность запускать свой веб-сервис как масштабируемый с балансировкой нагрузки и несколькими экземплярами, нопо-прежнему, чтобы иметь возможность сохранять некоторую конкретную информацию о HTTP-запросах (может быть, именно поэтому REST не должен иметь состояния, поэтому мой дизайн неправильный, если я хочу это сделать?).Веб-сервис, к которому я стремлюсь, выглядит примерно так:

Масштабируемый веб-сервис (от Heroku)

Я постараюсь сообщить подробности, хотя я не уверен:

  1. Если я запустил веб-сервис через SSH для своего экземпляра EC2, и есть только один такой, это не будет проблемой, верно?
  2. Если я сделаюто же самое, но во многих случаях и с помощью балансировки нагрузки Amazon Elastic?
  3. Если ответ на вопрос 2 заключается в том, что может быть промах, но я все еще хочу добиться этого, каков альтернативный способ?
  4. Может быть, не стоит делать это на Amazon EC2, но на другом сервисе?Если да, то какой?

    • Поместить его в базу данных - не то, что я хочу, я хочу сохранить его только на несколько часов в памяти для того, что мне нужно.

Спасибо,
Лиран

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Memcache кажется естественным выбором для этой проблемы. Однако он доступен не только в Google App Engine. Вы также можете запустить собственный сервер Memcache на EC2, если хотите.

0 голосов
/ 04 мая 2011

В Amazon нет концепции «разделяемой памяти», и нет, эта строка будет доступна не во всех случаях. Это простая база данных, но вы говорите, что не хотите использовать БД.

Можно всегда направлять пользователя к одному и тому же экземпляру, к которому он был впервые направлен при использовании файлов cookie на балансировщике нагрузки, но это не похоже на то, что это решает вашу проблему, я предполагаю, что строка предназначена не только для пользователя это устанавливает его.

Google App Engine может быть лучше. Он поддерживает Memcache для всех используемых вами экземпляров сервлета, и все экземпляры сервлета могут обращаться к одному и тому же Memcache.

...