Как работает обнаружение завершенных узлов в Erlang?Как net_ticktime влияет на контроль работоспособности узлов в Erlang?

StackOverflow https://stackoverflow.com//questions/24061270

Вопрос

Я установил значение net_ticktime равным 600 секундам.

net_kernel:set_net_ticktime(600)

В документации Erlang для net_ticktime = TickTime:

Указывает время тика net_kernel.TickTime указывается в секундах.Каждые TickTime/4 секунды все подключенные узлы проверяются (если что-то еще было записано в узел), и если ничего не было получено от другого узла в течение последних четырех (4) тиков, этот узел считается неработающим.Это гарантирует, что узлы, которые не отвечают по таким причинам, как аппаратные ошибки, считаются отключенными.

Время T, в течение которого обнаруживается не отвечающий узел:

MinT < T < MaxT where:

MinT = TickTime - TickTime / 4
MaxT = TickTime + TickTime / 4

TickTime по умолчанию составляет 60 (секунд).Таким образом, 45 < T < 75 секунд.

Примечание:Обычно конечный узел обнаруживается немедленно.

Моя проблема: Мой TickTime составляет 600 (секунд).Таким образом, 450 (7,5 минут)< Т < 750 секунд (12,5 минут).Хотя, когда я устанавливаю net_ticktime для всех распределенных узлов в Erlang на значение 600, когда какой-либо узел выходит из строя (например.когда я закрываю оболочку Erlang), другие узлы получают сообщение немедленно, а не в соответствии с определением тактового времени.

Однако отмечается, что обычно завершающий узел обнаруживается немедленно, но я не смог найти объяснения (ни в документации Erlang, ни в электронной книге Erlang, ни в других источниках на основе Erlang) этого принципа немедленного реагирования для завершения узла в распределенном Erlang.Проверяются ли узлы в распределенной среде периодически с меньшими интервалами, чем net_ticktime или завершающий узел отправляет какое-то сообщение другим узлам до своего завершения?Если он отправляет сообщение, существуют ли какие-либо сценарии, когда после завершения узел не может отправить это сообщение и его необходимо проверить, чтобы проверить его работоспособность?

Также в документации Erlang отмечается, что Distributed Erlang не очень масштабируем для кластеров размером более 100 узлов, поскольку каждый узел сохраняет связи со всеми узлами в кластере.Изменяется ли алгоритм исследования работоспособности узлов (пингование, объявление завершения) с увеличением размера кластера?

Это было полезно?

Решение

Когда два узла Erlang соединяются, между ними устанавливается TCP-соединение.Сбой, который вы вызываете, приведет к тому, что базовая ОС закроет соединение, очень быстро уведомив другой узел.

Сетевой тик используется для обнаружения соединения с удаленным узлом, который выглядит работающим, но на самом деле не передает трафик, например, это может произойти, когда сетевое событие изолирует узел.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top