Hadoop – чудовий інструмент, що дозволяє реалізувати аналітику в домашніх умовах, перенести її на кластер і скейлити а ж до 4000 інстансів. Наприклад, можна написати свого конкурента Google Analytics, який на основі логів веб-серверу буде показувати статистику по країні, мові, відвіданому ресурсі чи ще будь-якій комбінації… купа варіантів, усе дуже просто і чудово масштабується. Єдина проблема, це буде зовсім не “в реальному часі”. Це пов”язано з тим, що Хадуп пропонує нам так звану “пакетну” обробку даних.
На прикладі, це виглядає так: веб сервери пишуть логи з 11:00 до 11:59, о 12:00 вони починають писати нові логи, а ми забираємо логи за попередню годину (11:00 – 11:59) і починаємо їх процесати. Припустимо це займає біля 15ти хвилин. Отже, лише після 12:15 ми матимемо дані за попередню годину. Додаму сюди можливі проблеми – з нетфорком чи фейли в кластрі, тобто треба мати запас як мінімум на ще один перезапуск хадупівських джобів. Отже, ми можемо обіцяти кастомеру готові дані з затримкою хвилин в 40 (ну що б з гарантією 99%), а в маркетингових цілях – так і взагалі лише о 13:00 🙂
Отже, виходе якось не дуже:( Звісно, нам би хотілося усю цю аналітику показувати в “в реальному часі” (в гугл аналітікс і така вкладка є), а для цього хадуп вже якось не дуже підходить…
Нащастя, і для цього вже придумали ріщення – називається Storm, родом з Твітера де використовується для побудови малопримітної колоночки “тренди”. Ну а ще її можна застосувати, щоб показувати статистику по відвідуваннях для різних критеріїв, в режимі наближеному до реального часу.
Storm кардинально відрізняєтсья від Hadoop в першу чергу своєю орієнтованістю на потокову обробку даних, тут немає окремих етапів заходу даних, їх обробки і видання результату – усе це відбуваєтсья постійно, як потік води. Друга відмінність – Storm не пропонує готових MapReduce компонентів, вас не обмежують використанням цього алгоритму.
Основні компоненти Шторму:
- тапл – структура даних, яка використовується для комунікації між компонентами Шторма (по-суті ,нагадує тапл з ерланга, го чи пайтона)
- потік, який забезпечує транспорт таплів між компонентами
- spout – джерело даних в Штром, забезпечує попадання даних в середину та їх перетворення на тапли
- bolt – основний компонент, який виконує якісь обчислення над таплами
- топологія – по суті описаний вами флоу для обробки даних, може виконуватися локально, так і деплоітися на тисячі машин 🙂