Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: event-driven, asynchronous, message broker, pub/sub, event loop

Что такое event-driven архитектура?

Вопрос проверяет понимание архитектурного стиля, основанного на событиях, и его применение в разработке асинхронных, масштабируемых систем.

Короткий ответ

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

Длинный ответ

Event-driven архитектура (EDA) — это парадигма проектирования программных систем, в которой поток выполнения управляется событиями. Вместо традиционного последовательного выполнения кода, система реагирует на события, которые могут происходить в произвольные моменты времени. Это делает архитектуру идеальной для асинхронных операций, где задачи выполняются независимо, не блокируя основной поток.

Ключевые компоненты

В EDA обычно выделяют несколько основных элементов:

  • Event Producer (Источник событий): генерирует события, например, пользовательский клик или сообщение от датчика.
  • Event Consumer (Потребитель событий): подписывается на события и обрабатывает их, выполняя определённую логику.
  • Event Channel (Канал событий): механизм передачи событий от продюсера к потребителю, часто через брокер сообщений.
  • Event Bus или Message Broker: центральный компонент, который маршрутизирует события, например, RabbitMQ, Kafka или Redis Pub/Sub.

Как и где применяется

Event-driven архитектура широко используется в областях, требующих высокой масштабируемости и отзывчивости:

  • Веб-приложения: обработка HTTP-запросов в Node.js с использованием event loop.
  • Микросервисы: обмен данными между сервисами через события, что уменьшает связность.
  • IoT системы: обработка потоков данных с множества устройств в реальном времени.
  • UI/UX: реакция на действия пользователя в интерфейсах, например, в браузерах или настольных приложениях.

Пример кода на Node.js

Ниже приведён простой пример использования EventEmitter в Node.js для реализации event-driven подхода:

const EventEmitter = require('events');

// Создаём экземпляр EventEmitter
class OrderService extends EventEmitter {
  placeOrder(order) {
    console.log(`Order placed: ${order.id}`);
    // Генерируем событие 'orderPlaced'
    this.emit('orderPlaced', order);
  }
}

const orderService = new OrderService();

// Подписываемся на событие 'orderPlaced'
orderService.on('orderPlaced', (order) => {
  console.log(`Processing payment for order: ${order.id}`);
  // Здесь может быть логика оплаты
});

orderService.on('orderPlaced', (order) => {
  console.log(`Sending confirmation email for order: ${order.id}`);
  // Здесь может быть отправка email
});

// Имитируем размещение заказа
orderService.placeOrder({ id: 123, item: 'Laptop', amount: 999 });

В этом примере OrderService генерирует событие 'orderPlaced', на которое реагируют несколько обработчиков, выполняющих разные задачи асинхронно. Это демонстрирует слабую связность: OrderService не знает о деталях обработки платежа или отправки email.

Вывод

Event-driven архитектура особенно полезна при построении высоконагруженных, распределённых систем, где требуется асинхронная обработка и масштабируемость. Её стоит применять, когда компоненты системы должны взаимодействовать без жёсткой зависимости, например, в микросервисных приложениях, реальном времени или сложных пользовательских интерфейсах.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#event-driven

#asynchronous

#message broker

#pub/sub

#event loop

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.