'C' в CAP относится к линеаризуемости, которая является очень сильной формой согласованности, которая вам не нужна большую часть времени.
Линеаризуемость - это гарантия свежести, из-за которой создается впечатление, что существует одна копия данных. Как только вы внесете изменения в данные, все последующие чтения вернут измененные данные. Такой уровень последовательности дорог и плохо масштабируется. Тем не менее, в определенных сценариях нам нужна линеаризуемость, а именно
- Лидер выборов
- Разрешение конечным пользователям создавать свой уникальный идентификатор пользователя
- Распределенная блокировка и т. Д.
Когда у вас есть эти сценарии использования, вы будете использовать что-то вроде ZooKeeper и т. Д. И т. Д. Cassandra также имеет транзакцию с облегченным весом (LWT), которая использует расширение классического алгоритма Паксоса для реализации линеаризуемости. Эта функция может быть использована для тех редких случаев, когда вы должны иметь возможность линеаризации и сериализации, но это дорого. И в подавляющем большинстве случаев вам достаточно немного слабой согласованности, чтобы улучшить масштабируемость и производительность. Вы немного торгуете согласованностью с масштабируемостью и производительностью.
Некоторые веб-сайты электронной коммерции отправляют клиентам письма с извинениями за невозможность выполнить их заказы. Это связано с тем, что последняя копия продукта была продана нескольким покупателям из-за отсутствия и линеаризации. Они предпочитают иметь дело с этим из-за невозможности масштабирования с клиентской базой и неспособности отвечать на их запросы в рамках строгих соглашений об уровне обслуживания.
Кассандра, как говорят, имеет настраиваемую последовательность. Вы можете записывать клики пользователей или действия для анализа. Вы в порядке, если некоторые данные будут потеряны, но вы не можете пойти на компромисс с производительностью. Вы, вероятно, использовали бы уровень согласованности записи ЛЮБОЙ с включенными подсказками (небрежный кворум).
Если вы хотите немного большей согласованности, вы должны использовать уровень согласованности QUORUM для чтения и записи вместе с подсказками и восстановлением чтения. В подавляющем большинстве случаев все узлы обновляются мгновенно. Даже если один или два узла выйдут из строя, у большинства узлов будут данные, и неисправные узлы будут восстановлены, когда они вернутся, используя подсказки, восстановление чтения, восстановление энтропии.
Cassandra особенно полезна в тех случаях, когда у вас не будет много одновременных обновлений для одних и тех же данных. Причина в том, что, в отличие от динамо-архитектуры, она не использует векторные часы для разрешения конфликтов между репликами. Вместо этого он использует Last Write Wins (LWW) на основе метки времени. Если временные метки совпадают, используется лексикографический порядок. Поскольку время на узлах не может быть точным даже при наличии NTPD, существует вероятность потери данных, хотя Кассандра предприняла некоторые шаги, чтобы этого избежать - например, временная метка на стороне клиента вместо временной метки на стороне сервера.