Сильная последовательность для чтения на аэроспайке - зачем им номера режима? - PullRequest
2 голосов
/ 26 февраля 2020

Я читаю руководство по строгой согласованности для аэроспайки . В последнем примере «Strong Consistency for reads» они объясняют, что в случае раздела им нужна концепция, называемая «режим», для обеспечения линеаризации операций чтения. Зачем нам это нужно? Писать в меньшинства не удастся, так как они не будут реплицированы, так о чем мы беспокоимся? отсутствует запись в активный мастер?

1 Ответ

3 голосов
/ 26 февраля 2020

Это сводится к тому, что когда кластер разделяется, все узлы, вероятно, не разделяются одновременно.

Рассмотрим один раздел данных (сегмент) Aerospike. Мастер-копия из предыдущего режима находится на стороне меньшинства раздела без всех его копий, после чего она должна отказаться от мастерства, в то время как копия в новом режиме должна стать мастером. Поскольку мы находимся в сетевом разделе, эти два узла не могут координировать этот обмен. Мастер из предыдущего режима может получить чтение, прежде чем определить, что он больше не мастер. Для обеспечения линеаризованного чтения транзакция чтения создает репликационный пинг, который включает текущий режим, который, по мнению мастера, включен. Если какая-либо реплика сообщает, что режим продвинулся, то чтение завершается неудачно, в противном случае репликация позволяет продолжить транзакцию.

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

...