Как реализовать 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 тыс. Операций в секунду. Я предполагаю, что вы не используете преимущества параллелизма в своих тестах.