Можно ли получить сильную согласованность в распределенной системе? - PullRequest
0 голосов
/ 09 апреля 2020

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

Как можно обеспечить сильную согласованность в распределенной системе, когда могут возникнуть такие условия гонки?

1 Ответ

1 голос
/ 09 апреля 2020

Что такое последовательность? Вы говорите, что две записи прибывают "не в порядке", но что установило этот порядок? То, что устанавливает этот порядок, является вашей основой для последовательности.

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

Конечно, вы не можете легко реплицировать объект с этим в любой широко распространенной системе, так как два отключенных владельца O могут разрешать разные операции, которые будут невозможно объединить. Etcd, например, решает это в ограниченном количестве. Цепочка блоков решает ее в более широком смысле.

...