Как реализовать 50M memcache пары ключ-значение с 4 M QPS?

Бизнес-сценарий требует:

50M пар ключ-значение, 2K каждая, всего 100G памяти.

Около 40% значения ключа изменится в секунду.

Java-приложению нужно Get() один раз и set() один раз для каждой измененной пары, это будет 50M*40%*2=4M qps (количество запросов в секунду) .

Мы протестировали memcached - который показывает очень ограниченный QPS.
Наш сравнительный анализ очень похож на результаты, представленные здесь http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html

10000 вокруг qps - это ограничение одного сервера memcached.

Это означает, что нам нужно 40 разделенных серверов memcached в нашем бизнес-сценарии, что кажется очень неэкономичным и нереальным.

По вашему опыту, точен ли сравнительный анализ с точки зрения проектной производительности memcached?

Любое предложение по настройке системы memcached (клиент или сервер)?

Или любая другая альтернативная система хранения памяти, которая способна удовлетворить требования более экономично?

Спасибо заранее!

1 ответ

Решение

Если вы посмотрите на графики в тесте, о котором вы говорили, вам нужно понять, что во многих из этих случаев пределом была сеть, а не memcached. Например, если у вас будет 2 тыс. Значений для всех ваших предметов, тогда ваша максимальная пропускная способность в сети GigE составляет около 65 тыс. Операций в секунду. (1024*1024*128/2048=65536). Memcached может выполнять намного больше операций в секунду, чем этот. Я лично ударил 200K операций в секунду с (я думаю) значениями 512b, и я слышал о других, получающих намного более высокую пропускную способность, чем я. Это все сильно зависит от сети, хотя.

Кроме того, memcached едва ли что-то делает со скоростью 10 тыс. Операций в секунду. Я предполагаю, что вы не используете преимущества параллелизма в своих тестах.

Другие вопросы по тегам