[Проект] Нещо като MapReduce

  1. Simple MapReduce

    Общи приказки:

    Представете си че имаме >100 машини, които обслужват хиляди заявки/байтове в секунда от клиенти по някакъв протокол(HTTP). За всяка завка се генерира един ред лог, който се записва в логовете по някакъв протокол(UDP 514 - syslog). Логовете са огромни и се записват в централно място с огромни и бавни SATA дискове, което прави ваденето на агрегирана информация доста бавно. Не е невъзможно събития, които се случват днес да можем да ги начертаем на графика чак утре(никой не е доволен ако трябва да чака 1 ден, за да разбере, че услугата му не работи). Един възможен подход да решим този проблем(без да променяме сервиращия софтуер) е ако на всяка машина, която генерира логове, прихванем всеки лог(UDP 514), извлечем необходимите данни, редуцираме ги и ги препратим на системата, която чертае графики/праща нотификации.

    Задачата:

    Да се имплементира mapper, който:

    1. Работи на всяка машина генерираща логове
    2. Прихваща входящи логове по определен протокол(в начлото само UDP 514)
    3. Parse-ва входящото съобщение по зададен темплейт
    4. Изпълнява n на брой регистрирани mapper-a за всяко входящо съобщение:

      • mapper 1: asn_performance_per_region - за даден ASN,POP,QUALITY опреdеля bytes/hits/tcp rtt/below_bitrate
      • mapper 2: graphite - определя hits/below_file_bitrate/below_requested_ bitrate
      • mapper 3: syslog_relay - запазва входното съобщение и го предава на syslog server по UDP

      ! Архитектурата трябва да позволява сравнително лесно добавяне на нови mappers

    5. Резултатът на всеки mapper може да се изпрати(но не е задължително) на n на брой регистрирани модула за изпращне:

      • sender 1: изпраща се json до реалните reducers(намират се на други машини), като използваме zmq

      ! Даден mapper може да изпрати своя резултат на предварително регистрирани senders или да има своя вътрешна имплементация за изпращанне на данните

    6. Измерва msg/s на входа и msg/s на изхода

    7. Предоставя информация за измерените статистики и текущи грешки/проблеми на 80 порт по HTTP протокол(json)

    В другия край на zmq тръбата слушат съответните reducers, които пишат в db/ипзращат нотификация, но те няма да са предмет на текущата имплементация.

    Това е реален usecase и mapper-a имплементиран на GO ще замени такива написани на Python.

Трябва да сте влезли в системата, за да може да отговаряте на теми.