FinCodeCow · Статья

Среда формирует архитектуру

Почему традиционные подходы уступают место событийно-управляемым микросервисам — и как это меняет не только код, но и структуру IT-организаций

Маршалл Маклюэн утверждал: «Среда — это и есть сообщение». Переложенная на язык IT, эта мысль означает: инструменты, которыми мы строим системы, диктуют то, как мы мыслим, как организованы команды и как бизнес решает задачи. Переход от мейнфреймов к реляционным базам, затем к облакам и Big Data — каждый раз менял правила игры. Сегодня на сцену выходит событийно-управляемая архитектура (Event-Driven Architecture, EDA), и она несёт тектонический сдвиг в парадигме обмена данными.

Gartner в отчёте «Top Strategic Technology Trends» (2022–2023) назвал EDA стратегическим трендом, прогнозируя, что к 2026 году более 50% крупных организаций будут использовать событийно-управляемые архитектуры как основу для своих цифровых продуктов. Прогноз во многом сбылся: Netflix, Uber, Slack и Goldman Sachs уже выстраивают ключевые процессы на потоках событий, обрабатывая миллиарды сообщений в день.

• • •

IЧто на самом деле такое событийно-управляемый микросервис?

Сначала — определение, которого часто не хватает. Событийно-управляемый микросервис (Event-Driven Microservice, EDM) — это автономный сервис, который: (1) владеет собственной базой данных и бизнес-логикой; (2) реагирует на события из потоков, а не на синхронные вызовы; (3) публикует новые события как результат своей работы; (4) не знает и не должен знать, кто и как потребляет его события.

Многие путают EDA с обычными очередями сообщений. Ключевое отличие — в судьбе самого сообщения. В классических очередях (например, RabbitMQ в режиме point-to-point) сообщение уничтожается после того, как потребитель его прочитал и подтвердил обработку. В событийно-управляемых микросервисах событие — это неизменяемый факт, который навсегда сохраняется в потоке событий (event stream).

Главное правило

События не удаляются при потреблении. Они остаются в потоке, становясь «единственным источником истины» (Single Source of Truth), который любой сервис может прочитать столько раз, сколько ему необходимо. Это превращает поток событий в систему контроля версий для данных: можно «отмотать» состояние назад, проиграть события заново, восстановить повреждённые проекции.

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

• • •

IIEvent Sourcing: когда журнал становится базой

Естественное развитие идеи неизменяемых событий — паттерн Event Sourcing. Вместо того чтобы хранить текущее состояние сущности («остаток на счёте — 5000»), система хранит последовательность событий, которые к этому состоянию привели: «Счёт открыт», «Депозит 3000», «Снятие 500», «Депозит 2500».

Текущее состояние вычисляется (материализуется) путём повторного проигрывания событий. Это даёт три ключевых преимущества:

  1. Аудит по умолчанию: журнал событий — это полный, непрерывный протокол всего, что происходило в системе. Отдельные таблицы аудита не нужны.
  2. Восстановление после сбоев: если проекция данных повредилась (например, из-за бага в коде), её можно пересоздать из потока событий с нуля.
  3. Temporal queries: можно узнать состояние системы на любой момент времени, просто проиграв события до нужной отметки.

Event Sourcing часто дополняется паттерном CQRS (Command Query Responsibility Segregation), где запись и чтение разделены: команды изменяют состояние через события, а запросы читают из оптимизированных проекций (read models), построенных из тех же событий.

• • •

IIIЗакон Конвея и ловушка технических границ

Закон Конвея гласит, что архитектура системы неизбежно повторяет структуру коммуникаций в организации. Мелвин Конвей в 1968 году сформулировал это так: любая организация, проектирующая систему, воспроизведёт в ней свою коммуникационную структуру. Традиционный подход к разделению систем часто ведёт к созданию технических микросервисов (отдельный сервис для базы данных, отдельный для API). Это создаёт трансграничное владение: чтобы внедрить одну бизнес-фичу, нужно координировать работу трёх разных команд.

Событийно-управляемый подход опирается на предметно-ориентированное проектирование (Domain-Driven Design, DDD). Границы сервисов проводятся не по технологическим слоям, а по ограниченным контекстам (Bounded Contexts) — зонам бизнес-ответственности. Понятие «клиент» в контексте продаж (человек с историей сделок) и в контексте биллинга (юридическое лицо с платёжными реквизитами) — это две разные модели, и DDD запрещает пытаться слить их в одну.

