Apache Storm 2.0 – реліз системи розподіленої обробки подій
Apache Storm 2.0 - реліз системи розподіленої обробки подій
Відбувся реліз системи розподіленої обробки подій Apache Storm 2.0, примітний переходом на нову архітектуру, реалізовану мовою Java, замість мови Clojure, що раніше застосовувалася.
Проект дозволяє організувати гарантовану обробку різних подій у режимі реального часу. Наприклад, Storm можна застосовувати для аналізу потоків даних у режимі реального часу, виконання завдань для машинного навчання, організації безперервних обчислень, реалізації RPC, ETL тощо. Система підтримує кластеризацію, створення відмовостійких конфігурацій, режим гарантованої обробки даних і має високу продуктивність, достатню для обробки більше мільйона запитів в секунду на одному вузлі кластера.
Підтримується інтеграція з різними системами обробки черг та технологіями баз даних. Архітектура Storm передбачає прийом та обробку неструктурованих постійно оновлюваних потоків даних з використанням довільних складних обробників з можливістю секціонування між різними стадіями обчислень. Проект було передано спільноті Apache після поглинання Twitter компанії BackType, яка спочатку розробила фреймворк. На практиці Storm застосовувався в BackType для аналізу відображення подій у мікроблогах, шляхом зіставлення на льоту нових твітів і посилань (наприклад, проводилася оцінка, як зовнішні посилання або публіковані в Twitter анонси, ретранслюються іншими учасниками).
Функціональність Storm порівнюється з платформою Hadoop, при цьому ключовою відмінністю є те, що дані не розміщені у сховищі, а надходять ззовні та обробляються в режимі реального часу. У Storm немає вбудованого прошарку для організації сховища і аналітичний запит починає застосовуватися до вступників до тих пір, поки не буде скасований (якщо в Hadoop використовуються MapReduce-роботи, що займають кінцевий час, то в Storm застосовується ідея безперервно виконуваних "топологій"). Виконання обробників може бути розподілене на кілька серверів - Storm автоматично розпаралелює роботу з потоками на різні вузли кластера.
Спочатку система була написана мовою Clojure і виконується всередині віртуальної машини JVM. У фонді Apache була запущена ініціатива з перекладу Storm на нове ядро, написане на Java, результати якої запропоновані у випуску Apache Storm 2.0. Усі базові компоненти платформи переписані Java. Підтримка написання обробників на Clojure збережена, але тепер пропонується у вигляді біндингу. Для роботи Storm 2.0.0 потрібна наявність Java 8. Повністю перероблена модель багатопоточної обробки, що дозволило добитися помітного приросту продуктивності (для деяких топологій затримки скоротилися на 50-80%).
У новій версії також запропоновано новий типізований API Streams, що дозволяє задавати обробники, використовуючи операції у стилі функціонального програмування. Новий API реалізований поверх штатного базового API та підтримує автоматичне об'єднання операцій для оптимізації їх обробки. В API Windowing для віконних операцій додано підтримку збереження та відновлення стану в бекенді.
У планувальник запуску обробників додано підтримку обліку додаткових ресурсів при прийнятті рішень, що не обмежуються CPU та пам'яттю, таких як параметри мережі та GPU. Внесено велику кількість поліпшень, пов'язаних із забезпеченням інтеграції з платформою Kafka. Розширено систему контролю доступу, в якій з'явилася можливість створення груп адміністраторів та делегування токенів. Додані покращення, пов'язані з підтримкою SQL та метрик. В інтерфейсі адміністратора з'явилися нові команди для налагодження кластера.
Області застосування Storm:
- Обробка потоків нових даних або оновлень БД у реальному часі;
- Безперервні обчислення: Storm може виконувати безперервні запити та обробляти безперервні потоки, передаючи результати обробки клієнту в режимі реального часу.
- Розподілений віддалений виклик процедур (RPC): Storm може бути використаний для забезпечення паралелізму виконання ресурсомістких запитів. Завдання ("топологія") в Storm є розподіленою по вузлах функцією, яка очікує надходження повідомлень, які потрібно обробити. Після прийому повідомлення функція обробляє його в локальному контексті та повертає результат. Прикладом використання розподіленого RPC може бути паралельна обробка пошукових запитів або виконання операцій над великим набором множин.
Особливості Storm:
- Проста модель програмування, що значно спрощує обробку даних у режимі реального часу;
- Підтримка будь-яких мов програмування. Є модулі для мов Java, Ruby та Python, адаптація для інших мов не викликає складності завдяки дуже простому комунікаційному протоколу, для реалізації підтримки якого потрібно близько 100 рядків коду;
- Отякостійкість: для запуску завдання з обробки даних потрібно сформувати jar-файл з кодом. Storm самостійно поширить цей jar-файл по вузлах кластера, підключить пов'язані з ним обробники та організує моніторинг. Після завершення завдання код буде автоматично вимкнено на всіх вузлах;
- Горизонтальна масштабованість. Усі обчислення проводяться в паралельному режимі, при зростанні навантаження до кластера досить просто підключити нові вузли;
- Надійність. Storm гарантує, що кожне повідомлення, що надходить, буде повністю оброблено як мінімум один раз. Одного разу повідомлення буде опрацьовано лише у разі відсутності помилок при проходженні всіх обробників, якщо виникли проблеми, то невдалі спроби обробки будуть повторені.
- Швидкість. Код Storm написаний з огляду на високу продуктивність та використовує для швидкого асинхронного обміну повідомленнями систему ZeroMQ.