Разработка трубопроводов обработки данных в реальном времени с использованием технологий без серверов

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

Что такое бессерверные технологии?

Бессерверные вычисления — это модель облачного исполнения, где облачный провайдер динамически управляет распределением и предоставлением серверов. Разработчики пишут и развертывают код в виде функций или контейнеров, а провайдер обрабатывает масштабирование, патчи и доступность. Термин «безсерверный» не означает, что серверы отсутствуют; скорее, управление сервером абстрагировано. Крупные провайдеры, такие как AWS Lambda, Azure Functions и Google Cloud Functions являются наиболее распространенными вычислительными службами. Они выполняют код в ответ на события — например, HTTP-запрос, новый файл в хранилище или сообщение, поступающее в очередь. Биллинг основан на продолжительности выполнения и потреблении ресурсов, а не на нерабочем потенциале. Это делает бессерверный особенно привлекательным для переменных рабочих нагрузок и обработки данных в режиме реального времени, где объем данных может непредсказуемо увеличиваться.

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

Ключевые компоненты трубопроводов данных в реальном времени

Трубопровод данных в реальном времени представляет собой непрерывный поток, в котором данные поступают, обрабатываются, хранятся и действуют в течение нескольких секунд или миллисекунд. Основные строительные блоки остаются согласованными на облачных платформах:

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

Архитектурные шаблоны для бессерверных трубопроводов реального времени

Хотя строительные блоки являются общими, выбранная вами архитектура зависит от характера данных и требуемых гарантий. Доминируют три шаблона:

Вентилятор с очередями сообщений

События достигают одной точки приема (например, концентратора событий или потока) и затем раздуваются до нескольких бессерверных функций или стоков хранения. Этот шаблон идеален, когда одно и то же сырое событие должно вызывать несколько независимых действий - например, обновление панели мониторинга в реальном времени, запись в холодное хранилище и отправка оповещения. Использование отдельных функций Lambda или функций Azure, которые каждый подписывается на один и тот же поток или очередь, позволяет независимое масштабирование и избежать связи. Недостатком является потенциальная дублирующая обработка или упорядочение сложностей, если функции не являются идемпотентными.

Цепная обработка с шагами функций

Некоторые трубопроводы требуют последовательных этапов обработки, где выход одной функции подается в следующую. Вместо того, чтобы организовывать эти вызовы вручную с помощью кода, сервисные оркестрторы, такие как AWS Step Functions, Azure Logic Apps или Google Cloud Workflows, координируют последовательность бессерверных функций. Это полезно для ETL-подобных преобразований, где данные должны быть проверены, обогащены, а затем агрегированы. Оркестр управляет повторными запросами, обработкой ошибок и параллельными ветвями, упрощая общую логику трубопровода. Задержка в реальном времени выше, чем прямое вызов функции к функции, но компромисс лучше наблюдаемость и устойчивость.

Потоковая обработка с использованием Stateful Compute

Для случаев использования, которые включают в себя оконные агрегаты (например, подсчет кликов в минуту) или сложную обработку событий (совпадение шаблонов между событиями), функции без состояния недостаточны. Двигатели обработки потоков без сервера, такие как Apache Flink на Kinesis Data Analytics или Google Dataflow, обрабатывают состояние, временные окна и точно один раз семантику. Эти службы работают без сервера — вы определяете логику обработки (SQL или Java / Python) и работники автомасштаба платформы. Этот шаблон является самым мощным для аналитики в реальном времени, но требует тщательного управления размером состояния и контрольных точек, чтобы избежать затрат.

Строительство трубопровода: пример AWS

Чтобы обосновать концепции, рассмотрим конкретный сценарий: прием данных веб-потока кликов, обработка их для подсчета просмотров страниц по URL в одноминутных окнах и хранение результатов для панели мониторинга в режиме реального времени. Используя полностью бессерверные сервисы AWS:

  1. Поток данных: Поток данных Kinesis с двумя осколками (масштабами по мере необходимости). Каждый осколок может проглотить 1 МБ/с или 1000 записей/с. Производители — такие как веб-приложение или журналирование CloudFront — отправляют события JSON в поток.
  2. Обработка данных: Функция Lambda запускается потоком Kinesis (с использованием отображения источника событий). Функция считывает партии записей, анализирует JSON и подсчитывает поле «url». Однако функции Lambda не имеют состояния, и каждый вызов обрабатывает микро-пакет. Для выполнения оконного подсчета можно записать счета в таблицу DynamoDB с TTL, затем использовать другую Lambda для агрегирования. Альтернативно, использовать Kinesis Data Analytics для Flink с приложением SQL, которое запускает «SELECT url, COUNT(*) FROM my stream GROUP BY url, TUMBLE(event time, INTERVAL '1' MINUTE)». Приложение Flink выводит результаты в поток вывода Kinesis Data Analytics.
  3. Хранение: Выходной поток запускает другую функцию Lambda, которая записывает агрегированные подсчеты (URL, count, время окончания окна) в DynamoDB с TTL, скажем, 24 часа. Одновременно сырые события могут быть архивированы в S3 с использованием Kinesis Firehose для последующего анализа.
  4. Визуализация: Amazon QuickSight подключается к DynamoDB через Athena (с помощью разъема Athena DynamoDB) для создания панели инструментов в реальном времени, которая обновляется каждую минуту. Альтернативно, используйте пользовательское приложение с API Serverless WebSocket для продвижения обновлений для клиентов браузера.

Весь этот трубопровод не использует экземпляры EC2, не имеет ручного масштабирования и несет расходы только при потоках данных. Функции Lambda, пропускная способность чтения / записи DynamoDB и часы Kinesis являются основными драйверами затрат. Мониторинг обрабатывается приборными панелями CloudWatch и сигнализациями о возрасте потока (millisBehindLatest) для обнаружения замедлений.

Преимущества использования бессерверных трубопроводов в реальном времени

Проблемы и соображения

Бессерверные трубопроводы в реальном времени являются мощными, но создают конкретные проблемы, которые архитекторы должны решать:

Стратегии оптимизации затрат

Бессерверные модели ценообразования требуют тщательного проектирования, чтобы избежать сюрпризов:

Рассмотрение вопросов безопасности

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

Реальные случаи использования

Бессерверные трубопроводы реального времени развернуты в различных отраслях промышленности:

Внешние ресурсы

Для более глубоких погружений обратитесь к этим официальным документам и руководствам:

Заключение

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