Команда полностью владеет своим кодом, своей базой данных и своими событиями. Это обеспечивает сильное зацепление (high cohesion) внутри сервиса и слабую связанность (loose coupling) с внешним миром.

• • •

IVОбратный манёвр Конвея: сначала команды, потом архитектура

Закон Конвея работает в обе стороны. Если структура команд отражается в архитектуре, то можно осознанно перестроить команды так, чтобы получить желаемую архитектуру — это называют Reverse Conway Maneuver. Цепочка выравнивания выглядит так:

  1. Бизнес-стратегия — определяются зоны создания ценности (value streams).
  2. DDD — каждый value stream разбивается на bounded contexts с явными границами и единым языком.
  3. Team Topologies — каждый bounded context получает команду-владельца, которая отвечает за код, данные и метрики.
  4. Архитектура — микросервисы естественным образом формируются вокруг контекстов, а события становятся языком общения между ними.

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

• • •

VСинхронный «Запрос-Ответ»: почему проигрывает внутри компании

Синхронные микросервисы (REST/gRPC-вызовы) никуда не исчезнут — они идеальны для взаимодействия с UI, аутентификации, запросов к данным в реальном времени и работы со сторонними платёжными шлюзами. Но попытка построить всю внутреннюю логику предприятия на синхронных вызовах ведёт к появлению распределённых монолитов.

Жёсткая временная связность

Отправитель и получатель должны быть доступны в одну и ту же миллисекунду. Сетевой сбой или пауза сборщика мусора — и операция падает по таймауту.

Каскадные отказы

Если один сервис в цепочке упал, падает вся бизнес-операция. Радиус поражения максимален.

Накопление задержки

Общая задержка равна сумме всех сетевых переходов и времени обработки на каждом узле. Чем длиннее цепочка, тем хуже UX.

Зависимое масштабирование

Чтобы масштабировать сервис А, нужно быть уверенным, что сервисы Б, В и Г тоже выдержат нагрузку.

Ад версионности API

Изменение контракта данных требует синхронного обновления всех зависимых команд.

Исчерпание пулов соединений

Заблокированные потоки, ожидающие ответа от downstream-сервисов, истощают пулы и приводят к каскадному падению даже здоровых узлов.

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

Парадигма событий: разделение владения и потребления

Вместо того чтобы позволять сервисам напрямую «лазить» в базы данных друг друга, вводится формализованный слой обмена данными:

  1. Производитель генерирует событие (например, OrderPlaced) и публикует его в канонический поток. Он больше не отвечает за то, кто и как использует эти данные.
  2. Потребитель подписывается на поток, забирает события и сам материализует из них своё собственное состояние (локальную БД или кэш).
  3. Новый сервис может появиться в любой момент, просто начав читать нужные потоки, — и исчезнуть, не ломая работу остальных.

Паттерн Transactional Outbox гарантирует, что запись в базу и публикация события происходят атомарно — в рамках одной транзакции. Это исключает рассинхронизацию между внутренним состоянием сервиса и потоком событий.

• • •

VISaga: распределённые транзакции без боли

В микросервисах, где каждый контекст владеет собственной базой (Database-per-Service), классические распределённые транзакции с двухфазной фиксацией (2PC) в большинстве случаев нежелательны из-за проблем с доступностью и задержками. Стандартом de facto стал паттерн Saga: последовательность локальных транзакций, где каждый шаг обновляет данные внутри одного сервиса и эмитит событие, запускающее следующий шаг.

Если промежуточный шаг завершается ошибкой, Saga выполняет компенсирующие транзакции, которые отменяют предыдущие изменения. Goldman Sachs в 2023 году описал, как их событийная архитектура для торговых платформ балансирует итоговую согласованность (eventual consistency) со строгой финансовой точностью через именно такие компенсирующие механизмы.

Saga бывает двух видов:

Хореография

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

Оркестрация

Есть центральный оркестратор, который командует шагами. Плюс — прозрачность и контроль. Минус — оркестратор становится точкой связанности и потенциальным узким местом.

