2

У меня есть Redis Cluster из 3 основных узлов версии 3.0.3, размещенных на 3 экземплярах EC2 t2.medium. Когда я сижу на 4-й экземпляр для измерения SET, GET производительности с помощью redis-benchmark, яRedis Cluster mode медленнее, чем автономный

$ redis-benchmark -h redis-com-01 -p 6379 -t set,get -n 1000000 
====== SET ====== 
... 
33550.29 requests per second 

====== GET ====== 
... 
32353.04 requests per second 

$ redis-benchmark -h redis-com-02 -p 6379 -t set,get -n 1000000 
====== SET ====== 
... 
36329.29 requests per second 

====== GET ====== 
... 
37199.61 requests per second 

$ redis-benchmark -h redis-com-03 -p 6379 -t set,get -n 1000000 
====== SET ====== 
... 
32338.39 requests per second 

====== GET ====== 
... 
32169.86 requests per second 

Но, когда я использую эталонный инструмент simple.py от https://github.com/Grokzen/redis-py-cluster для измерения SET, GET производительность всего кластера, я «м вполне удивляют результат

$ python simple.py --host redis-com-03 --port 6379 --timeit 
10k SET/GET operations took: 4.3375210762 seconds... 2305.46430192 operations per second 
20k SET/GET operations took: 8.5704600811 seconds... 2333.59700772 operations per second 
40k SET/GET operations took: 17.3284561634 seconds... 2308.34181781 operations per second 

Я уже следовал контрольный http://redis.io/topics/latency. Все узлы настроены с помощью AOF, fsync каждую секунду. Разница в производительности записи необъяснима для меня. Может ли кто-нибудь дать мне понять, почему и если возможно, как это исправить? Любая помощь приветствуется.

ответ

3

AFAIK simple.py просто занят, не использует несколько потоков для насыщения сервера. Реальность такова, что нам нужен кластер, который знает redis-benchmark, и мне нужно сделать это как можно скорее ... На данный момент очень сложно оценить общую производительность Redis Cluster, но, хотя и не идентичны, производительность каждого узла очень похожа к одному из автономных узлов.

Обратите внимание, что создание redis-benchmark резьбы и возможность тестирования нескольких узлов одновременно является всего лишь первым шагом. Чтобы протестировать большой ориентир, нужно также запустить параллельный тест в нескольких разных узлах и суммировать результаты.

+1

Благодаря вашему совету, я просто попытался подчеркнуть этот кластер, используя 64 процесса, а общая производительность составляет ~ 42k ops/s. Когда я добавил еще 1 узел для генерации нагрузки (всегда используя 64 процесса/узел), общая производительность составляет ~ 75 тыс. Операций/с. –

+0

Это хорошо, вы все еще не видите полную производительность, поскольку 64 процесса на Python записывают значительное количество CPU для выполнения вместо того, чтобы создавать нагрузку. Чем раньше я дам «redis-benchmark», который знает о кластере, тем лучше. Благодарю. – antirez

2

Этот сценарий, который я создал, не является чем-то, что можно сравнить с redis-benchmark. Основное использование этого сценария - сделать простую проверку производительности кода на стороне клиента, чтобы увидеть, где он использует больше всего времени и где медленные части кода.

Если я правильно помню, основным замедлением в коде python является вычисление crc16, которое выполняется для каждого ключа. И я думаю, что вы должны увидеть падение производительности на 50% по сравнению с автономным узлом redis из-за всей дополнительной работы, которая должна быть выполнена на стороне клиента.

+0

Спасибо за внимание! –

+0

//, Хороший совет. Похоже, хороший опытный сканер Python выиграет от чего-то вроде https://pypi.python.org/pypi/crcmod, тогда, я думаю. –