Как реализовать Memcache в моем приложении - PullRequest
2 голосов
/ 03 августа 2011

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

В настоящее время у меня есть 10 веб-серверов, на которых выполняется одно и то же приложение, и балансировщик нагрузки, чтобы решить, на какой веб-сервер будет отправлен запрос. На каждом веб-сервере я поддерживаю локальный кеш, то есть есть некоторый класс XYZ, который управляет таблицей MySQL xyz, и этот класс имеет метод инициализации который прогреет локальный кеш.

Теперь предположим, что веб-серверами являются X, Y, Z. Балансировщик нагрузки отправляет запрос в X, и этот запрос добавляет некоторые значения в базу данных и обновляет кэш. Снова тот же запрос был отправлен балансировщиком нагрузки на Y. Но поскольку сервер Y не имеет значения в кэше, он попадает в базу данных.

Итак, учитывая этот сценарий, как мне реализовать memcache в моем приложении, чтобы я мог минимизировать попадания в БД. Должен ли я иметь отдельный сервер memcache, и все остальные 10 веб-серверов будут получать кэшированные данные с этого сервера memcacher?

1 Ответ

3 голосов
/ 03 августа 2011

Один из обходных путей (хотя и не идеальный) - реализовать липкий сеанс на балансировщике нагрузки, чтобы запрос от одного пользователя всегда передавался на один и тот же сервер (на время его сеанса).Это не очень помогает, если сервер умирает или вам нужны кэшированные данные, совместно используемые между сеансами (но это легко и быстро сделать, если ваш балансировщик нагрузки поддерживает это).

В противном случае лучшим решением будет использовать что-то вродеmemcached (или мембрана, если вы чувствуете себя авантюрным).Memcached может быть развернут на каждом или на ваших серверах, или на отдельных серверах (используйте несколько серверов, чтобы избежать проблемы, связанной с гибелью одного сервера и захватом кеша).Затем на каждом из ваших серверов приложений укажите в вашем клиенте memcached сведения о соединении для всех серверов memcached (разместите их в одинаковом порядке на каждом сервере и используйте согласованный алгоритм хеширования в опциях клиента memcached, чтобы определить, на каком сервере (ах)ключ кеша уйдет).Короче говоря, теперь у вас есть работающая настройка memcached (при условии, что вы разумно ее используете внутри своего приложения)

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

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