Кэширование в Google App Engine / облачный хостинг - PullRequest
0 голосов
/ 09 декабря 2010

Мне интересно, как работает кэширование в Google App Engine или любом облачном приложении.Поскольку нет гарантии, что запросы отправляются на один и тот же сервер, означает ли это, что если данные будут кэшироваться при первом запросе на сервере A, то при втором запросе, который обрабатывается сервером B, он не сможет получить доступ к кешу?

Если это так (кеш только локальный для сервера), не будет ли маловероятным (в зависимости от количества пользователей), что запрос использует кеш?например.Google, вероятно, имеет тысячи серверов

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

С App Engine вы кешируете, используя memcached. Это означает, что сервер кэша будет хранить данные в памяти (а не на каждом сервере приложений). Все серверы приложений (для данного приложения) используют один и тот же сервер кэша (в концептуальном плане это может быть разделение или репликация, происходящая изнутри).

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

В дополнение к этим проблемам производительности / эффективности кэширование в памяти на сервере приложений может привести к проблемам согласованности (каждое обновление показывает разные данные, когда кэши не синхронизированы).

1 голос
/ 21 февраля 2011

Зависит от типа кэширования, которого вы хотите достичь.

Кэширование на самом сервере приложений может быть интересным, если у вас сложная структура объектов в памяти, для восстановления которой требуются данные, загруженные из базы данных. В этом конкретном случае вы можете кэшировать результат вычислений. Если структура большая, будет быстрее использовать локальный кеш, чем общий memcache.

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

Одна большая проблема, связанная с использованием глобального кэша памяти, - это обеспечение правильной синхронизации при его «повторном заполнении», когда значение еще не присутствует или было сброшено. Если у вас есть несколько серверов, выполняющих проверку в одно и то же время и пополняющих значение в кеше, вы можете в конечном итоге иметь несколько отдельных серверов, выполняющих пополнение одновременно. Если операция является то же самое, это не проблема; если нет, то это потенциальная и очень сложная ошибка.

...