По моему опыту, лучше всего написать промежуточный слой между приложением и внутренним хранилищем. Таким образом, вы можете создать пару экземпляров memcached и, например, совместно использовать (в основном то же хранилище значений ключей, но на основе дисков). Самый простой способ сделать это - всегда читать из memcached и восстанавливать после сбоя в sharedanced и всегда записывать в sharedanced и memcached.
Вы можете масштабировать записи путем разделения между несколькими экземплярами общего доступа.
Вы можете масштабировать чтения N-кратно, используя решение, такое как repcached (replicated memcached).
Если это не тривиально для вас, вы все равно можете использовать sharedanced в качестве базовой замены memcached. Это быстро, большинство вызовов файловой системы в конечном итоге кэшируются - использование memcached в сочетании с совместным использованием позволяет избежать чтения из общего доступа, пока не истечет срок действия некоторых данных в memcache. Перезапуск серверов memcached приведет к тому, что все клиенты будут читать из экземпляра общего доступа по крайней мере один раз - на самом деле это не проблема, если только вы не обладаете чрезвычайно высоким параллелизмом для одних и тех же ключей и клиенты конкурируют за один и тот же ключ.
Существуют определенные проблемы, если вы имеете дело со средой с высокой интенсивностью трафика, одна из них - выбор файловой системы (reiserfs работает в 5-10 раз лучше, чем ext3 из-за некоторого внутреннего кэширования дерева fs), она не поддерживает udp (Keepalive TCP - это непроизводительные затраты, если вы используете только совместное использование, memcached имеет udp благодаря команде Facebook), и масштабирование обычно выполняется для вашего приложения (путем разделения данных между несколькими экземплярами серверов совместного использования).
Если вы можете использовать эти факторы, то это может быть хорошим решением для вас. В нашей текущей настройке один общий сервер / сервер memcache может масштабировать до 10 миллионов просмотров страниц в день, но это зависит от приложения. Мы не используем кэширование для всего (например, для Facebook), поэтому результаты могут отличаться в зависимости от вашей заявки.
И вот, спустя 2 года, Membase - отличный продукт для этого. Или Redis, если вам нужны дополнительные функции, такие как хеши, списки и т. Д.