Я разрабатываю распределенную систему, состоящую из главных и рабочих серверов. Там должно быть 2 вида сообщений:Протокол связи
Heartbeat
Мастер получает состояние работника и немедленно реагировать с соответствующей командой. Например:
- Сообщение от Работник к Мастер: "Эй, там у меня есть данные, а, б, в"
- Ответ Мастер к Worker: «Все в порядке, но выбрасывать с - нам не нужно больше этого»
участники обмениваются эти сообщения с интервалом Т.
Прямая командная команда
Скажем, клиент просит владельца убить задание № 123. Вот разговор:
- Сообщение от Мастер к Рабочий: "Alarm! Мы должны убить работу # 123"
- Сообщение от Работник к Мастер: «Нет проблем Готово. "
Очевидно, что мы не можем предсказать, когда появится это сообщение.
раствор Простейшее является то, что мастер является инициатором всех коммуникаций для обоих сообщений (в случае сердцебиения мы будем включать еще один из мастера, чтобы начать обмен). Но давайте предположим, что это очень дорого для ведения домашнего хозяйства на мастер сторона для N работников. И мы не хотим тратить наши ресурсы, чтобы поддерживать несколько подключений tcp к рабочим серверам, поэтому у нас есть только один.
Есть ли какое-либо решение для этих ограничений?
Первое сообщение на самом деле не является «биением сердца». Сообщение «heartbeat» - это не что иное, как сообщение «Я все еще жив», и ответ на этот вопрос «Хорошо, я тоже». Это немного сложнее, чем это, потому что, если мастер не получает сердцебиение от работника за какое-то время, как он может знать, что это «рабочий», который ушел, а не сетевое сетевое соединение, которое не работает? –
@Someprogrammerdude вы правы термин «сердцебиение» неверен. Я использую его из этой статьи http://static.googleusercontent.com/media/research.google.com/ru//archive/gfs-sosp2003.pdf (мой основанный на этом хобби проект) – kirugan
Бит путать. «Предположим, клиент просит хозяина убить работу № 123. Вот разговор:« Тогда почему Учитель говорит «Тревога! Нам нужно убить работу № 123» и клиент «Нет проблем! Готово»? – Prabhu