digital-garden/dev/architecture/Событийно-ориентированная архитектура.md
Struchkov Mark ffd249fc10
All checks were successful
continuous-integration/drone/push Build is passing
Обновление
2024-12-11 20:30:18 +03:00

52 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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) -->