5

Я проектирую распределенную систему с определенным потоком данных в ней. Я хотел бы гарантировать, что по крайней мере N узлов имеют почти текущие данные в любой момент времени. Мне не нужна полная согласованность, только возможная согласованность (t.i. для любого момента времени, текущий снимок данных должен в конечном итоге появляться, по крайней мере, на N узлах. Трудно определить здесь термин «текущий», но все же). Узлы могут выйти из строя и вернуться в любой момент, и нет единого «центрального» узла.Статьи о схемах/алгоритмах репликации?

O переливы! Назовите меня хорошими документами, описывающими схемы репликации. Я до сих пор нашел один: Consistency Management in Optimistic Replication Algorithms и более широкую и недавнюю статью того же автора: Optimistic Replication.

ответ

1

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

  • Update ключ K на значение V.
  • Посмотрите несколько-последнее значение ключа K.

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

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

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

  • Получить абсолютную последнюю величину ключа К?
  • Обновить значение ключа K до значения V 'при условии, что последнее значение в настоящее время V?

У вас есть жесткая надежность, латентность и/или требования к пропускной способности? Насколько далеки друг от друга ваши реплики/насколько хороша сеть? Это влияет, если вы можете иметь кросс-реплика-связь при каждом обновлении и даже при каждом поиске; или даже если вы можете/не выполнить операции над удаленной репликой, если локальная, похоже, не работает.

В зависимости от ваших ответов здесь я работал с несколькими различными схемами, которые могут соответствовать вашим требованиям. На них есть несколько возможных вариантов.

  • Простейшая вещь заключается в том, чтобы приложение всегда говорило с местной репликой. Значения метки времени Replicas (с использованием синхронизированных по протоколу NTP) и только для разговора для асинхронной репликации. Самая высокая отметка времени выигрывает в репликации. Конечно, если приложения на двух разных репликах каждый одновременно читают/изменяют/записывают, одна из модификаций может быть легко потеряна. (Фактически, без условной схемы обновления, то же самое справедливо и для почти одновременных изменений на одной и той же реплике.) Если реплика постоянно терпит неудачу, последние обновления могут быть потеряны. Это более или менее то, что делает встроенная репликация Bigtable. В документе, который вы связали, это будет подразделение «Оптимистичный - Мультимастер», но не слишком заботится о потере некоторых обновлений, что упрощает их, чем они предлагают.
  • Некоторые базы данных используют алгоритм Paxos (см., Например, «Управление данными для интернет-масштабирования с одним входным сигналом» here, чтобы сделать более интересные вещи. Каждая реплика может знать, насколько далеко позади может быть так, что вы можете сказать «дай мне значение, которое составляет не более 1 минуты »или« дать мне абсолютное последнее значение ». Обновление не считается завершенным до тех пор, пока кворум реплик не примет его, поэтому« дайте мне абсолютное последнее значение », безусловно, всегда будет возвращать это значение до тех пор, пока не произойдет другое обновление. Вы можете выполнить операцию условного обновления, о которой я упоминал, чтобы предотвратить одновременное использование друг друга писателями. Это, похоже, не соответствует аккуратно или оптимистичной или пессимистической категории, как определено этим автором, поскольку обновления реплицируются синхронно кворум, но реплики, которые не голосовали в последнем раунде Paxos, все еще могут отвечать на некоторые запросы. Схема может быть очень сложный, хотя ...