Как Cassandra с уровнем согласованности и фактором репликации обрабатывает теорему CAP? - PullRequest
1 голос
/ 22 марта 2020

Согласно определению CAP теорема , может быть только 2 условия, которым удовлетворяет любая распределенная система. Традиционно Cassandra - это система AP. Если мы используем уровень согласованности, такой как LOCAL_QUORUM, он также обеспечивает строгую согласованность.

Предполагая, что мы всегда должны поддерживать допуск раздела, если мы используем LOCAL_QUORUM и коэффициент репликации, мы можем обеспечить высокую согласованность и доступность. Это go против теоремы CAP или я что-то упустил?

PS: Для простоты рассмотрим, что у нас есть только один Центр обработки данных.

1 Ответ

3 голосов
/ 22 марта 2020

Нет, к сожалению, вы не можете обмануть теорему CAP с Кассандрой. Однако Cassandra позволяет настроить согласованность для ваших нужд.

LOCAL_QUORUM означает, что для чтения и записи клиент ожидает, пока большинство (например, два из трех) узлов подтвердят операцию, прежде чем вернуться. Если клиент использует LOCAL_QUORUM как для чтения, так и для записи, то приоритет отдается согласованности, а не доступности. Это не означает, что все узлы должны быть постоянно включены, но большинство должно быть. В этом случае, если кластер разбит на разделы, клиенты, которые видят меньшинство, не смогут продолжить работу.

Клиент также может установить приоритет согласованности, записав на уровне согласованности ALL и прочитав на ONE, или наоборот - но в этом сценарии все узлы должны быть в рабочем состоянии.

Если клиент использует комбинации уровней согласованности, где чтение и запись не гарантируют перекрытие, например, ONE как для чтения, так и для записи, он приоритетирует доступность. В случае многораздельного кластера клиент может продолжать чтение и запись до тех пор, пока он может обмениваться данными с любым узлом.

Клиенты могут также смешивать уровни согласованности, которые не гарантируют согласованность, но менее подвержены ошибкам согласованности, таким как используя LOCAL_QUORUM для записи и ONE для чтения. Эта комбинация может быть полезна, когда вы хотите убедиться, что записи не потеряны, но это не важно, что чтения немедленно обновляются.

...