3

Скажем, я имею SQL схему как this-с использованием первичных ключей sql для мастер-выборов - есть ли недостаток в этом подходе?

create table master_lock(job_type int primary key, ip varchar); 

Теперь каждый узел пытается вставить значение как this-

insert into master_lock values(1,192.168.1.1); 
insert into master_lock values(1,192.168.1.2) 

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

С помощью этой схемы я могу легко выбрать главный узел. Зачем мне Paxos/Raft и т. Д.?

+2

Как вы справляетесь с нечистым отключением текущего мастера, если он не очищает стол? Я думаю, что подход с _locking_ существующей строкой и не освобождение этой блокировки более безопасен, потому что, если приложение умирает, соединение умирает и блокировка автоматически освобождается. –

+0

Я думал о добавлении столбца timestamp, так что таблица sql. Когда мастер получает блокировку, он может обновлять временную метку каждые n секунд. Если мастер имеет нечистое завершение работы, метка времени не будет обновляться, а другие узлы могут считать, что владелец мертв. Но да, я согласен, не выпуская замок, это тоже хорошая идея. – user375868

ответ

1

Кто скажет, что вам нужен Paxos/Raft/etc? То, что вы описываете, является, по существу, распределенной, атомной операцией Compare-And-Swap. Вы можете использовать любое количество механизмов для этого, и база данных SQL будет работать нормально. Ваша идея добавить дополнительную метку времени, которую необходимо постоянно обновлять, чтобы сохранить статус мастера, является общей картиной на этой арене, и ее часто называют «Master Leases».

В зависимости от вашего приложения и его предполагаемой операционной среды использование вашего назначенного третьего лица для арбитража между одноранговыми узлами (которое является той базой, которую заполняет база данных SQL в вашем примере), может быть вашим лучшим вариантом. Он вводит одну точку отказа, но это супер простые и периодические окна обслуживания в режиме простоя могут быть приемлемыми, опять же в зависимости от приложения. Потенциальное преимущество чего-то типа Raft или Multi-Paxos состоит в том, что нет единственной точки отказа. Пока доступен кворум сверстников, доступна возможность выбора и поддержки ведущего партнера. Предварительная реализация, вероятно, на порядок сложнее, но вы удаляете единую точку отказа и получаете меру общей архитектурной простоты, исключив концепцию назначенной третьей стороны.

В конечном счете, это зависит от того, что вы пытаетесь сделать, и от уровня надежности, который вам нужен. Является ли бремя обслуживания и потенциальное время простоя SPOF нарушением транзакции для вашего приложения? Если да, перейдите на Raft/Multi-Paxos. Если нет, соблюдайте принцип KISS и отправляйте назначенный сторонний маршрут.

Смежные вопросы