Существует ли разделяемая память App Engine или эквивалентное решение?
Я создаю приложение GAE, для работы которого требуется криптографический ключ. Я хотел бы избежать хранения ключа в коде или в постоянном хранилище данных, и вместо этого загружать ключ каждый раз, когда я запускаю свое приложение, чтобы он оставался в памяти только на время жизни приложения (с момента загрузки ключа до экземпляры не запущены.)
Я понимаю, что это возможно сделать с резидентным бэкэндом, но это кажется слишком дорогим (самый дешевый бэкэнд в настоящее время составляет 58$/ месяц) только для того, чтобы хранить одно значение в памяти и обслуживать его для других экземпляров по запросу.
Обратите внимание, что я не ищу общего надежного решения с разделяемой памятью, только одно значение, которое в основном записывается один раз и читается много раз. Благодарю.
2 ответа
Я не думаю, что это может работать так, как вы надеетесь. Источники данных в GAE:
- Файлы, развернутые с вашим приложением (война или что-то еще).
- Память для каждого экземпляра (front-end или back-end).
- Memcache.
- Хранилище данных (или SQL сейчас, я полагаю).
- Blobstore.
- Информация, полученная с помощью http-запросов (т.е. хранится где-то еще).
1 и 4 отсутствуют, согласно вашему вопросу. 2 не работает сам по себе, потому что запуск и остановка экземпляров находятся вне вашего контроля (в противном случае они не масштабируются), а постоянные экземпляры стоят дорого. 3 не работает само по себе, потому что Memcache может быть очищен в любое время. 5 на самом деле ничем не отличается от хранилища данных, поскольку оно постоянно хранится на серверах Google. Возможно, вы могли бы попробовать 6 (сохранить его где-нибудь еще) и извлечь его в память каждого экземпляра во время запуска экземпляра. Но я подозреваю, что это не лучше с точки зрения безопасности (и, в этом отношении, не совпадает с тем, что вы сказали, что хотели).
Кажется, что решение Memcache и локальной памяти может работать, если вы:
- сделайте так, чтобы экземпляры вашего сервера очистили ключ memcached при выходе и
- существующие экземпляры сервера регулярно пишут / обновляют ключ (например, при каждом запросе).
Таким образом, ключ, вероятно, будет там до тех пор, пока экземпляр находится в рабочем состоянии, и, скорее всего, его там не будет при запуске в холодном состоянии.
Тот же механизм может также использоваться для распространения нового ключа и / или циклического экземпляра сервера в случае изменения ключа.