Существует ли разделяемая память App Engine или эквивалентное решение?

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам