Тун Шве, вице-президент по работе с данными компании Quix, рассказывает на портале The New Stack о том, как бессерверные вычисления и потоковая передача событий развиваются, сочетаются и набирают популярность в современном технологическом ландшафте.

Сочетание потоковой передачи событий (event streaming) с бессерверными вычислениями (serverless computing) часто позволяет получить экономически эффективное решение для работы с потоковыми данными, которое значительно снижает сложность управления и поддержки инфраструктуры. Такая синергия дает разработчикам возможность больше внимания уделять логике приложения и меньше — базовым операционным проблемам, что ведет к ускорению разработки.

Не так давно бессерверная потоковая передача событий означала использование платформы потоковой передачи событий и движка обработки потоков (управляемого поставщиком или собственными силами), дополненного технологией «функция как сервис» (Function as a Service, FaaS) там, где это необходимо (например, при работе с недолговечными, не имеющими статического характера рабочими нагрузками). Возможно, называть такую систему «бессерверной» слишком щедро, учитывая, что FaaS — единственный бессерверный компонент.

Однако благодаря развитию бессерверных технологий мы больше не полагаемся исключительно на FaaS. Другие альтернативы, такие как бессерверные инструменты «контейнер как сервис» (Container as a Service, CaaS), все чаще используются в качестве основы для сценариев потоковой передачи событий.

Современное состояние бессерверных вычислений

Бессерверные вычисления находятся на восходящей траектории. Согласно отчету Datadog «The State of Serverless» за 2023 г., все основные облачные провайдеры отмечают значительное внедрение бессерверных вычислений: «За последний год внедрение бессерверных вычислений в организациях, работающих в Azure и Google Cloud, выросло на 6 и 7% соответственно, а в AWS рост составил 3%. Более 70% наших клиентов AWS и 60% клиентов Google Cloud в настоящее время используют одно или несколько бессерверных решений, а доля Azure составляет 49%».

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

Принятие бессерверных вычислений также подпитывается появлением разнообразной экосистемы инструментов. Помимо FaaS (таких как AWS Lambda, Microsoft Azure Functions и Google Cloud Functions), бессерверный ландшафт расширился до гораздо более широкого спектра сервисов и возможностей, включая:

  • Платформы бессерверных приложений, например, Netlify и Vercel.
  • Бессерверные базы данных, такие как MongoDB Atlas, FaunaDB и InfluxDB Cloud.
  • Платформы управления бессерверными API, включая AWS API Gateway и Azure API Management.
  • Бессерверные фреймворки, такие как Zappa, Serverless Framework, Claudia.js и Ruby on Jets.
  • Бессерверные CaaS-решения, например, AWS Fargate и Knative.

Бессерверные подходы: FaaS vs. CaaS

Среди альтернатив FaaS быстро растет популярность бессерверного CaaS. В отчете Datadog «The State of Serverless» за 2022 г. Google Cloud Run был назван самым быстрорастущим методом развертывания бессерверных приложений в Google Cloud. В отчете за 2023 г. отмечается, что внедрение бессерверных CaaS продолжает расти среди всех основных облачных провайдеров.

Рост бессерверного CaaS неудивителен, поскольку он обеспечивает бóльшую гибкость и устраняет некоторые недостатки FaaS:

Критерии

FaaS

CaaS

Задержка

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

Запуск контейнера может занять больше времени, чем запуск легкой функции. Однако контейнеры долговечны. Поэтому, запустив контейнер, вы не столкнетесь с проблемами холодного старта. Это приводит к более низким и предсказуемым задержкам в целом.

Состояние

Как правило, без сохранения состояния, что является ограничением для приложений, требующих поведения с учетом состояния (например, оконный интерфейс, агрегация).

CaaS, как правило, поддерживает приложения как с сохранением состояния, так и без оного.

Время выполнения и переносимость

Предложения FaaS часто привязаны к конкретным облачным провайдерам. У каждого провайдера своя среда выполнения и свои ограничения, что может влиять на переносимость FaaS.

Повышенная переносимость благодаря использованию контейнеров. Их можно переносить в разные среды (например, к разным облачным провайдерам или онпремис) с минимальными изменениями, если таковые вообще требуются.

Типы рабочих нагрузок

Непродолжительные, нечастые рабочие нагрузки, управляемые событиями. Средняя пропускная способность.

Длительные, непрерывные рабочие нагрузки. Высокая пропускная способность.

Исполнение

В большинстве решений FaaS каждый экземпляр обрабатывает только один запрос за раз. Это может быть существенным ограничением для приложений с высоким трафиком.