Важный нюанс, о котором часто забывают: в Saga нет изоляции (ACID-«I» отсутствует). Поэтому приходится применять semantic locks — логические блокировки на уровне домена, которые не дают другим транзакциям нарушить консистентность, пока Saga не завершится. Например, статус заказа «в процессе оплаты» — это semantic lock, который блокирует отмену заказа до завершения шага оплаты.

• • •

VIIИнструменты: что выбрать

Выбор брокера — не религиозный вопрос, а инженерный. Ниже — краткая сравнительная таблица, которая помогает не утонуть в маркетинге вендоров.

Инструмент Модель Когда выбирать Ограничения
Apache Kafka Распределённый лог, pull-модель Потоки событий, Event Sourcing, CQRS, аналитика в реальном времени, миллионы сообщений/сек Сложнее в эксплуатации, не для простых очередей задач
RabbitMQ Брокер сообщений, push-модель Классические очереди задач, point-to-point, RPC, маршрутизация по правилам Сообщение уничтожается после ack — не для Event Sourcing
Apache Pulsar Лог + очереди, multi-tenancy Мультиарендность, геораспределение, гибридные сценарии Меньше экосистема и специалистов, чем у Kafka
NATS / NATS JetStream Лёгкий брокер + стриминг Edge, IoT, микросервисы с низкой задержкой, простые стримы Меньше гарантий и инструментов для тяжёлого Event Sourcing
AWS EventBridge / SNS+SQS Managed event bus / очереди Serverless, AWS-нативные системы, быстрый старт без эксплуатации Vendor lock-in, ограничения на порядок и хранение
EventStoreDB Специализированная event store Чистый Event Sourcing, temporal queries, проекции «из коробки» Узкая специализация, не для общей интеграции

Практическое правило: если вам нужна очередь задач — берите RabbitMQ или SQS. Если вам нужен поток фактов — берите Kafka, Pulsar или EventStoreDB. Смешивать эти роли в одном инструменте — верный путь к distributed big ball of mud.

• • •

VIIIТёмная сторона EDA и когда синхронность всё ещё нужна

Событийно-управляемая архитектура — не серебряная пуля. За гибкость приходится платить:

  1. Сложность отладки: вместо простой HTTP-трассировки нужны распределённые trace ID, dead-letter queues и инструменты вроде OpenTelemetry.
  2. Eventual consistency: данные между сервисами согласуются не мгновенно. Команды должны проектировать UI и бизнес-процессы с учётом этого.
  3. Управление схемами: эволюция контрактов событий (schema evolution) — отдельная инженерная дисциплина. Без schema registry и строгой политики совместимости события быстро превращаются в нечитаемое месиво.
  4. Инфраструктурные затраты: брокеры, observability-пайплайны, schema registries, хранение событий — всё это стоит денег. С ростом throughput расходы растут быстро.
  5. Культурный барьер: EDA требует изменения мышления. Команды, привыкшие к «запрос-ответ», часто скатываются в distributed big ball of mud.

Не всё должно быть асинхронным. Внедрение очередей в задачи, которые по природе требуют немедленного ответа, добавляет случайную сложность без пользы.

Подход Когда использовать
REST / gRPC Аутентификация, immediate lookups, CRUD-операции, UI-взаимодействие, сторонние API
Асинхронные события Побочные эффекты (уведомления, аналитика, индексирование), кросс-контекстные потоки, тяжёлая обработка
Гибрид Рекомендуется для большинства систем: синхронный фасад + асинхронная обработка внутри

Практическое правило: не связывайте более двух синхронных downstream-сервисов в критическом для пользователя пути. Все побочные эффекты (уведомления, аналитика, индексирование) переводите в события.

Метрики: как измерить эффект

Разговоры о «гибкости» бесполезны без цифр. Вот набор метрик, которые стоит отслеживать до и после перехода:

Метрика Что показывает Типичный эффект
Time-to-market Время от идеи до продакшена Сокращение на 30–50% за счёт композиции из потоков
Deployment frequency Как часто команды выкатывают изменения Рост в 2–5 раз за счёт независимости сервисов
MTTR Среднее время восстановления после сбоя Снижение за счёт изоляции отказов
Throughput Сообщений/сек на брокер Линейное масштабирование при правильном партиционировании
Cost per 1M events Стоимость инфраструктуры на миллион событий Растёт с throughput — важный компромисс
• • •

