Опишите архитектуру вашего предыдущего проекта.

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

Ответ

Проект был построен на основе микросервисной архитектуры с четким разделением ответственности.

Стек технологий и компоненты:

Компонент Технологии Назначение
Frontend React.js (SPA), TypeScript Пользовательский интерфейс, общение через REST API.
API Gateway NGINX / Kong Маршрутизация, SSL-терминация, аутентификация.
Бизнес-сервисы Node.js (Express), Python (Flask) Основная логика (Auth Service, Order Service, Analytics Service).
Базы данных PostgreSQL (транзакции), MongoDB (документы/аналитика) Каждый сервис использовал свою схему или БД.
Асинхронная коммуникация RabbitMQ Обработка фоновых задач (отправка email, генерация отчетов).
Оркестрация Kubernetes (K8s) на AWS (EKS) Развертывание, масштабирование и управление контейнерами.
CI/CD GitLab CI/CD Автоматическая сборка Docker-образов, прогон тестов и деплой в K8s.
Мониторинг Prometheus, Grafana, ELK Stack Сбор метрик, логов и визуализация.

Пример интеграционного теста для API заказа:

import requests

def test_order_creation():
    # 1. Аутентификация
    auth_response = requests.post(
        "https://api.company.com/auth/login",
        json={"username": "test", "password": "secret"}
    )
    token = auth_response.json()["access_token"]

    # 2. Создание заказа
    order_response = requests.post(
        "https://api.company.com/orders",
        json={"product_id": 456, "quantity": 1},
        headers={"Authorization": f"Bearer {token}"}
    )

    # 3. Проверки
    assert order_response.status_code == 201
    order_data = order_response.json()
    assert "id" in order_data
    assert order_data["status"] == "PENDING"

    # 4. Проверка согласованности (запрос в сервис заказов)
    get_response = requests.get(
        f"https://api.company.com/orders/{order_data['id']}",
        headers={"Authorization": f"Bearer {token}"}
    )
    assert get_response.status_code == 200

Ключевые принципы: независимое развертывание сервисов, контейнеризация, строгое API-версионирование, автоматизированное тестирование на всех уровнях.