Возможность одновременной обработки нескольких запросов, более эффективное использование ресурсов и высокая производительность для приложений с высоким трафиком.

Эти различия между FaaS и CaaS особенно актуальны в контексте приложений потоковой передачи событий. В целом модель CaaS является более надежным, универсальным и подходящим для обработки высокочастотных потоков данных подходом.

Современное состояние потоковой передачи событий

Потоковая передача событий (или потоковая передача данных) стала неотъемлемой частью современных архитектур, позволяя организациям собирать, обрабатывать, хранить и анализировать данные в режиме реального времени. Согласно отчету Confluent «2023 Data Streaming Report», потоковая передача данных занимает важное место в списке инвестиций в ИТ: «89% респондентов заявили, что инвестиции в потоковую передачу данных важны, а 44% назвали ее главным стратегическим приоритетом».

Исследование Confluent показывает, что внедрение технологий потоковой передачи данных приводит к положительным результатам в бизнесе, таким как повышение эффективности и рентабельности, улучшение реакции на запросы, повышение качества обслуживания клиентов и ускорение принятия оперативных решений.

Организациям, желающим внедрить потоковую передачу данных, есть из чего выбирать. Благодаря своей проверенной надежности, масштабируемости, высокой производительности и богатой экосистеме Apache Kafka обычно первым приходит на ум. Но это не единственный вариант. Среди других заметных платформ потоковой передачи событий — Amazon Kinesis, Google Cloud Pub/Sub, Apache Pulsar и Azure Event Hubs.

Платформы потоковой передачи событий дополняют различные технологии обработки потоков, такие как Apache Flink, Apache Storm, Apache Samza, Apache Beam, Kafka Streams, ksqlDB и Faust, каждая из которых имеет свои сильные стороны. Например, Beam предоставляет единый унифицированный API для работы как с пакетными, так и с потоковыми данными, а ksqlDB упрощает разработку потоковых приложений, которые полагаются только на SQL-запросы.

Потоковая передача событий, несомненно, остается актуальной и продолжает расти. Тем не менее, потоковые данные могут быть сложны в обработке. Большинство доступных сегодня технологий потоковой передачи данных сложны в использовании, а управление потоковой архитектурой своими силами — занятие не для слабонервных и не для тех, у кого тонкий кошелек.

Сочетание бессерверных технологий и потоковой передачи событий

В 2019 г. Нил Эйвери (бывший технолог в офисе технического директора Confluent) опубликовал в корпоративном блоге пост, в котором проанализировал связь между потоковой передачей событий и бессерверными вычислениями. В посте обсуждается, как FaaS сочетается с потоковой передачей событий. Акцент на FaaS вполне оправдан, учитывая, что в то время FaaS был доминирующей формой бессерверных вычислений. Из этого поста можно понять, как FaaS может быть использован в качестве дополнения к потоковой передаче событий, а также его ограничения, такие как холодный старт и непригодность для потоковой обработки с учетом состояния.

Бессерверные функции обеспечивают синергетическую связь с приложениями потоковой передачи событий. Источник: Confluent

Перенесемся в 2023 г. Благодаря последним техническим достижениям, синергия между бессерверной и потоковой обработкой событий становится все более тесной, что выходит далеко за рамки FaaS. Вот некоторые из новых инструментов и тенденций, объединяющих бессерверные вычисления (помимо FaaS) с потоковой обработкой событий:

Бессерверная обработка потоков. Традиционная обработка потоков обычно включает в себя архитектуру с множеством подвижных частей, управляющих распределенной инфраструктурой и использующих сложный механизм обработки потоков. Например, Apache Spark, один из самых популярных движков обработки, печально известен тем, что его сложно развертывать, управлять, настраивать и отлаживать. Реализация надежной, масштабируемой возможности потоковой обработки может занять от нескольких дней до нескольких недель, в зависимости от конкретного сценария использования. Кроме того, вам придется постоянно заниматься мониторингом, обслуживанием и оптимизацией. Возможно, вам даже понадобится специальная команда для решения этих задач. В общем, традиционная потоковая обработка сложна, дорога и отнимает много времени.

Бессерверная обработка потоков, напротив, избавляет от головной боли, связанной с управлением сложной архитектурой и базовой инфраструктурой. Она также более экономична, поскольку вы платите только за используемые ресурсы. Вполне естественно, что стали появляться решения для бессерверной обработки потоков. Одним из примеров является Spark on Google Cloud. Google утверждает, что это первый в отрасли автомасштабируемый бессерверный Spark, который полностью устраняет ручную настройку и инициализацию инфраструктуры.