IXСинтез: гибкость как главное конкурентное преимущество

Переход к событийно-управляемым микросервисам — это не просто смена технологии (внедрение Apache Kafka). Это изменение культуры работы с данными. Организация переходит от модели, где данные заперты в недрах монолитов, к модели, где ключевые бизнес-факты свободно текут по потокам событий.

Это даёт бизнесу беспрецедентную гибкость: команды могут быстро создавать новые продукты, «композируя» их из существующих потоков событий, не тратя месяцы на согласование API и синхронизацию баз данных. В современном мире, где скорость реакции на рынок решает всё, именно такая архитектура становится фундаментом для IT-лидеров.

Финальный тезис

EDA — это не конечная станция, а путь. Вы не получите всё правильно с первого раза. Но каждое событие, которое вы публикуете вместо прямого вызова, — это шаг к архитектуре, где среда работает на вас, а не против вас.

Статья основана на анализе открытых источников: Gartner Top Strategic Technology Trends (2022–2023), кейсы Netflix, Uber, Slack, Goldman Sachs, ING Bank, материалы Confluent, Solace, DZone и др.

FinCodeCow · Article

The Medium Shapes the Architecture

Why traditional approaches give way to event-driven microservices — and how this changes not only code but the entire structure of IT organizations

Marshall McLuhan argued: "The medium is the message." Translated into IT, this means: the tools we use to build systems dictate how we think, how teams are organized, and how business solves problems. The shift from mainframes to relational databases, then to cloud computing and Big Data — each time fundamentally changed the rules of the game. Today, Event-Driven Architecture (EDA) takes the stage, bringing a tectonic shift in the paradigm of data exchange.

Gartner, in its "Top Strategic Technology Trends" report (2022–2023), named EDA a strategic trend, predicting that by 2026 more than 50% of large organizations would use event-driven architectures as the foundation for their digital products. The forecast has largely come true: Netflix, Uber, Slack, and Goldman Sachs already build their key processes on event streams, processing billions of messages per day.

• • •

IWhat Is an Event-Driven Microservice?

First, a definition that is often missing. An Event-Driven Microservice (EDM) is an autonomous service that: (1) owns its own database and business logic; (2) reacts to events from streams, not to synchronous calls; (3) publishes new events as the result of its work; (4) does not know and should not know who consumes its events.

Many confuse EDA with ordinary message queues. The key difference lies in the fate of the message itself. In classic queues (e.g., RabbitMQ in point-to-point mode), the message is destroyed after the consumer reads and acknowledges it. In event-driven microservices, an event is an immutable fact that is permanently stored in an event stream.

The Main Rule

Events are not deleted upon consumption. They remain in the stream, becoming the "single source of truth" that any service can read as many times as needed. This turns the event stream into a version control system for data: you can rewind state, replay events, and rebuild damaged projections.

The microservices themselves remain small, autonomous units focused on a specific business task. They consume facts from some streams, apply their logic, and generate new facts in other streams. Each service owns its own data store and does not depend on others' databases directly.

• • •

IIEvent Sourcing: When the Log Becomes the Database

The natural evolution of the immutable events idea is the Event Sourcing pattern. Instead of storing the current state of an entity ("balance — 5000"), the system stores the sequence of events that led to that state: "Account opened," "Deposit 3000," "Withdrawal 500," "Deposit 2500."

The current state is computed (materialized) by replaying events. This gives three key advantages:

  1. Audit by default: the event log is a complete, continuous protocol of everything that happened in the system. Separate audit tables are not needed.
  2. Recovery after failures: if a data projection is damaged (e.g., due to a code bug), it can be rebuilt from the event stream from scratch.
  3. Temporal queries: you can learn the state of the system at any point in time by replaying events up to the desired mark.

Event Sourcing is often complemented by the CQRS pattern (Command Query Responsibility Segregation), where writing and reading are separated: commands change state through events, and queries read from optimized projections (read models) built from the same events.

• • •

IIIConway's Law and the Trap of Technical Boundaries

