«C» в CAP относится к линеаризуемости, которая является очень сильной формой постоянства, которая вам не нужна большую часть времени.
Линеаризуемость — это гарантия актуальности, из-за которой кажется, что существует единственная копия данных. Как только вы внесете изменения в данные, все последующие операции чтения будут возвращать измененные данные. Такой уровень согласованности стоит дорого и плохо масштабируется. Тем не менее, в некоторых сценариях нам нужна линеаризуемость, а именно.
- Выборы лидера
- Разрешение конечным пользователям создавать свой уникальный идентификатор пользователя
- Распределенная блокировка и т.д.
Когда у вас есть эти варианты использования, вы должны использовать что-то вроде ZooKeeper, etcd и т. д. У Cassandra также есть облегченная транзакция (LWT), которая использует расширение классического алгоритма Paxos для реализации линеаризуемости. Эту функцию можно использовать для тех редких случаев использования, когда необходима линеаризуемость и сериализуемость, но это дорого. И в подавляющем большинстве случаев вас вполне устроит немного более слабая согласованность, чтобы получить лучшую масштабируемость и производительность. Вы обмениваете небольшую согласованность на масштабируемость и производительность.
Некоторые веб-сайты электронной коммерции рассылают клиентам письма с извинениями за то, что они не могут выполнить их заказы. Это связано с тем, что последняя копия продукта была продана более чем одному покупателю из-за отсутствия и линеаризуемости. Они предпочитают иметь дело с этим, а не с неспособностью масштабироваться с клиентской базой и неспособностью отвечать на их запросы в рамках строгих соглашений об уровне обслуживания.
Говорят, что Кассандра обладает настраиваемой консистенцией. Вы можете записывать клики или действия пользователей для анализа. Вы в порядке, если некоторые данные будут потеряны, но вы не можете идти на компромисс с производительностью. Вероятно, вы бы использовали уровень согласованности записи ЛЮБОЙ с включенными подсказками (небрежный кворум).
Если вам нужно немного больше согласованности, вы должны использовать уровень согласованности QUORUM для чтения и записи вместе с подсказками и восстановлением чтения. В подавляющем большинстве случаев все узлы обновляются мгновенно. Даже если один или два узла выйдут из строя, большинство узлов будут иметь данные, а неисправные узлы будут восстановлены, когда они вернутся, используя подсказки, восстановление чтения, восстановление антиэнтропии.
Cassandra особенно полезна в случаях, когда у вас не будет много одновременных обновлений одних и тех же данных. Причина в том, что, в отличие от архитектуры динамо, она не использует векторные часы для разрешения конфликтов между репликами. Вместо этого он использует последние выигрыши при записи (LWW) на основе метки времени. Если временные метки совпадают, используется лексикографический порядок. Поскольку время на узлах не может быть точным даже при наличии NTPD, существует вероятность потери данных, хотя Cassandra предприняла некоторые шаги, чтобы избежать этого, например. временная метка на стороне клиента вместо временной метки на стороне сервера.
person
Saptarshi Basu
schedule
14.05.2019