Кассандра, счетчики и конфликты записи
Мы исследуем использование Cassandra как способа хранения данных типа временных рядов, так что это может быть чем-то вроде вопроса нуба. Одним из вариантов использования является чтение данных из потока Kafka, поиск совпадений и увеличение счетчика (например, 5 клиентов щелкнули по ссылке альфа на странице бета, увеличение (бета, альфа) на 5). Тем не менее, мы ожидаем, что очень высокая степень параллелизма будет соответствовать нагрузке, поэтому может быть, что несколько потребителей читают из Kafka одновременно.
Мой вопрос: как бы Кассандра разрешала множественные одновременные записи на заданный счетчик из нескольких источников?
Насколько я понимаю, множественные записи в счетчик с разными временными метками будут добавлены к счетчику в полученном порядке временных меток. Однако, если бы была одновременная запись с точно такой же меткой времени, будет ли модель Кассандры LWW выбрасывать одно из этих приращений счетчика?
Если бы у нас был большой кластер (более 100 узлов), записи ALL или QUORUM могут оказаться недостаточно быстродействующими, чтобы не отставать от трафика сообщений. Кажется, что запись с THREE может привести к ситуации, когда процесс #1 записывает в узлы A, B и C, но процесс #2 может записывать в X, Y и Z. Будет ли LWT работать здесь или нет хорошо играть с противодействием?
1 ответ
Я бы попробовал проверить концепцию и сравнить ее, скорее всего, она будет работать нормально. Счетчики не супер исполнительские в Кассандре, хотя, особенно если будет много споров.
Счетчики не похожи на обычные записи с простым LWW, они используют paxos с некоторой пессимистической блокировкой и специализированными кэшами. Конкуренция за блокировку разделов замедлит его, а paxos - это дорогостоящий процесс многократного сетевого перехода с операциями чтения перед записью.
Используйте кворум, не пытайтесь сделать что-нибудь интересное с CL со счетчиками, особенно перед сравнительным тестированием, чтобы узнать, нужно ли это вам. Кластер из 100 узлов должен иметь возможность обрабатывать много, если вы не пытаетесь постоянно обновлять одни и те же разделы.