Conway's Law states that a system's architecture inevitably mirrors the communication structure of the organization. Melvin Conway formulated it in 1968: any organization designing a system will reproduce its communication structure in it. The traditional approach to splitting systems often leads to technical microservices (a separate service for the database, a separate one for the API). This creates cross-boundary ownership: to deliver one business feature, you need to coordinate three different teams.

The event-driven approach relies on Domain-Driven Design (DDD). Service boundaries are drawn not along technological layers but along Bounded Contexts — zones of business responsibility. The concept of "customer" in the sales context (a person with a deal history) and in the billing context (a legal entity with payment details) are two different models, and DDD forbids trying to merge them into one.

The team fully owns its code, its database, and its events. This ensures high cohesion inside the service and loose coupling with the outside world.

• • •

IVReverse Conway Maneuver: Teams First, Architecture Second

Conway's Law works both ways. If team structure is reflected in architecture, you can consciously restructure teams to get the desired architecture — this is called the Reverse Conway Maneuver. The alignment chain looks like this:

  1. Business strategy — value streams are defined.
  2. DDD — each value stream is split into bounded contexts with explicit boundaries and a ubiquitous language.
  3. Team Topologies — each bounded context gets an owning team responsible for code, data, and metrics.
  4. Architecture — microservices naturally form around contexts, and events become the language of communication between them.

Event Storming — a collaborative technique where all participants (from developers to business experts) stick event stickers on a timeline — helps simultaneously discover domain events, context boundaries, and, as a consequence, the natural team structure.

• • •

VWhy Synchronous Request-Response Loses Inside a Company

Synchronous microservices (REST/gRPC calls) will not disappear — they are ideal for UI interaction, authentication, real-time data queries, and third-party payment gateways. But trying to build the entire internal logic of an enterprise on synchronous calls leads to distributed monoliths.

Temporal Coupling

Sender and receiver must be available in the same millisecond. A network failure or a GC pause on the receiver side — and the operation fails by timeout.

Cascading Failures

If one service in the chain falls, the entire business operation falls. The blast radius is maximal.

Latency Accumulation

Total latency equals the sum of all network hops and processing time at each node. The longer the chain, the worse the UX.

Dependent Scaling

To scale service A, you must be sure that services B, C, and D can also handle the load.

API Versioning Hell

Changing the data contract requires synchronous updates from all dependent teams.

Connection Pool Exhaustion

Blocked threads waiting for downstream services exhaust pools and cause cascading failures even in healthy nodes.

Asynchronous event streams remove these limitations. Services scale independently, and failures of one node do not stop the entire pipeline — events simply wait in the stream until the consumer recovers.

The Event Paradigm: Separating Ownership and Consumption

Instead of letting services directly "crawl" into each other's databases, a formalized data exchange layer is introduced:

  1. Producer generates an event (e.g., OrderPlaced) and publishes it to a canonical stream. It is no longer responsible for who uses this data and how.
  2. Consumer subscribes to the stream, takes events, and materializes its own state (local DB or cache).
  3. A new service can appear at any moment by simply reading the needed streams — and disappear without breaking the others.

The Transactional Outbox pattern guarantees that the database write and event publication happen atomically — within a single transaction. This eliminates desynchronization between the service's internal state and the event stream.

• • •

VISaga: Distributed Transactions Without Pain

In microservices where each context owns its own database (Database-per-Service), classic distributed transactions with two-phase commit (2PC) are generally undesirable due to availability and latency issues. The de facto standard is the Saga pattern: a sequence of local transactions where each step updates data within one service and emits an event that triggers the next step.

If an intermediate step fails, the Saga performs compensating transactions that undo previous changes. Goldman Sachs in 2023 described how their event-driven architecture for trading platforms balances eventual consistency with strict financial accuracy through exactly such compensating mechanisms.

Saga comes in two flavors:

Choreography

Each service listens to events and decides what to do next. No central coordinator. Pro — loose coupling. Con — hard to understand the overall flow and debug.

Orchestration

A central orchestrator commands the steps. Pro — transparency and control. Con — the orchestrator becomes a coupling point and potential bottleneck.

An important nuance often forgotten: Saga has no isolation (the "I" in ACID is missing). Therefore, semantic locks are used — logical domain-level locks that prevent other transactions from violating consistency until the Saga completes. For example, the order status "payment in progress" is a semantic lock that blocks order cancellation until the payment step completes.

