Redis Data Loss - PullRequest
       7

Redis Data Loss

0 голосов
/ 01 марта 2012

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

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

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

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 и много свободной памяти (~ 20 ГБ).

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

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

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

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

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

0 голосов
/ 01 марта 2012

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

Редактировать: Это также может помочь. Точность команды redis dbsize

...