Кто скажет, что вам нужен Paxos/Raft/etc? То, что вы описываете, является, по существу, распределенной, атомной операцией Compare-And-Swap. Вы можете использовать любое количество механизмов для этого, и база данных SQL будет работать нормально. Ваша идея добавить дополнительную метку времени, которую необходимо постоянно обновлять, чтобы сохранить статус мастера, является общей картиной на этой арене, и ее часто называют «Master Leases».
В зависимости от вашего приложения и его предполагаемой операционной среды использование вашего назначенного третьего лица для арбитража между одноранговыми узлами (которое является той базой, которую заполняет база данных SQL в вашем примере), может быть вашим лучшим вариантом. Он вводит одну точку отказа, но это супер простые и периодические окна обслуживания в режиме простоя могут быть приемлемыми, опять же в зависимости от приложения. Потенциальное преимущество чего-то типа Raft или Multi-Paxos состоит в том, что нет единственной точки отказа. Пока доступен кворум сверстников, доступна возможность выбора и поддержки ведущего партнера. Предварительная реализация, вероятно, на порядок сложнее, но вы удаляете единую точку отказа и получаете меру общей архитектурной простоты, исключив концепцию назначенной третьей стороны.
В конечном счете, это зависит от того, что вы пытаетесь сделать, и от уровня надежности, который вам нужен. Является ли бремя обслуживания и потенциальное время простоя SPOF нарушением транзакции для вашего приложения? Если да, перейдите на Raft/Multi-Paxos. Если нет, соблюдайте принцип KISS и отправляйте назначенный сторонний маршрут.
Как вы справляетесь с нечистым отключением текущего мастера, если он не очищает стол? Я думаю, что подход с _locking_ существующей строкой и не освобождение этой блокировки более безопасен, потому что, если приложение умирает, соединение умирает и блокировка автоматически освобождается. –
Я думал о добавлении столбца timestamp, так что таблица sql. Когда мастер получает блокировку, он может обновлять временную метку каждые n секунд. Если мастер имеет нечистое завершение работы, метка времени не будет обновляться, а другие узлы могут считать, что владелец мертв. Но да, я согласен, не выпуская замок, это тоже хорошая идея. – user375868