Google App Engine и данные области приложения - PullRequest
1 голос
/ 25 января 2012

Я занимаюсь разработкой веб-приложения на основе Spring, которое развернуто в Google App Engine.У меня есть менеджер, который хранит данные в области приложения.Я использую пружинный компонент (singleton), который содержит карту и просто выполняет получение и удаление с карты, однако GAE - это распределенная среда, и у этого дизайна есть проблема, поскольку у каждого экземпляра приложения будет свой менеджер и запрос не гарантируется.быть сделано в тот же экземпляр приложения.Поэтому я осмотрелся и нашел 2 возможных решения:

  1. использовать хранилище данных
  2. использовать memcache

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

В общем случае приложение не должно ожидать, что кэшированное значение всегда будет доступно.

и янужна гарантия, что когда я прошу моего менеджера получить значение, оно вернет его.

есть ли другое решение?я что-то пропустил?

1 Ответ

2 голосов
/ 25 января 2012

Распространенным решением является сохранение значений в memcache, поддерживаемом хранилищем данных.

Сначала извлеките значение области приложения из memcache, и, если memcache возвращает нулевой результат (событие пропуска кэша), извлеките значение из хранилища данных и поместите извлеченное значение в memcache.

Таким образом, следующая выборка в memcache вернет данные вашей области приложения, уменьшая необходимость (относительно) дорогостоящего чтения в хранилище данных.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...