Translate

четвер, 11 квітня 2013 р.

Storm - big data solution for soft-real time


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 - основний компонент, який виконує якісь обчислення над таплами
  • топологія - по суті описаний вами флоу для обробки даних, може виконуватися локально, так і деплоітися на тисячі машин :)



тепер ми можемо приймати дані від веб-сервера про нових відвідувачів "як тільки", розсилати бродкастом усім зацікавленим болтам, які зроблять агрегацію і оперативно віддадуть це наступному болту. який вже віддасть цей результат назовні і наші щасливі кастомери зможуть насолоджуватися стаститикою з затримкою в кілька секунд.

На цьому все, усе дуже просто, якщо виникнуть питання - задавайте