Когда использовать Paxos (реальные случаи практического использования)? - PullRequest
18 голосов
/ 03 июня 2011

Может ли кто-нибудь дать мне список реальных вариантов использования Paxos.Это реальные проблемы, которые требуют консенсуса как части более крупной проблемы.

Является ли следующий пример использования Paxos?

Предположим, что на покерном сервере два клиента играют в покер друг против друга.Покерный сервер реплицируется.Насколько я понимаю, Paxos состоит в том, что его можно использовать для поддержания согласованности структур данных памяти, которые представляют текущую комбинацию покера.То есть убедитесь, что все реплики имеют одинаковое состояние памяти руки.

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

Ответы [ 5 ]

12 голосов
/ 22 сентября 2013

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

Однако состояние ваших серверов также зависит от действий пользователя. Например, если пользователь решил повысить на 50 $ - ваш сервер должен где-то хранить эту информацию. Теперь предположим, что ваш сервер ответил «хорошо» веб-клиенту (я предполагаю, что игра в покер на основе веб-интерфейса), а затем сервер вышел из строя. На других ваших серверах может отсутствовать информация о повышении на 50 $, и ваша система будет несовместима (в том смысле, что клиент считает, что повышение было на 50 $, тогда как выжившие серверы об этом не замечают).

Обратите внимание, что большинство здесь не поможет, так как данные потеряны. Кроме того, предположим, что вместо сбоя основного сервера основной сервер плюс еще один получили данные о повышении на 50 $. В этом случае использование большинства может быть даже хуже: если вы получите ответ от двух серверов с данными, вы будете думать, что повышение на 50 $ было выполнено. Но если один из них потерпит неудачу, у вас не будет большинства, и вы подумаете, что повышение не было выполнено.

Как правило, Paxos может использоваться для репликации конечного автомата отказоустойчивым способом. Где «конечный автомат» может рассматриваться как алгоритм, имеющий некоторое начальное состояние, и он детерминистически продвигает состояние в соответствии с сообщениями, полученными извне (то есть веб-клиентом).

Точнее, Paxos следует рассматривать как распределенный журнал, подробнее об этом вы можете прочитать здесь: Понимание Paxos - Часть 1

5 голосов
/ 03 июня 2011
3 голосов
/ 08 мая 2013

Paxos используется для репликации на основе глобальной сети репозиториев Subversion и высокой доступности Hadoop NameNode компанией, в которой я работаю (WANdisco plc.)

2 голосов
/ 28 июля 2015

Обновление 2018: Mysql High Availability использует paxos: https://mysqlhighavailability.com/the-king-is-dead-long-live-the-king-our-homegrown-paxos-based-consensus/

Пример из реального мира:

Cassandra использует Paxos , чтобы гарантировать, что клиентыподключенные к различным узлам кластера могут безопасно выполнять операции записи, добавляя «ЕСЛИ НЕ СУЩЕСТВУЕТ» операции записи.Кассандра не имеет главного узла, поэтому две конфликтующие операции могут выполняться одновременно на нескольких узлах.При использовании синтаксиса «если не существует» в алгоритме paxos используются операции порядка между машинами, чтобы обеспечить успешное выполнение только одного.Это может затем использоваться клиентами для хранения достоверных данных с истечением срока аренды .Пока большинство узлов Cassandra работает, оно будет работать.Таким образом, если вы определите коэффициент репликации вашего пространства ключей равным 3, тогда 1 узел может выйти из строя, из 5, а затем 2 может выйти из строя и т. Д.

Для нормальных записей Caassandra допускает принятие нескольких конфликтующих записей различными узлами, что можетбыть временно неспособным общаться.В этом случае не используйте Paxos, поэтому может потерять данные , когда две записи происходят одновременно для одного и того же ключа.В Cassandra встроены специальные структуры данных, которые не будут терять данные, предназначенные только для вставки.

Покер и Паксос:

Как отмечают другие ответы, покер основан на пошаговых правилах и имеет правила.Если вы разрешите один мастер и несколько реплик, то мастер решит следующее действие.Допустим, пользователь сначала нажимает кнопку «проверить», затем меняет свое мнение и нажимает «свернуть».Это противоречивые команды, только первая должна быть принята.Браузер не должен позволять им нажимать вторую кнопку, он отключает его, когда они нажимают первую кнопку.Поскольку деньги задействованы, главный сервер также должен применять правила и разрешать только одно действие на игрока за ход.Проблема возникает, когда мастер вылетает во время игры.Какая реплика может стать мастер-копией, и как обеспечить, чтобы только одна реплика стала мастер-копией?

Один из способов справиться с выбором нового мастера - это использовать внешний сильный последовательный сервис.Мы можем использовать Cassandra для создания аренды для главного узла.Реплики могут установить тайм-аут на главном сервере и попытаться взять аренду.Поскольку Кассандра использует Paxos, она отказоустойчива;вы все равно можете прочитать или обновить аренду, даже если узлы Cassandra аварийно завершают работу.

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

0 голосов
/ 03 июня 2011

В случае, который вы описываете, вы правы, Paxos на самом деле не нужен: один центральный орган может сгенерировать перестановку для колоды и распределить ее всем в начале раздачи.Фактически, для игры в покер в целом, где есть строгий порядок ходов и один активный игрок, как в покере, я не вижу разумной ситуации, в которой вам, возможно, придется использовать Paxos, за исключением, возможно, выбора центральной властиперемешивает колоды.

Лучшим примером может служить игра с одновременными ходами, например, «Опасность».Paxos в этой ситуации позволил бы всем серверам вместе решать, в какой последовательности произошла серия тесно синхронизированных событий (например, нажатий зуммера), так что все серверы пришли к одному и тому же выводу.

...