IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Что такое инфраструктура в контексте архитектуры приложения?

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

Инфраструктура в программной архитектуре

Инфраструктура включает в себя:

  1. Взаимодействие с внешними системами (например, базы данных, очереди сообщений, сторонние API).
  2. Сетевые компоненты (например, HTTP-серверы, брокеры сообщений, микросервисные коммуникации).
  3. Ресурсы для хранения данных (например, базы данных, файловые системы, кэш).
  4. Логирование, мониторинг и безопасность.

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

Пример инфраструктуры

В архитектуре Hexagonal Architecture или Ports and Adapters инфраструктура чаще всего представлена адаптерами, которые взаимодействуют с внешними мирами, например:

  • Базы данных: Репозитории, которые обеспечивают хранение данных в базах данных, но не содержат бизнес-логики.
  • Очереди сообщений: Kafka, RabbitMQ и другие системы сообщений, которые обеспечивают асинхронную обработку событий.
  • API-интерфейсы: Адаптеры, которые реализуют взаимодействие с внешними сервисами через HTTP или другие протоколы.
  • Конфигурация: Настройки системы, которые могут быть загружены из файлов конфигурации или переменных окружения.

Инфраструктура и бизнес-логика

В Hexagonal Architecture или Clean Architecture инфраструктура разделена на два слоя:

  1. Внешние адаптеры (Outside): Это компоненты, которые позволяют взаимодействовать с внешним миром — такие как контроллеры, сетевые компоненты, клиентские библиотеки и т.д.
  2. Внутренние адаптеры (Inside): Это компоненты, которые взаимодействуют с внутренними сервисами, репозиториями и системами хранения.

Бизнес-логика, которая является основной частью приложения, независима от инфраструктуры. Это позволяет легко тестировать бизнес-логику без зависимости от конкретных внешних систем и наоборот — легко менять инфраструктуру, не затрагивая саму бизнес-логику.

Примеры инфраструктурных компонентов:

  1. Kafka Consumer:
    • Он взаимодействует с Kafka (внешняя система) и передает данные во внутреннюю систему, но не содержит бизнес-логики. Это типичный инфраструктурный компонент.
    • Он является адаптером, который извлекает данные из Kafka и передает их в обработку в сервисы, не возвращая данные обратно во внешний мир.
  2. База данных (репозитории):
    • Репозиторий — это инфраструктурный компонент, который занимается доступом к базе данных. Он может использовать SQL или NoSQL базы данных для сохранения или извлечения данных, но не включает бизнес-логику. Репозитории могут быть адаптерами для взаимодействия с базами данных.
  3. API Gateway:
    • В качестве адаптера API Gateway принимает HTTP-запросы и направляет их в нужные сервисы, выполняет аутентификацию, маршрутизацию запросов и ответов. Он управляет взаимодействием между микросервисами и внешним миром.
  4. Логирование и мониторинг:
    • Инфраструктурные компоненты могут включать системы логирования (например, logrus, zap в Go) или мониторинга (например, Prometheus), которые помогают отслеживать состояние системы и ее работу, но сами по себе не участвуют в обработке бизнес-логики.

Роль инфраструктуры в архитектуре

Основная цель инфраструктуры — обеспечить взаимодействие между бизнес-логикой и внешним миром или между различными внутренними компонентами системы. Инфраструктура:

  • Изолирует бизнес-логику от конкретных технологий.
  • Обеспечивает необходимое взаимодействие с внешними сервисами.
  • Позволяет изменять внешние компоненты (например, переключение базы данных или смену очереди сообщений) без влияния на бизнес-логику.

Пример взаимодействия бизнес-логики и инфраструктуры

  1. Бизнес-логика:
    • Сервис, который обрабатывает данные, например, создает нового пользователя.
    • Этот сервис не зависит от того, как и где будут храниться данные. Он может только передавать объекты данных в репозиторий для сохранения.
  2. Инфраструктура:
    • Репозиторий, который сохраняет пользователя в базе данных. Это инфраструктурный компонент, который взаимодействует с базой данных, но сам не реализует бизнес-логику (например, как именно создать пользователя).

Пример структуры:

Здесь UserService (бизнес-логика) не зависит от того, как сохраняются данные — это делается через репозиторий, который является частью инфраструктуры.

Заключение

Инфраструктура — это часть системы, которая отвечает за взаимодействие с внешним миром, обеспечивая доступ к внешним системам и ресурсам (например, базы данных, очереди сообщений, API). В архитектуре приложения инфраструктурные компоненты часто действуют как адаптеры, которые обеспечивают связку между бизнес-логикой и внешним миром. Эти компоненты не содержат бизнес-логики, но критически важны для нормальной работы системы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *