Корпоративные приложения развивались в течение последних нескольких десятилетий и совершенствовались по мере развития ИТ-инфраструктуры и потребностей пользователей. Теперь настало время для его следующей эволюции, многие компании оценивают и пересматривают свою корпоративную архитектуру и приложения для перехода в облако. В качестве первого шага они начали преобразовывать свои сервисы и приложения в микросервисы. Поскольку потоковая обработка должна быть одним из ключевых компонентов в архитектуре предприятия; мы предвидим, что потоковые процессоры также будут следовать той же тенденции. Появляющееся облачное программное обеспечение для потоковой обработки требует таких характеристик, как легкость, слабая связанность и соответствие гибкому процессу разработки. Однако большинство традиционных потоковых процессоров тяжелые и зависят от громоздких монолитных технологий, что затрудняет их перенос в облако.

[Статья по теме: Преимущества облачного машинного обучения и искусственного интеллекта]

В этом блоге я расскажу о Siddhi Stream Processor (https://siddhi.io), который представляет собой облачный агент обработки потоков со 100% открытым исходным кодом, который позволяет реализовывать приложения потоковой обработки и запускать их изначально в облаке ( то есть Кубернетес). Siddhi также поставляется с набором соединителей, которые можно использовать для интеграции с внешними системами, такими как NATS, Kafka, RDBMS, MongoDB и Prometheus. Давайте узнаем больше о Siddhi и его возможностях ниже.

Что такое Сиддхи?

Ядро Siddhi — это механизм комплексной обработки событий и потоковой обработки, который появился на свет в 2011 году. На сингальском языке [1] «Siddhi» означает «события». Механизм Overtime Siddhi интегрирован с различными другими открытыми и проприетарными проектами, такими как Apache Eagle [2], Apache Flink [3], UBER [4] и Punch Platform [5] и многими другими. Механизм Siddhi также играет основную роль в различных продуктах WSO2, таких как потоковый процессор WSO2, сервер аналитики данных WSO2, управление API WSO2 (компонент диспетчера трафика) и управление идентификацией и доступом WSO2 (компонент адаптивной аутентификации). Используя весь опыт и знания, накопленные за годы создания приложений Stream Processing, команда Siddhi теперь работает над созданием распределенного процессора Cloud Native Stream Processor на основе механизма Siddhi.

Написание потоковых приложений

Потоковые приложения помогают выразить потребность/потребность в потоковой передаче. Согласно Forrester [6], потоковые приложения можно использовать для достижения следующих целей.

  • Выявление скоропортящихся идей
  • Непрерывная интеграция
  • Оркестровка бизнес-процессов
  • Встроенное выполнение кода
  • Чувствуйте, думайте и действуйте в режиме реального времени

Мы могли бы определить различные шаблоны в потоковой обработке на основе ее использования в различных областях; Эти шаблоны потоковой обработки помогают решить широко известные проблемы потоковой обработки и предоставляют пользователям некоторые подсказки о том, где применять какой шаблон потоковой обработки.

Как показано на рисунке выше, шаблоны потоковой передачи можно применять непосредственно на этапе сбора событий. затем он может распространяться на очистку событий, преобразование событий, обогащение событий, суммирование, обработку правил, корреляцию событий, анализ тенденций, машинное обучение, конвейерную обработку данных, публикацию событий, обработку по требованию и т. д. Для каждого из этих шаблонов требуются определенные конструкции потоковой передачи. такие как окна, шаблоны, разъемы ввода-вывода и алгоритмы машинного обучения для выполнения требований. Siddhi изначально поддерживает все эти потоковые конструкции, которые необходимы пользователю для достижения своих требований [7].

В прошлом применялись различные способы написания потоковых приложений, такие как самостоятельное программирование, использование инструмента потоковой обработки и потокового процессора на основе SQL. Streaming SQL — наиболее используемый и удобный способ написания потоковых приложений; это дает вам естественное ощущение того, что вы имеете дело с событиями. Пожалуйста, проверьте пример ниже,

Рассмотрим приведенный выше пример потокового приложения, связанного со случаем использования в здравоохранении, где события чтения глюкозы принимаются через источник HTTP и отображаются в поток под названием «GlucoseReadingStream». Написан запрос для определения возникновения аномальных событий с течением времени; такие выявленные аномальные события помещаются в поток «AbnormalGlucoseReadingStream». Эти события отправляются в виде предупреждений по электронной почте соответствующим органам через приемник электронной почты. Если вы проверите запрос, вы сможете понять, что есть определенное окно, которое накапливает события в памяти в течение некоторого времени (15 минут) для выявления аномальных показаний глюкозы.

Облачная нативность

Облачная нативность стала одним из неизбежных требований в мире корпоративных приложений. Как поясняется в обзоре, организации ищут облачные технологии и приложения, обеспечивающие отказоустойчивость, быстроту реагирования и масштабируемость. Kubernetes играет важную роль в достижении облачной нативности, и различные технологии объединяются вокруг Kubernetes для создания облачных приложений; CNCF [8] создан для того, чтобы модерировать его. Микросервисы — это отправная точка перехода к облачным технологиям и множество приложений; особенно приложения без сохранения состояния прошли многообещающие мили в этом. Приложения Stream Processing настолько новы для пути Cloud-Native, что вокруг него не произошло ничего многообещающего; это сохраняется, потому что существующие потоковые процессоры не предназначены для использования в облаке или в дружественной манере. Ниже приведены некоторые из областей, которые блокируют перенос существующих потоковых процессоров в облако.

  • Большинство существующих потоковых процессоров тяжелые и построены на основе громоздких монолитных технологий.
  • Трафик между узлами высок
  • На основе архитектуры ведущий-ведомый
  • Потоковые приложения сохраняют состояние
  • Невозможно масштабировать узлы независимо

Как указывалось выше, некоторые конструктивные/архитектурные факторы существующих потоковых процессоров не подходят для облачных вычислений и препятствуют переходу в облако. Затем потоковые процессоры должны иметь архитектуру, поддерживающую облачное развертывание. Но природа потоковых приложений с отслеживанием состояния неизбежна в контексте потоковой обработки, поэтому важно инвестировать время/энергию для выполнения этих требований в облачных средах, таких как Kubernetes.

Почему Сиддхи?

Siddhi Stream Processor предназначен для создания приложений потоковой обработки и запуска их в облаке. Он построен на основе библиотеки потоковой обработки Siddhi, которая является легкой, может загружаться в течение нескольких секунд и способна обрабатывать более 100 000 событий в секунду. Благодаря микроприроде архитектуры Siddhi ее можно развертывать в виде контейнеров. Siddhi предоставляет встроенную поддержку для развертывания потокового приложения в Kubernetes с оператором Siddhi K8s. Шаблоны развертывания Siddhi Kubernetes основаны на функциях, предоставляемых Kubernetes, и других облачных технологиях, таких как NATS и Prometheus.

Шаблоны развертывания Siddhi не основаны на архитектуре «ведущий-ведомый», и между узлами отсутствует трафик, поэтому развертывание на основе контейнеров становится простым и приводит к изначальному развертыванию Siddhi в Kubernetes. В Kubernetes Siddhi поддерживает запуск приложений потоковой обработки с отслеживанием состояния, используя систему обмена сообщениями, такую ​​как NATS, и сохраняемость моментальных снимков состояния с монтированием тома.

Теперь давайте рассмотрим пример приложения Siddhi, которое обсуждалось ранее. Специальное приложение Siddhi используется для выявления аномальных ситуаций у пациентов, а также выполняет некоторую обработку событий с отслеживанием состояния для выявления таких аномальных событий. Если мы собираемся переместить такие приложения потоковой обработки в облако, мы должны учитывать высокую доступность развертывания, поскольку оно обрабатывает конфиденциальные данные.

Siddhi обеспечивает встроенную поддержку для развертывания таких потоковых приложений с отслеживанием состояния с высокой доступностью. Ниже приведено определение пользовательского ресурса Kubernetes (CRD), которое можно использовать для развертывания приложения обработки потоков с отслеживанием состояния в Kubernetes.

Выше CRD создает развертывание, показанное на изображении ниже, в среде Kubernetes. Как видите, потоковое приложение Siddhi разделено на два дочерних приложения; первое дочернее приложение предоставляет конечную точку HTTP для использования событий, связанных с показаниями глюкозы, и эти события передаются в систему обмена сообщениями NATS. Второе дочернее приложение использует события из системы обмена сообщениями NATS, продолжает обработку в соответствии с определенным запросом и отправляет оповещения по электронной почте. Следуя этому подходу, развертывание позволяет избежать потери событий и обеспечивает высокую доступность. Подробные сведения об этом см. в руководстве по распределенному развертыванию Siddhi Kubernetes [9].

[Статья по теме: Почему Value-Stream-As-A-Service может стать следующим важным событием в вашем бизнесе]

Вывод

Siddhi-io — это проект с открытым исходным кодом, поддерживаемый WSO2 Inc. Пожалуйста, ознакомьтесь с исходным кодом проекта в [10], попробуйте [11] и оставьте свой отзыв. Вы также можете обратиться через канал сообщества [12] и поделиться своими идеями или прояснить свои вопросы и сомнения. Вы можете попробовать шаблоны облачного развертывания Siddhi в Katakoda [13].

[1]https://en.wikipedia.org/wiki/Sinhala_language

[2] http://eagle.apache.org/docs/

[3] https://github.com/apache/bahir-flink

[4] https://www.youtube.com/watch?v=nncxYGD6m7E

[5] https://doc.punchplatform.com/4.0.2/src/doc/03_USER_GUIDE/Cep.html?highlight=siddhi

[6]https://www.forrester.com/report/The+Forrester+Wave+Streaming+Analytics+Q3+2017/-/E-RES136545

[7]https://siddhi.io/en/v5.1/docs/query-guide/

[8]https://www.cncf.io/

[9]https://siddhi.io/en/v5.1/docs/siddhi-as-a-kubernetes-microservice/#deploy-and-run-siddhi-app-in- распределенный режим

[10]https://github.com/siddhi-io/siddhi

[11]https://siddhi.io/en/v5.1/download/

[12]https://siddhi.io/community/

[13]https://www.katacoda.com/siddhi/courses/siddhi-deployment

Исходное сообщение здесь.

Читайте другие статьи по науке о данных на OpenDataScience.com, включая учебные пособия и руководства от начального до продвинутого уровня! Подпишитесь на нашу еженедельную рассылку здесь и получайте последние новости каждый четверг.