Как устроена архитектура веб-приложения

«Как устроена архитектура веб-приложения» — вопрос из категории Архитектура и DevOps-практики, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

С точки зрения DevOps, архитектура веб-приложения — это не только слои кода, но и вся инфраструктура, которая обеспечивает его работу, масштабируемость, отказоустойчивость и непрерывную доставку. Я описываю её, начиная с пользователя и двигаясь вглубь.

1. Клиентский слой (Frontend):

  • Статические файлы (HTML, CSS, JS), собранные в артефакты.
  • На практике DevOps: Эти файлы обслуживаются не с backend-сервера, а через CDN (CloudFront, Cloudflare) или объектное хранилище (S3) для высокой скорости и снижения нагрузки.

2. Слой маршрутизации и безопасности:

  • DNS (Route53, CloudDNS) направляет трафик.
  • Load Balancer (AWS ALB/NLB, nginx, HAProxy) распределяет запросы между инстансами, термирует SSL/TLS.
  • WAF (Web Application Firewall) фильтрует вредоносный трафик.

3. Слой приложения (Backend):

  • Само приложение, развернутое в контейнерах (Docker) и оркестрируемое Kubernetes или AWS ECS.
  • Микросервисы общаются друг с другом по внутренней сети, часто через сервисную сеть (service mesh, например, Istio) или асинхронно через брокер сообщений (Kafka, RabbitMQ).

4. Слой данных:

  • Базы данных: Основная (PostgreSQL/MySQL) и реплики для чтения. Для кэширования — Redis или Memcached.
  • Хранилище файлов: Объектные хранилища (S3, MinIO).

5. Слой мониторинга и логирования (Observability):

  • Метрики собираются Prometheus и визуализируются в Grafana.
  • Логи централизованно собираются в ELK-стек (Elasticsearch, Logstash, Kibana) или Loki.
  • Трейсинг распределенных запросов через Jaeger или Zipkin.

6. Слой доставки (CI/CD):

  • Git как источник кода.
  • CI-сервер (GitLab CI, GitHub Actions, Jenkins) запускает пайплайн: сборка, тестирование, сканирование уязвимостей, создание Docker-образа.
  • Артефактный репозиторий (Artifactory, Nexus, ECR) хранит образы.
  • CD-инструменты (ArgoCD, Flux) или CI-пайплайн разворачивают новую версию в Kubernetes (canary, blue-green).

Пример упрощенной, но полной схемы в инфраструктуре как код (Terraform):

# Условная схема ресурсов
module "vpc" { ... } # Сеть
module "rds" { ... } # База данных
module "eks" { ... } # Kubernetes-кластер
module "alb" { ... } # Балансировщик нагрузки
resource "aws_s3_bucket" "frontend" { ... } # Статика

Ключевой принцип DevOps в архитектуре — идентичность сред (dev, staging, prod) и автоматизация развертывания и управления всей этой сложной системой.