• • •

VIITools: What to Choose

Choosing a broker is not a religious question but an engineering one. Below is a brief comparison table to help you avoid drowning in vendor marketing.

Tool Model When to Choose Limitations
Apache Kafka Distributed log, pull model Event streams, Event Sourcing, CQRS, real-time analytics, millions of messages/sec Harder to operate, not for simple task queues
RabbitMQ Message broker, push model Classic task queues, point-to-point, RPC, rule-based routing Message is destroyed after ack — not for Event Sourcing
Apache Pulsar Log + queues, multi-tenancy Multi-tenancy, geo-distribution, hybrid scenarios Smaller ecosystem and talent pool than Kafka
NATS / NATS JetStream Lightweight broker + streaming Edge, IoT, low-latency microservices, simple streams Fewer guarantees and tools for heavy Event Sourcing
AWS EventBridge / SNS+SQS Managed event bus / queues Serverless, AWS-native systems, quick start without operations Vendor lock-in, ordering and retention limits
EventStoreDB Specialized event store Pure Event Sourcing, temporal queries, out-of-the-box projections Narrow specialization, not for general integration

Rule of thumb: if you need a task queue — use RabbitMQ or SQS. If you need a stream of facts — use Kafka, Pulsar, or EventStoreDB. Mixing these roles in one tool is a sure path to a distributed big ball of mud.

• • •

VIIIThe Dark Side of EDA and When Synchrony Is Still Needed

Event-driven architecture is not a silver bullet. Flexibility comes at a price:

  1. Debugging complexity: instead of simple HTTP tracing, you need distributed trace IDs, dead-letter queues, and tools like OpenTelemetry.
  2. Eventual consistency: data between services is not consistent instantly. Teams must design UI and business processes with this in mind.
  3. Schema management: event contract evolution (schema evolution) is a separate engineering discipline. Without a schema registry and strict compatibility policy, events quickly turn into an unreadable mess.
  4. Infrastructure costs: brokers, observability pipelines, schema registries, event storage — all cost money. As throughput grows, costs grow fast.
  5. Cultural barrier: EDA requires a change in thinking. Teams used to request-response often slide into a distributed big ball of mud.

Not everything should be asynchronous. Introducing queues into tasks that inherently require an immediate response adds accidental complexity without benefit.

Approach When to Use
REST / gRPC Authentication, immediate lookups, CRUD operations, UI interaction, third-party APIs
Async events Side effects (notifications, analytics, indexing), cross-context flows, heavy processing
Hybrid Recommended for most systems: synchronous facade + asynchronous processing inside

Rule of thumb: do not chain more than two synchronous downstream services in a user-critical path. Move all side effects (notifications, analytics, indexing) to events.

Metrics: How to Measure the Effect

Talk about "flexibility" is useless without numbers. Here is a set of metrics worth tracking before and after the transition:

Metric What It Shows Typical Effect
Time-to-market Time from idea to production 30–50% reduction through composition from streams
Deployment frequency How often teams ship changes 2–5x growth due to service independence
MTTR Mean time to recovery after a failure Reduction due to failure isolation
Throughput Messages/sec on the broker Linear scaling with proper partitioning
Cost per 1M events Infrastructure cost per million events Grows with throughput — an important trade-off
• • •

IXSynthesis: Flexibility as Competitive Advantage

The transition to event-driven microservices is not just a technology change (adopting Apache Kafka). It is a change in the culture of working with data. The organization moves from a model where data is locked inside monoliths to a model where key business facts flow freely through event streams.

This gives business unprecedented flexibility: teams can quickly create new products by "composing" them from existing event streams, without spending months on API coordination and database synchronization. In a world where speed of reaction to the market decides everything, this architecture becomes the foundation for IT leaders.

Final Thesis

EDA is not a destination but a path. You will not get everything right the first time. But every event you publish instead of a direct call is a step toward an architecture where the medium works for you, not against you.

The article is based on an analysis of open sources: Gartner Top Strategic Technology Trends (2022–2023), case studies from Netflix, Uber, Slack, Goldman Sachs, ING Bank, and materials from Confluent, Solace, DZone, and others.