Я новичок в Google App Engine, и я провел последние несколько дней, создав приложение, используя GAE Memcache для хранения данных. Основываясь на моих первоначальных выводах, похоже, что GAE Memcache НЕ глобальный?
Позвольте мне объяснить далее. Я знаю, что разные запросы к GAE потенциально могут обслуживаться разными экземплярами (на самом деле это происходит довольно часто). Именно по этой причине я использую Memcache для хранения некоторых общих данных, в отличие от статической карты. Я подумал (возможно, неправильно), что это было целью использования распределенного кеша, чтобы доступ к данным мог получить любой node.
Другая определенная возможность заключается в том, что я делаю что-то неправильно. Я пробовал как JCache, так и низкоуровневый API Memcache (я пишу Java, а не Python). Это то, что я делаю, чтобы извлечь кеш:
MemcacheService cache = MemcacheServiceFactory.getMemcacheService();
После развертывания это то, что я просматриваю (через журналы приложений):
- Исходный запрос обслуживается конкретным node, а данные хранятся в кэше, полученном выше.
- Новые несколько запросов извлекают этот же кеш и данные там.
- Когда новый запрос node генерируется для обслуживания запроса (из журналов, которые я знаю, когда это происходит, потому что GAE регистрирует тот факт, что "этот запрос вызвал новый процесс для вашего приложения.." ), кеш извлекается и является ПУСТОЙ!
Теперь я также знаю, что нет гарантии того, сколько данных будет в Memcache, но из моих выводов кажется, что данные ушли в тот момент, когда экземпляр diff пытается получить доступ к кешу. Кажется, это противоречит всей концепции распределенного глобального кеша?
Надеюсь, кто-то может прояснить, как это должно быть СЛЕДУЕТ. Если Memcache НЕ должен быть глобальным, и каждый экземпляр сервера имеет свою собственную копию, то почему даже использовать Memcache? Я мог бы просто использовать статический HashMap (который я изначально сделал, пока не понял, что он не будет глобальным из-за того, что разные экземпляры обслуживают мои запросы).
Помощь?