Ответ
На текущем проекте микросервисная архитектура развернута в Kubernetes-кластере, управляемом облачным провайдером Microsoft Azure (AKS - Azure Kubernetes Service).
Стек и инфраструктура:
- Оркестрация: Azure Kubernetes Service (AKS). Это позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными приложениями.
- Контейнеризация: Каждый микросервис упакован в Docker-образ и хранится в Azure Container Registry (ACR).
- Базы данных: В зависимости от требований сервиса используются разные хранилища:
- Azure SQL Database для реляционных данных с жесткими требованиями к согласованности.
- Azure Cosmos DB (API MongoDB/SQL) для сервисов, которым нужна глобальная распределенность и низкая задержка.
- Сетевое взаимодействие: Для внутреннего и внешнего трафика используются Kubernetes Services (ClusterIP, LoadBalancer) и Ingress Controller (чаще всего NGINX).
- Обмен сообщениями: Azure Service Bus (очереди и топики) для надежной асинхронной коммуникации между сервисами.
Пример манифеста развертывания (Deployment) в Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: catalog-service
namespace: production
spec:
replicas: 3 # Запускаем 3 идентичных пода для отказоустойчивости и балансировки нагрузки
selector:
matchLabels:
app: catalog-service
template:
metadata:
labels:
app: catalog-service
spec:
containers:
- name: catalog-service
image: myacr.azurecr.io/catalog-service:v1.2.0 # Образ из приватного реестра
ports:
- containerPort: 8080
env:
- name: ConnectionStrings__Database # Инжект конфигурации через переменные окружения
valueFrom:
secretKeyRef:
name: catalog-secrets
key: db-connection-string
resources:
requests: # Гарантированные ресурсы
memory: "256Mi"
cpu: "250m"
limits: # Лимиты ресурсов
memory: "512Mi"
cpu: "500m"
livenessProbe: # Проверка "живости" контейнера
httpGet:
path: /health/live
port: 8080
Дополнительные инструменты: Для управления конфигурациями и релизами используется Helm. Мониторинг и сбор логов настроены через Azure Monitor и Grafana.