Почему PW = all и PR = all не дают сильной согласованности в Riak?

Предположим, у нас есть кластер из 5 машин с n_val = 3. Почему установка PW = 3 и PR = 3 для записи и чтения не гарантирует строгой согласованности?


person user782220    schedule 26.11.2014    source источник


Ответы (1)


Запись ключа с использованием PW = 3 записывает значение в 3 основных vnodes. Но успех возвращается, как только vnode получает записываемое значение, то есть до того, как оно будет сохранено.

После подтверждения значения vnode должен по-прежнему зафиксировать его в соответствующем внутреннем хранилище, любое событие, которое прерывает это, приведет к тому, что vnode this получит предыдущее значение (или не найдет) при следующем чтении.

Использование опции длительной записи (DW = 3) приведет к тому, что vnode откладывает подтверждение значения до тех пор, пока оно не будет зафиксировано в внутреннем хранилище. Однако это все еще не совсем гарантия, потому что бэкэнд не гарантирует, что кеш очищается после записи каждого значения. Сбой по-прежнему может прервать запись значения на диск. Это явно меньшее окно, чем при PW = 3, но все же не гарантия.

Допущенная вероятность того, что это произойдет на всех 3 основных узлах, так что следующий PR = 3 ready будет успешным, но вернет неправильное значение, весьма незначительна, но не отсутствует.

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

person Joe    schedule 29.11.2014