diff --git a/dev/architecture/Enriching Data in Distributed Systems.md b/dev/architecture/Enriching Data in Distributed Systems.md new file mode 100644 index 00000000..2a8d41c6 --- /dev/null +++ b/dev/architecture/Enriching Data in Distributed Systems.md @@ -0,0 +1,73 @@ +--- +aliases: + - Обогащение данных в распределённых системах +tags: + - maturity/🌱 +date: 2025-02-26 +--- +В системе с [[../../../../wiki/zero/00 Микросервисная архитектура|микросервисной архитектурой]] часто возникает ситуация, когда один сервис хранит информацию о сущностях (например, пользователях, клиентах, товарах), а другой сервис содержит связанные данные, но без детальной информации (например, только [[../Идентификатор сущности|идентификатор]] сущности). В таком случае возникает необходимость обогащения данных во втором сервисе, чтобы выполнять фильтрацию, агрегацию или другие операции. Рассмотрим возможные подходы к решению этой задачи, их плюсы и минусы. +## Синхронный вызов +При получении запроса во втором сервисе выполняется HTTP или [[../gRPC|gRPC]]-запрос в сервис, содержащий основную информацию, для получения необходимых атрибутов по идентификатору. Далее производится фильтрация или другая обработка данных. + +**Плюсы** +- **Актуальность данных** — используется самая свежая информация. +- **Отсутствие дублирования** — вся информация централизована в одном сервисе. + +**Минусы** +- Высокая [[Latency|задержка]] — каждый запрос требует дополнительных сетевых вызовов. +- **Жёсткая зависимость** — проблемы с доступностью основного сервиса могут привести к сбоям. +- Ограниченная [[Масштабирование информационной системы|масштабируемость]] — нагрузка на основной сервис увеличивается при росте количества запросов. +## Репликация данных во втором сервисе +Необходимые атрибуты сущностей дублируются во втором сервисе. Синхронизация изменений производится через события ([[../../../../_inbox/00 Kafka|Kafka]], [[../../../../_inbox/00 RabbitMQ|RabbitMQ]]) или периодические обновления. + +**Плюсы** +- **Быстрая фильтрация** — запросы обрабатываются локально без обращений к другим сервисам. +- **Независимость сервисов** — отказ основного сервиса не влияет на работу второго сервиса. + +**Минусы** +- **Риск рассогласования данных** — необходимо поддерживать актуальность реплицированных данных. +- **Дополнительные механизмы синхронизации** — требуется реализация подписки на изменения и обновления данных. +## Агрегация через API Gateway или BFF +Создается промежуточный сервис (агрегатор), который объединяет данные из нескольких сервисов. Клиент запрашивает данные через него, а агрегатор выполняет необходимые вызовы. + +**Плюсы** +- **Разделение ответственности** — сервисы остаются независимыми, а объединение данных выполняется на уровне [[API Gateway]]/BFF. +- **Гибкость** — можно адаптировать запросы под различные потребности клиентов. + +**Минусы** +- **Дополнительная инфраструктура** — требуется разрабатывать и поддерживать агрегатор. +- [[Latency|Задержки]] при обработке — выполнение нескольких запросов может увеличить [[Latency|время отклика]]. +## Использование поискового движка +Данные индексируются в поисковой системе ## (Elasticsearch, OpenSearch), которая позволяет эффективно фильтровать информацию, включая поиск по атрибутам. + +Плюсы +- **Высокая производительность поиска** — поисковые движки оптимизированы для сложных запросов. +- Хорошая [[Масштабирование информационной системы|масштабируемость]] — эффективны при больших объемах данных. + +**Минусы** +- **Сложность поддержки** — необходима дополнительная инфраструктура для индексации данных. +- **Потенциальное рассогласование** — данные в индексе могут отставать от актуального состояния. +## Использование GraphQL с федерацией +[[../GraphQL|GraphQL]] позволяет создавать единый API, который объединяет данные из разных сервисов с помощью резолверов, запрашивающих необходимые данные. + +**Плюсы** +- **Гибкость запросов** — клиент выбирает, какие данные получать. +- **Единая точка доступа** — упрощает взаимодействие между сервисами. + +**Минусы** +- **Сложность реализации** — требуется настройка федерации и резолверов. +- **Дополнительные накладные расходы** — выполнение сложных запросов может увеличить нагрузку. + +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]] +**Родитель**:: +**Источник**:: +**Создана**:: [[2025-02-26]] +**Автор**:: +### Дополнительные материалы +- + +### Дочерние заметки + +