Проверка доступности набора узлов в одном подходе l oop - PullRequest
0 голосов
/ 13 апреля 2020

Я пишу сервис, который (помимо прочего) должен отслеживать доступность ряда узлов. Чтобы проверить, является ли узел живым или нет, я отправляю пакет PING на узел каждые T секунд, и если узел не отвечает PONG в течение этого интервала времени T, узел помечается как отключенный .

Итак, я пришел к этому простому l oop (некоторые детали опущены для краткости):

def start(disconnect_cb):
    while True:
        nodes = list(tracked_nodes_dict)
        for node in nodes:
            if node in received_pong:
                send_ping(node)
            else:
                disconnect_cb(node)
            delay = T / len(nodes)
            time.sleep(delay)

Проблема : число узлов может значительно изменяться на каждой итерации l oop, потенциально оно может измениться с 1 узла на более 5000 или упасть другим способом. Хотя мой подход гарантирует, что каждый узел обрабатывается в T, время между эхо-запросами для определенного узла не будет постоянным. Например, легко показать, что в случае, когда число узлов быстро увеличивается, это время может увеличиться до 2T.

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

Основываясь на том факте, что описанный подход очень прост и интуитивно понятен, я предполагаю, что проблема хорошо известна. До сих пор я не могу найти никаких ссылок об этом в Интернете. В случае, если я ошибаюсь, и это вообще не жизнеспособное решение, я хотел бы узнать о лучших практиках.

Спасибо!

...