значителен напредък на системата за разпределена обработка на събития , за забележителния преход към нова архитектура, реализирана на Java, вместо преди използвания Clojure.
Проектът позволява организирането на гарантирана обработка на различни събития в реално време. Например, Storm може да се използва за анализ на потоци от данни в реално време, изпълнение на задачи за машинно обучение, организиране на непрекъснати изчисления, реализиране на RPC, ETL и т.н. Системата поддържа клъстеризация, създаване на отказоустойчиви конфигурации, режим на гарантиирана обработка на данни и разполага с висока производителност, достатъчна за обработка на над милион заявки в секунда на един възел от клъстера.
Поддържа се интеграция с различни системи за обработка на опашки и технологии за бази данни. Архитектурата на Storm предвижда прием и обработка на неструктурирани постоянно обновяващи се потоци от данни с използването на произволни сложни обработчици с възможност за секциониране между различни етапи на изчисленията. Проектът беше предаден на общността Apache след поглъщането на компанията BackType от Twitter, която първоначално разработи фреймуорка. На практика 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. Направени са много подобрения за осигуряване на интеграция с платформата . Разширена е системата за контрол на достъпа, в която е добавена възможността за създаване на групи администратори и делегиране на токени. Добавени са подобрения, свързани с поддръжката на SQL и метрики. В администраторския интерфейс се появиха нови команди за отстраняване на проблеми със състоянието на клъстера.
Области на приложение на Storm:
- Обработка на потоци нови данни или обновления на БД в реално време;
- Непрекъснати изчисления: Storm може да изпълнява непрекъснати заявки и да обработва непрекъснати потоци, предоставяйки резултатите от обработката на клиента в реално време.
- Разпределено отдалечено повикване на процедури (RPC): Storm може да се използва за осигуряване на паралелизъм при изпълнението на ресурсоемки заявки. Задание („топология“) в Storm представлява разпределена функция по възли, която очаква получаването на съобщения, които трябва да бъдат обработени. След приемането на съобщение, функцията го обработва в локален контекст и връща резултата. Пример за приложение на разпределено RPC може да бъде паралелната обработка на търсения или изпълнението на операции върху голям набор от множества.
Характеристики на Storm:
- Проста програмна модел, който значително опростява обработката на данни в реално време;
- Поддръжка на всички програмни езици. Има модули за Java, Ruby и Python, адаптацията към други езици не представлява трудност благодарение на много простия комуникационен протокол, за реализирането на поддръжка на който са необходими около 100 реда код;
- Отказоустойчивост: за стартиране на задание по обработка на данни е необходимо да се формулира jar-файл с кода. Storm самостоятелно ще разпространи този jar-файл по възлите на клъстера, ще свърже свързаните с него обработвачи и ще организира мониторинга. При завършване на заданието кодът автоматично ще бъде изключен на всички възли;
- Хоризонтална масштабируемост. Всички изчисления се извършват в паралелен режим, при увеличаване на натоварването е достатъчно просто да се свържат нови възли към клъстера;
- Надеждност. Storm гарантира, че всяко получено съобщение ще бъде напълно обработено поне веднъж. Съобщението ще бъде обработено само веднъж в случай на отсъствие на грешки при преминаване през всички обработвачи; ако възникнат проблеми, неуспешните опити за обработка ще бъдат повторени.
- Скорост. Кодът на Storm е написан с насоченост към висока производителност и използва за бърз асинхронен обмен на съобщения система .
Източник: opennet.ru