Выше уже упоминалось, что CaaS становится все более популярным бессерверным подходом. В целом бессерверные CaaS-решения для обработки потоков обладают следующими характеристиками:

  • Предсказуемая низкая задержка с минимальным замедлением при обработке.
  • Высокая пропускная способность (до тысяч или миллионов событий в секунду).
  • Подходят для обработки рабочих нагрузок как без сохранения, так и с сохранением состояния.
  • Подходят как для обработки данных в реальном времени, так и для пакетной обработки.
  • Лучше всего подходят для длительных, интенсивных в вычислительном отношении процессов или процессов с переменной или непредсказуемой рабочей нагрузкой.
  • Способны одновременно выполнять несколько задач по обработке данных (параллелизм).
  • Не требуют создания, обслуживания и масштабирования серверной инфраструктуры.

Bytewax — один из примеров технологии поточной обработки, которая может быть использована в бессерверной модели CaaS. Это библиотека Python с открытым исходным кодом и движок распределенной обработки потоков для построения конвейеров потоковых данных. Среди прочих возможностей, вы можете запускать потоки данных Bytewax с помощью контейнеров, например, на Amazon Elastic Kubernetes Service (EKS) или Amazon Elastic Container Service (ECS). Затем вы можете развернуть эти контейнеры на AWS Fargate, бессерверном вычислительном движке Amazon. Таким образом, вы получаете возможность бессерверной обработки потоков без необходимости предоставлять, настраивать и масштабировать кластеры серверов для контейнеров.

Quix Streams — еще одна Open Source-библиотека потоковой обработки на Python, которая абстрагируется от сложностей разработки потоковых приложений и обработки данных в реальном времени. Будучи нативно-облачной, она может быть развернута на любом кластере Kubernetes. Ее также можно использовать в паре с Quix Cloud, которая относится к категории бессерверных CaaS. Под капотом Quix Cloud находится полностью управляемая платформа, использующая Kafka, Docker, Git, контейнерные микросервисы и бессерверную вычислительную среду для размещения потоковых приложений. Цель состоит в том, чтобы дать разработчикам возможность создавать, развертывать и отслеживать приложения, устраняя при этом операционные издержки, связанные с настройкой, управлением и масштабированием контейнеров и инфраструктуры.

Например, компания CKDelta, занимающаяся разработкой ПО для ИИ, использует возможности Quix по бессерверной обработке потоков. Ее приложение потоковой обработки событий с помощью машинного обучения обрабатывает 40 Гб данных Wi-Fi в день со 180 подземных станций метро в Сингапуре. В частности, приложение непрерывно собирает данные с высокой производительностью и выполняет предиктивную аналитику для прогнозирования плотности потока пассажиров на станциях.

Бессерверные брокеры сообщений

Помимо бессерверной обработки потоков, появляются бессерверные брокеры сообщений. Одним из примеров является Amazon MSK Serverless, новый тип кластера для Amazon MSK. В то время как обычный MSK требует ручной настройки и управления кластерами Kafka и взимает плату за предоставленные ресурсы (независимо от использования), MSK Serverless автоматически управляет и масштабирует инфраструктуру Kafka в зависимости от спроса, взимая плату за фактическое использование.

Apache EventMesh — еще один пример бессерверного промежуточного ПО на основе событий. Зародившись в WeBank, EventMesh сейчас является проектом верхнего уровня в Apache Software Foundation. Несмотря на то, что EventMesh все еще находится на начальном этапе, на GitHub у него уже почти 1500 звезд и почти 600 форков, что является обнадеживающим признаком. Будет интересно посмотреть, как будет развиваться EventMesh и появятся ли подобные проекты.

Заключение

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

Учитывая, насколько сложно работать с потоками событий и что бессерверные вычисления значительно упрощают процесс извлечения ценности из потоковых данных, нет ничего удивительного в появлении бессерверных решений для потоковой обработки событий (и в их внедрении организациями). Такие инструменты, как правило, имеют дружественную модель ценообразования (вы платите только за то, что используете) и позволяют компаниям собирать и обрабатывать потоки данных в режиме реального времени, не задумываясь о базовой инфраструктуре и планировании мощностей.

Сегодня растущей тенденцией является сочетание бессерверного CaaS и потоковой обработки. Бессерверный CaaS объединяет масштабируемость и гибкость контейнеризации с простотой и экономичностью бессерверных архитектур. Это прочная основа для работы с динамичными, объемными и высокочастотными потоками данных, поэтому я с нетерпением жду появления новых претендентов в этой области.