Из каких основных компонентов состоит микросервисная архитектура бэкенда?

«Из каких основных компонентов состоит микросервисная архитектура бэкенда?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Микросервисная архитектура — это стиль, при котором приложение состоит из множества небольших, слабо связанных и независимо развертываемых сервисов.

Ключевые компоненты:

  1. Сами микросервисы

    • Каждый сервис инкапсулирует одну бизнес-возможность (например, User Service, Payment Service, Notification Service).
    • Имеет собственную базу данных, что обеспечивает автономность и позволяет выбирать подходящую технологию (SQL/NoSQL).
  2. Способы коммуникации

    • Синхронная (REST/gRPC): Для прямых, немедленных запросов.
      # Пример REST эндпоинта на FastAPI
      @app.get("/users/{id}")
      async def get_user(id: int):
      user = db.query(User).filter(User.id == id).first()
      if not user:
          raise HTTPException(status_code=404)
      return user
    • Асинхронная (брокеры сообщений): Для декoupling и обработки фоновых задач. Используются Kafka, RabbitMQ, AWS SQS.
  3. Шлюз API (API Gateway)

    • Единая точка входа для клиентов.
    • Выполняет маршрутизацию, аутентификацию, ограничение запросов (rate limiting), кэширование.
  4. Сервис обнаружения (Service Discovery)

    • Например, Consul или Eureka. Позволяет сервисам динамически находить друг друга в условиях горизонтального масштабирования.
  5. Оркестратор (Orchestrator)

    • Kubernetes или Docker Swarm для автоматизации развертывания, масштабирования и управления контейнерами.
  6. Наблюдаемость (Observability)

    • Centralized Logging (ELK Stack).
    • Distributed Tracing (Jaeger, Zipkin).
    • Метрики и мониторинг (Prometheus, Grafana).

Преимущества: Гибкость, независимое масштабирование, отказоустойчивость. Сложности: Распределенные транзакции, повышенная сложность отладки и развертывания.