Где развернуты микросервисы на текущем проекте?

«Где развернуты микросервисы на текущем проекте?» — вопрос из категории DevOps, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

На текущем проекте микросервисная архитектура развернута в 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.