Назад | Перейти на главную страницу

Как распределенный memcached должен повысить производительность, если он выполняет сетевые вызовы?

http://memcached.org/about

Приветствую всех, мне нравится memcached, но пока что я использовал его только в настройках одной машины в качестве локального кеша. Я много читал о распределенной природе memcached и о том, как клиенты определяют, на какие из серверов memcached писать и читать с каких. Насколько я понимаю, выбирая детерминированный алгоритм хеширования, мы можем гарантировать, что данные всегда записываются и читаются с правильного сервера, независимо от того, откуда пришел запрос.

Итак, мой вопрос: рассмотрим следующую ситуацию:

Сервер A в Нью-Йорке, сервер B в Лос-Анджелесе. Оба являются зеркалами друг друга. Оба работают с базами данных mysql с репликацией. Это не имеет значения в случае только чтения, но допустим, что A - ведущий, а B - ведомый. Оба работают с memcached, и их клиенты имеют список серверов memcached (в данном случае серверы A и B).

Определенная часть данных, скажем, тело сообщения в блоге, считывается из базы данных на сервере A и, следовательно, сохраняется в memcached A. Другой пользователь из другой части страны обращается к серверу B и запрашивает ту же запись в блоге. Клиент memcached сервера B проверяет и видит, действительно ли эти данные были кэшированы, поэтому он достигает ЧЕРЕЗ СЕТЬ, чтобы получить эти данные из memcached сервера A.

Во-первых, правильно ли я понимаю? Пожалуйста, укажите на любые ошибки или неверные предположения, которые я сделал :).

Итак, мой вопрос: как это должно улучшить производительность? Кажется, что лучшим планом в этом случае было бы просто иметь сервер A и сервер B, оба запускали свои собственные отдельные экземпляры memcached в качестве локального кеша (верхний рисунок в http://memcached.org/about), но это противоречит самой идее распределенного дизайна. Так в чем же преимущество его распространения? Сетевая операция от сервера B к серверу A намного медленнее, чем чтение сервером B из собственной локальной базы данных.

Пожалуйста, помогите мне понять. Я чувствую, что мне здесь принципиально не хватает чего-то в том, как работает memcached.

Спасибо! K

Краткий ответ на ваш вопрос: это не так.

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

В случае с memcached, общение через Интернет с задержками, может быть, 60-100 мс или более, действительно ничего не получается. Скорее всего, ваша система сможет искать / вычислять правильные ответы намного быстрее, чем находить правильный ответ в кеш-памяти на полпути через Интернет.

Вам нужна гигабитная (или более быстрая) сеть между узлами memcached, чтобы получить какие-либо преимущества в производительности. Ваша установка рассчитана на отказоустойчивость и производительность в зависимости от местоположения. Если бы ваши серверы A и B действительно были A1, A2 и B1, вам может подойти Memcached B2.