52 lines
6.6 KiB
Markdown
52 lines
6.6 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
- event-driven
|
|||
|
- событийно-ориентированную архитектуру
|
|||
|
- событийно-ориентированному подходу
|
|||
|
- Событийно-ориентированная архитектура
|
|||
|
- событийную архитектуру
|
|||
|
- Событийная архитектура
|
|||
|
tags:
|
|||
|
- maturity/🌱
|
|||
|
date:
|
|||
|
- - 2024-03-19
|
|||
|
---
|
|||
|
Событийно-ориентированная архитектура — это [[Архитектурный паттерн|архитектурный подход]], при котором взаимодействие между компонентами системы строится вокруг обмена и обработки событий. Вместо традиционного подхода, где компоненты напрямую вызывают методы или функции друг друга, в событийно-ориентированной архитектуре компоненты реагируют на события, которые создаются внутри системы или поступают из внешних источников.
|
|||
|
|
|||
|
В этой архитектуре основной фокус направлен на поток событий и их обработку, что позволяет системам быть более гибкими, асинхронными и хорошо масштабируемыми. События могут представлять собой любые значимые изменения состояния или действия: от пользовательских запросов и сообщений сервисов друг другу до сигналов от внешних устройств.
|
|||
|
|
|||
|
**Ключевые элементы событийно-ориентированной архитектуры:**
|
|||
|
1. **События (Events):** Представляют собой факты или изменения состояния, которые происходят в системе. Например, поступление сообщения в [[../../../../_inbox/00 Kafka|Kafka]], нажатие кнопки в пользовательском интерфейсе или обновление данных в хранилище.
|
|||
|
2. **Обработчики событий (Event Handlers):** Компоненты или сервисы, которые "подписываются" на определённые типы событий и выполняют определённые действия в ответ на их возникновение. Обработчиком может быть микросервис, вызов функции или запуск определённой логики в реакцию на сигнал.
|
|||
|
3. **Цикл обработки событий (Event Loop) или Механизм распределения событий:** Центральный элемент, отвечающий за получение событий, их маршрутизацию и передачу нужным обработчикам. В распределённых системах его роль часто выполняет [[брокер сообщений]] или [[../../../../_inbox/Enterprise Service Bus|шина данных]].
|
|||
|
4. **Очередь событий (Event Queue):** Средство для буферизации и упорядочивания событий при высокой нагрузке или одновременном возникновении большого числа сигналов. Очередь обеспечивает последовательную, контролируемую обработку и повышает надёжность системы.
|
|||
|
|
|||
|
**Какие задачи хорошо решает событийно-ориентированная архитектура:**
|
|||
|
- Ситуации, когда мгновенный ответ не критичен, но важна асинхронная и надёжная обработка. Например, асинхронная загрузка, парсинг и последующая обработка крупного XML-файла или событий из внешних систем.
|
|||
|
- Сценарии, где требуется легко масштабировать отдельные компоненты, реагирующие на поток входящих данных или сигналов.
|
|||
|
|
|||
|
**Основные компоненты архитектуры:**
|
|||
|
- [[Брокер сообщений]], выступающий в роли центрального канала обмена событиями.
|
|||
|
- Слабо [[Связанность|связанные]] сервисы и микросервисы, которые подписываются на события и обрабатывают их по мере поступления.
|
|||
|
|
|||
|
**Преимущества:**
|
|||
|
- Изоляция компонентов: каждый сервис может развиваться и масштабироваться независимо от других.
|
|||
|
- Простота развёртывания и интеграции новых сервисов за счёт слабой [[Связность|связности]].
|
|||
|
- Высокая производительность и масштабируемость: возможность обработки большого количества асинхронных операций в параллель.
|
|||
|
- Лёгкая адаптация под изменяющиеся потребности и нагрузки.
|
|||
|
|
|||
|
**Недостатки:**
|
|||
|
- Сложность тестирования, поскольку трудно контролировать и предсказать порядок возникновения и обработки событий.
|
|||
|
- Повышенная сложность разработки и отладки из-за асинхронной природы взаимодействий между компонентами.
|
|||
|
***
|
|||
|
## Мета информация
|
|||
|
**Область**:: [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]
|
|||
|
**Родитель**:: [[Архитектурный паттерн]]
|
|||
|
**Источник**::
|
|||
|
**Автор**::
|
|||
|
**Создана**:: [[2204-03-19]]
|
|||
|
### Дополнительные материалы
|
|||
|
-
|
|||
|
### Дочерние заметки
|
|||
|
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|