Ответ
Микросервисная архитектура — это стиль, при котором приложение состоит из множества небольших, слабо связанных и независимо развертываемых сервисов.
Ключевые компоненты:
-
Сами микросервисы
- Каждый сервис инкапсулирует одну бизнес-возможность (например,
User Service,Payment Service,Notification Service). - Имеет собственную базу данных, что обеспечивает автономность и позволяет выбирать подходящую технологию (SQL/NoSQL).
- Каждый сервис инкапсулирует одну бизнес-возможность (например,
-
Способы коммуникации
- Синхронная (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.
- Синхронная (REST/gRPC): Для прямых, немедленных запросов.
-
Шлюз API (API Gateway)
- Единая точка входа для клиентов.
- Выполняет маршрутизацию, аутентификацию, ограничение запросов (rate limiting), кэширование.
-
Сервис обнаружения (Service Discovery)
- Например, Consul или Eureka. Позволяет сервисам динамически находить друг друга в условиях горизонтального масштабирования.
-
Оркестратор (Orchestrator)
- Kubernetes или Docker Swarm для автоматизации развертывания, масштабирования и управления контейнерами.
-
Наблюдаемость (Observability)
- Centralized Logging (ELK Stack).
- Distributed Tracing (Jaeger, Zipkin).
- Метрики и мониторинг (Prometheus, Grafana).
Преимущества: Гибкость, независимое масштабирование, отказоустойчивость. Сложности: Распределенные транзакции, повышенная сложность отладки и развертывания.