Существует ли разделяемая память App Engine или эквивалентное решение? - PullRequest
3 голосов
/ 30 января 2012

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

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

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

Ответы [ 2 ]

4 голосов
/ 31 января 2012

Я не думаю, что это может работать так, как вы надеетесь.Источники данных в GAE:

  1. Файлы, развернутые вместе с вашим приложением (война или что-то еще).
  2. Память на экземпляр (front-end или back-end).
  3. Memcache.
  4. Хранилище данных (или, я полагаю, сейчас SQL).
  5. Blobstore.
  6. Информация, полученная с помощью http-запросов (т.е. хранится где-то еще).

1 и 4, по вашему вопросу.2 не работает сам по себе, потому что запуск и остановка экземпляров находятся вне вашего контроля (в противном случае они не масштабируются), а постоянные экземпляры стоят дорого.3 не работает само по себе, потому что Memcache может быть очищен в любое время.5 действительно ничем не отличается от хранилища данных, поскольку оно постоянно хранится на серверах Google.Возможно, вы могли бы попробовать 6 (сохранить его где-нибудь еще) и извлечь его в память каждого экземпляра во время запуска экземпляра.Но я подозреваю, что это не лучше с точки зрения безопасности (и, в этом отношении, не совпадает с тем, что вы сказали, что хотели).

0 голосов
/ 31 января 2012

Похоже, что решение Memcache и локальной памяти может работать, если вы:

  1. заставили экземпляры сервера очистить ключ memcached при выходе и
  2. существующих экземпляров сервера записали / обновилиРегулярно используйте ключ (например, при каждом запросе).

Таким образом, ключ, вероятно, будет там до тех пор, пока экземпляр находится в рабочем состоянии, и, скорее всего, там не будет при запуске в холодном состоянии.* Тот же механизм может также использоваться для распространения нового ключа и / или циклического экземпляра сервера в случае изменения ключа.

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