Реактивные системы и потоки данных
Реактивная коммуникация
Что такое реактивная коммуникация?
Реактивная система — это когда программа не ждёт, когда её попросят, а сама реагирует на события по мере их поступления.
Ключевое слово - реактивно, то есть, сразу. Вы сидите с другом в комнате, друг говорит и вы сразу слышите, не нужно спрашивать.
В реактивном типе постоянный канал открыт, а данные текут туда-обратно сами. Например, в чатах, биржевых котировках, видеозвонках.
Когда вы печатаете сообщение в Telegram, и отправляете:
- открывается постоянный канал связи (WebSocket), между твоим телефоном и сервером Telegram;
- сервер сразу видит сообщение;
- сервер тут же отправляет его собеседнику;
- собеседник видит сообщение мгновенно, через доли секунды.
Когда данные текут сплошным потоком, например, 1000 событий в секунду, их надо как-то обрабатывать на лету. Для этого используют потоковые операторы:
- Map (преобразование);
- Filter (фильтрация);
- Reduce (агрегация);
- FlatMap (разворачивание).
Реактивный подход, например, используется в World of Warcraft. Все действия игроков передаются мгновенно.
Google Docs, кстати - вы печатаете, а другой человек видит каждую букву.
Реактивность не подойдёт, если:
- событий мало (раз в минуту);
- ответ должен быть точным и строгим;
- команда не знает реактивное программирование;
- система и так работает быстро.
Как работает реактивная коммуникация?
Реактивные взаимодействия фокусируются на обмене событиями в режиме реального времени. Системы реагируют на события по мере их возникновения, обеспечивая непрерывный поток данных.
Транспорт:
- WebSockets
- SSE
- Kafka Streams
- MQTT
WebSockets является самым распространённым представителем реактивной коммуникации, ведь устанавливается двусторонний канал связи между клиентом и сервером, который позволяет обмениваться данными в реальном времени. Это протокол для двусторонней связи между клиентом и сервером через единственный постоянный канал. После установления соединения данные передаются без дополнительных HTTP-заголовков.
Server-Sent Events (SSE) предполагает, что сервер отправляет обновления клиенту через однонаправленный канал, это протокол для однонаправленной передачи данных от сервера к клиенту через HTTP. Сервер отправляет данные клиенту, но обратная связь невозможна. Если соединение разрывается, клиент автоматически переподключается. Пример - трансляция обновлений и уведомления в реальном времени.
Event Streaming — это потоковые платформы, такие как Apache Kafka, позволяют системам подписываться на события и реагировать на них. Потоковые операторы — это инструменты для обработки потоков данных в реальном времени. Они позволяют выполнять преобразования, фильтрацию и агрегацию данных. Примеры потоковых операторов:
- Map - преобразует каждый элемент потока. Пример - увеличить все числа в потоке на 1:
stream.map(x => x + 1);
- Filter - отбирает только те элементы, кторые удовлетворяют условию. Пример - оставить только положительные числа:
stream.filter(x => x > 0);
- Reduce - агрегирует данные в один результат. Пример - подсчитать сумму всех чисел в потоке:
stream.reduce((acc, x) => acc + x, 0);
- FlatMap - преобразует каждый элемент в несколько элементов. Пример - разбить строку на слова:
stream.flatMap(sentence => sentence.split(' '));
Потоковые операторы в интеграции используются как раз в Apache Kafka Streams. На практике это обработка событий в реальном времени (например, подсчёт количества кликов пользователей).
Kafta и MQTT - не только асинхронные протоколы, но и реактивные.
Реактивные системы обеспечивают мгновенный обмен данными, и они подходят для работы с большим количеством событий и пользователей. Такое можно встретить в чатах, онлайн-играх, биржевых платформах, системах мониторинга.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Интеграция - это когда две программы умеют разговаривать друг с другом и делать общее дело. Выбор модели взаимодействия определяет архитектурные свойства системы — отзывчивость, устойчивость к сбоям, сложность отладки и масштабируемость. Интеграционные потоки часто визуализируются в виде диаграмм последовательностей (sequence diagrams) или BPMN-схем. В промышленных платформах (например, BPMSoft, ELMA365, Apache NiFi) такие потоки… Что такое интеграционная авторизация, API-ключи и как с этим работать. В распределённых системах границы стираются. Saga-паттерн, например, моделирует долгую транзакцию через цепочку локальных транзакций и компенсирующих действий. Каждый шаг Saga — это отдельная… В корпоративной среде RPC лег в основу таких технологий, как — CORBA (Common Object Request Broker Architecture) — платформенно-независимый стандарт от OMG, DCOM (Distributed Component Object Model)… Веб-сервис - это программа, которая живёт на сервере и отвечает на запросы других программ через интернет. Мы её не видим (нет никакой кнопки или картинки), но наше приложение с ней разговаривает. Любая информационная система, будь то база данных, веб-сервис, операционная система или программный модуль, существует не в изоляции. Её предназначение — реагировать на внешние и внутренние стимулы,… REST — это стиль, а не строгий протокол, может быть реализован на любом языке программирования, легко масштабируется, хорошо документируется. Пути могут содержать — параметры пути - /users/123, параметры строки запроса (или просто параметры запроса) - ?sort=datelimit=10 Мы уже изучали асинхронность, поэтому можем уже понять, что асинхронная коммуникация — это способ взаимодействия, при котором отправитель не ждёт немедленного ответа от получателя. Это особенно важно… Брокер сообщений — это программное обеспечение или система, которая управляет обменом данными между приложениями, сервисами или системами. Некоторые считают брокеры сообщений как архитектурные…Интеграция
Типы взаимодействия между системами
Интеграционные потоки данных
Авторизация в интеграционных сценариях
Управление сессиями в распределённых системах
История развития интеграционных технологий
Веб-сервисы
Модель запрос-ответ в сетевом взаимодействии
API - интерфейсы прикладного программирования
HTTP как основа веб-интеграций
Асинхронная коммуникация между сервисами
Брокеры сообщений