Вопрос об алгоритме работы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cupper, 14 Mar 2011.

  1. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    Задача:
    есть n (идентичных) запущенных серверов. Нужно собрать статистику о них.
    Статистика вида:
    1. [Хост][идентификатор сервера]
    ...
    n. [Хост][идентификатор сервера]

    Для этого разрабатывается дополнительное приложение, называемое admin.
    Теперь собстно как это может работать.

    Вариант 1.
    admin через заданные промежуток времение рассылает по сети multicast UDP сообщение, с указание своего ip:port
    сервер случаешь сеть, после того как получают этот UDP пакет, отправляется ему свой UDP с указанием данных.

    Вариант 2.
    Каждый из серверов время от времени делает multicast UDP рассылку с указание нужных данных.
    admin слушает сеть, и после получение UDP обновляет свою статистику.


    Собстно нужно вытесать все подводные камни в каждом из случаев.

    Итак что я уже надумал:
    Вариант 1.
    Преимущества:
    1. в случаем изменения временного интервала рассылки мультикастов, перезапускать нужно только admina.
    2. admin легко ведет статистику всех серверов от которых получает ответы. В случае если на определенном этапе от какого то из серверов не был получен ответ, admin может инициировать повторный запрос этому серверу дабы убедится что пакет не был потерян и сервер действительно выключен.
    Недостатки:
    1. Для получения статистики нужно выполнить две пересылки UDP, от admina к серверу, от сервера к админу.

    Вариант 2.
    Преимущества:
    1. один этап пересылки UDP. От сервера adminу
    Недостатки:
    1. Для изменения временного интервала рассылки необходимо перезапускать все сервера.
    2. Не совсем понятно как вести статистику. Вернее то как принимать решение о том что сервер n уже недоступен. Например: если в течении какого то времени от сервера не было пакета UDP значит сервер уже не работает. Но для этого необходимо что бы время задержки на каждом из серверов было одинаковым, а это условие может нарушится из за п.1
     
  2. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Первый вариант выглядит более верным. И ты кстати тоже выделил в нем только один недостаток, и то это может быть даже не недостаток если опрашивать придется не так уж часто.
     
  3. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    я старался делать все объективно. Так как мне нужно будет отчитываться о принятом решении :) И вообще не думаю что отправка одного или двух UDP пакетор хоть как то может повлиять.

    А вот то то для второго варианта, я пока так и не смог придумать 100% правильный способ определение что ранее активный сервере больше недоступен. Но это не означает что способ плох, это означает что я просто не смог придумать "как" это сделать..

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