Сильно ли согласован Paxos?

Рассмотрим распределенную систему с 3 узлами - n1, n2, n3. Между узлами есть общие данные x. Paxos работает на узлах. Вначале x равен 4.

Клиент отправляет запрос обновления на n1, чтобы изменить значение x на 5. n1 и n2 достигают консенсуса по новому значению, запустив Paxos, но некоторые сбои связи происходят для n3, поэтому n3 не имеет самого нового значения x.

Мы знаем, что Paxos обеспечивает сильную последовательность. С другой стороны, если клиент отправляет запрос чтения на n1, а также другой запрос на чтение на n3, возвращаемые значения не совпадают (одно из них равно 5, а другое - 4). Следовательно, после запуска Paxos система не будет полностью согласованной.

У меня вопрос: как разрешить это противоречие? Я что-то неправильно понял?


person H.H    schedule 08.06.2019    source источник


Ответы (1)


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

person Rakis    schedule 09.06.2019