2012-03-01 4 views
0

Мы используем Node.JS в сочетании с Redis, и у нас есть проблема с потерей данных. У нас есть система сбора статистики, поэтому мы должны собирать каждый запрос на наш сервер. С высокими одновременными запросами (avg 1000/sec) у нас есть проблемы с потерей данных в Redis.Redis Data Loss

Мы зарегистрировали каждый запрос в Node.JS & Redis, проблема в том, что Node.JS показывает то же количество запросов, которые были отправлены, Redis Monitor отлаживает ту же сумму, но Redis DBSIZE показывает нам неправильное значение. Это всегда ~ 40% -50% меньше, чем ожидалось.

Наша конфигурация Sever является:

 
Intel® Core™ i7-920 
24 GB DDR3 RAM 
From Hetzner 

Мы бежим Debian Squeeze, вот наш Sysctl:

net.ipv4.conf.all.rp_filter=1 
net.ipv4.icmp_echo_ignore_broadcasts=1 
net.core.somaxconn = 1280 
fs.file-max = 50000 
vm.overcommit_memory=1 

У нас есть "средняя нагрузка" 0,04, и много свободной памяти (~ 20gb).

Любая помощь по этому вопросу будет высоко оценена.

ответ

2

Первым шагом будет обзор конфигурации Redis относительно управления памятью. В зависимости от значений параметров maxmemory и maxmemory, Redis может вытеснять объекты из памяти. Вы можете проверить, что запись maxmemory закомментирована, а политика maxmemory не установлена ​​на все клавиши - *

Затем необходимо также проверить код Node.js. Node.js, будучи асинхронным, может переместить большое количество элементов в Redis перед обработкой соответствующих пакетов ack из Redis. Код должен быть разработан для ограничения количества элементов в очереди команд клиента в какой-то момент. Вы можете подсчитать и сравнить количество отправленных команд с количеством ответов (для расчета путем определения обратных вызовов), чтобы проверить этот момент.

Наконец, вы также можете использовать команду Redis, чтобы проверить, действительно ли весь трафик, действительно отправленный на сервер Redis, хранится. Это может помочь оценить, есть ли проблема на стороне сервера или на стороне клиента.

+0

Я думаю, что я понял, что Node.JS действительно кажется проблемой, а точнее, драйвером Node.JS redis, node_redis. Мы действительно перешли в память mysql, это дает неплохие результаты. – Screatch

0

Вы уверены, что DBSIZE должен вернуть ВСЕ Ключи? Вы пробовали то же самое с командой KEYS?

Редактировать: Это может также помочь. Accuracy of redis dbsize command

+0

Команда KEYS возвращает тот же номер, что и DBSIZE, неправильный номер. – Screatch

Смежные вопросы