Доступна система розподілених обчислень 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%).

Доступна система розподілених обчислень Apache Storm 2.0

У новій версії також запропоновано новий типізований API Streams, що дозволяє задавати оброблювачі, використовуючи операції у стилі функціонального програмування. Новий API реалізований поверх штатного базового API та підтримує автоматичне об'єднання операцій для оптимізації їх обробки. В API Windowing для віконних операцій додано підтримку збереження та відновлення стану в бекенді.

У планувальник запуску обробників додано підтримку обліку додаткових ресурсів при прийнятті рішень, що не обмежуються
CPU та пам'яті, таких як параметри мережі та GPU. Внесено велику кількість покращень, пов'язаних із забезпеченням інтеграції з платформою Кафка. Розширено систему контролю доступу, в якій з'явилася можливість створення груп адміністраторів та делегування токенів. Додані покращення, пов'язані з підтримкою SQL та метрик. В інтерфейсі адміністратора з'явилися нові команди для налагодження кластера.

Області застосування Storm:

  • Обробка потоків нових даних чи оновлень БД у реальному часі;
  • Безперервні обчислення: Storm може виконувати безперервні запити та обробляти безперервні потоки, передаючи результати обробки клієнту як реального часу.
  • Розподілений віддалений виклик процедур (RPC): Storm може бути використаний для забезпечення паралелізму виконання ресурсомістких запитів. Завдання («топологія») в Storm є розподіленою по вузлам функцією, яка очікує надходження повідомлень, які потрібно обробити. Після прийому повідомлення функція обробляє його в локальному контексті та повертає результат. Прикладом використання розподіленого RPC може бути паралельна обробка пошукових запитів або виконання операцій над великим набором множин.

Особливості Storm:

  • Проста модель програмування, що значно спрощує обробку даних у режимі реального часу;
  • Підтримка будь-яких мов програмування. Є модулі для мов Java, Ruby та Python, адаптація для інших мов не викликає складності завдяки дуже простому комунікаційному протоколу, для підтримки якого потрібно близько 100 рядків коду;
  • Відмовостійкість: для запуску завдання обробки даних потрібно сформувати jar-файл з кодом. Storm самостійно поширить цей jar-файл по вузлах кластера, підключить пов'язані з ним обробники та організує моніторинг. Після завершення завдання код буде автоматично вимкнено на всіх вузлах;
  • Горизонтальна масштабованість. Усі обчислення виробляються у паралельному режимі, у разі зростання навантаження до кластера досить просто підключити нові вузли;
  • Надійність. Storm гарантує, що кожне повідомлення, що надходить, буде повністю оброблено як мінімум один раз. Один раз повідомлення буде оброблено лише у разі відсутності помилок під час проходження всіх обробників, якщо виникли проблеми, то невдалі спроби обробки будуть повторені.
  • Швидкість. Код Storm написаний з огляду на високу продуктивність та використовує для швидкого асинхронного обміну повідомленнями систему ZeroMQ.

Джерело: opennet.ru

Додати коментар або відгук