сколько звонков в HINCRBY разумно? - PullRequest
3 голосов
/ 29 июля 2011

Я пытаюсь заново изобрести колесо и сохранить некоторые статистические данные в Redis.

Я собираюсь активно агрегировать и увеличивать все связанные счетчики сразу после каждого нового события (это может происходить несколько раз в секунду).

Потребуется набрать HINCRBY, например, 5-50 раз за событие, и я сначала стремлюсь к 5-100 событиям в секунду.

Это слишком много для Редиса? Если это так, должен ли я стремиться к некоторым более низким пределам (10 раз за событие? Только один?)? Если это не так, может ли он масштабироваться по любому из этих параметров (меня больше интересует масштабирование до 1000 событий? 10000?)?

Мне, очевидно, придется собирать мусор. Я планирую сделать это, вызывая EXPIRE для каждого хэша, необходимого для каждого события (не более 2-5 раз, поскольку некоторые счетчики находятся в одном хеше). Это нормально?

1 Ответ

4 голосов
/ 29 июля 2011

Сходи с ума. Если оборудование работает, Redis сможет справиться с нагрузкой. Очевидно, вам следует создать прототип и попробовать его как можно скорее, но это определенно то, что Redis должен уметь обрабатывать.

Я предлагаю вам уже подумать о масштабировании. Решить проблему масштабирования гораздо проще, чем ждать, когда она станет проблемой. У Redis (пока) нет кластерного решения, и вы ограничены оперативной памятью (и одним процессором), поэтому в конечном итоге вам потребуется какой-то способ масштабирования на большее количество серверов.

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

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

...