Как подойти к синхронизации сервисов wcf? - PullRequest
1 голос
/ 19 февраля 2009

Я реализовал сервис wcf, и теперь мой клиент хочет, чтобы у него было три его копии, независимо работающих на разных машинах. Мастер-рабский подход. Мне нужно найти решение, которое включит поведение:

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

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

спасибо

1 Ответ

1 голос
/ 19 февраля 2009

Я бы предложил посмотреть на равноправный канал WCF (System.Net.PeerToPeer), чтобы каждый узел знал о других узлах. Вот ссылка , которая предлагает достойное представление.

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

Наконец, что касается проверки, если мастер еще жив, я бы предложил использовать основанный на событиях механизм, описанный здесь . Мастер может отправлять периодические события состояния и состояния, для которых будут регистрироваться другие узлы. Я бы поставил блок try / catch / finally в точке ввода кода, чтобы в случае сбоя мастера он мог опубликовать одно финальное событие MasterClosing, чтобы подчиненные знали, что он уходит. Это не учитывает сбой системы, например, сбой питания и т. Д. Чтобы справиться с этим, укажите время ожидания в ведомых устройствах, чтобы по истечении времени ожидания ведомые устройства могли запросить мастер-устройство, чтобы узнать, все ли оно еще там. Если нет, ведомые могут договариваться между собой, используя ваш детерминистический алгоритм о том, кто должен быть следующим хозяином.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...