отказоустойчивые счетчики

Я хотел бы хранить набор счетчиков в отказоустойчивом хранилище данных со следующими свойствами:

  • может общаться с ним из erlang
  • производство готово
  • отказоустойчивость «из коробки» (многосерверность и отсутствие махинаций «главный-подчиненный»)
  • количество счетчиков динамическое (допустим от 1к до 100к)

Я готов обменять C на AP. Вы можете предположить, что счетчики только увеличиваются. Вещи, которые я уже рассмотрел:

Рак

Я предполагаю, что можно попробовать включить allow_mult и агрегировать братьев и сестер во время чтения. Это, вероятно, отлично работает для наборов, но я не уверен, что это работает для счетчиков.

риак_заб

На момент написания этой статьи он не готов к производству.


person David Weldon    schedule 01.07.2011    source источник


Ответы (2)


В ветке состояния есть код счетчиков, который я прототипировал: https://github.com/mochi/statebox/tree/counters

Это можно довольно легко использовать в сочетании с Riak.

Это должно работать, но я еще не написал приложение с ним, поэтому оно еще не на мастере. Не соответствует вашей цели, готовой к производству, но ничего не подойдет (кроме, может быть, Mnesia, но с этим есть другие проблемы).

person YOUR ARGUMENT IS VALID    schedule 01.07.2011
comment
Фантастика. Недавно я начал смотреть на statebox, но не заметил ветки counters. К счастью, завтра мне это не понадобится, так что я просто подожду, пока его повысят до мастера. Спасибо за создание этого проекта - он выглядит действительно полезным. - person David Weldon; 02.07.2011
comment
Просто отметим, что ветка counters наконец-то попала на master. В настоящее время мы не используем его в производстве, но он имеет 100% тестовое покрытие и некоторые документы. - person YOUR ARGUMENT IS VALID; 10.11.2011

Используйте ZooKeeper. Вам придется использовать порт для запуска клиента zk c в erlang, но он удовлетворяет остальным вашим требованиям. Простое решение — использовать узлы Sequential в zk, но есть и другие возможные способы.

person manku    schedule 01.07.2011
comment
Не понимаю причину понижения, но если бы кто-то мог уточнить, я был бы рад отредактировать ответ. - person manku; 01.07.2011
comment
Я тоже не уверен. Мое ограниченное понимание зоопарка заключается в том, что это CP, но не A из-за строгого порядка. Это делает его отличным для управления состоянием, которое не меняется часто, но потенциально ужасно для счетчиков. - person David Weldon; 02.07.2011
comment
Не могли бы вы рассказать о вариантах использования счетчиков, которые у вас есть? Zookeeper предоставляет A — он либо успешно ответит, либо откажется отвечать. Он работает в модели ансамбля, и пока работает n/2+1 узлов, ансамбль будет продолжать работать. - person manku; 02.07.2011
comment
Я сформулировал вопрос как общую проблему, с которой сталкиваюсь регулярно: как мне сохранить критически важные статистические данные, такие как счетчики, таким образом, чтобы они допускали сбои машины, но чтобы какая-либо статистика не обязательно была точным ответом в этот конкретный момент ( АР, но не С). Например, вы можете использовать это при показе рекламы, чтобы отрегулировать темп рекламы или отследить бюджет. При показе объявления вам могут не понадобиться точные цифры, но они нужны вам СЕЙЧАС (а не после снятия блокировки или выполнения соглашения). ZK также нуждается в высоком соотношении R/W, которое я не всегда могу гарантировать. - person David Weldon; 02.07.2011
comment
Справедливо. Если у вас нет высокого соотношения R/W, zk может не подойти (хотя я бы сначала удостоверился, что он подходит для конкретного случая использования). ZK дает не точный ответ (если, конечно, n / 2 + 1). Вы можете получить данные, которые еще не были переданы узлу, к которому вы подключены, но вы получите ответ. Не хочу быть евангелистом в отношении zk :), просто убедитесь, что я понимаю. - person manku; 03.07.2011