Назовите ключевые свойства микросервисной архитектуры

Ответ

Микросервисная архитектура — это подход к разработке, при котором одно большое приложение строится как набор небольших, независимо развертываемых сервисов. Каждый сервис решает узкую бизнес-задачу.

Ключевые свойства:

  1. Автономность и независимое развертывание (Autonomy & Independent Deployment)

    • Каждый сервис можно изменять, тестировать и развертывать независимо от других. Это ускоряет циклы разработки и снижает риски, связанные с обновлениями.
  2. Ориентация на бизнес-возможности (Organized around Business Capabilities)

    • Сервисы строятся вокруг конкретных функций бизнеса (например, "управление заказами", "аутентификация пользователей"), а не технических слоев (UI, база данных).
  3. Децентрализованное управление данными (Decentralized Data Management)

    • Каждый сервис владеет своей базой данных или хранилищем. Это позволяет выбирать наиболее подходящую технологию хранения для конкретной задачи (например, SQL для транзакционного сервиса, NoSQL для каталога).
  4. Слабая связанность и сильная сплоченность (Loose Coupling & High Cohesion)

    • Сервисы минимально зависят друг от друга и взаимодействуют через четко определенные API. Внутри одного сервиса все компоненты тесно связаны для выполнения одной функции.
  5. Отказоустойчивость (Resilience)

    • Сбой одного сервиса не должен приводить к отказу всей системы. Архитектура должна быть спроектирована так, чтобы изолировать сбои и обеспечивать частичную работоспособность.
  6. Технологическая гетерогенность (Technology Heterogeneity)

    • Команды могут выбирать наиболее подходящий стек технологий (язык программирования, фреймворк, база данных) для своего сервиса, не будучи связанными единым выбором для всего приложения.

Пример простого микросервиса на FastAPI:

Этот сервис отвечает только за получение информации о пользователе.

from fastapi import FastAPI, HTTPException

app = FastAPI()

# Упрощенная "база данных" пользователей
users_db = {
    1: {"username": "alex", "email": "alex@example.com"},
    2: {"username": "jane", "email": "jane@example.com"}
}

@app.get("/users/{user_id}")
def get_user(user_id: int):
    """Возвращает данные пользователя по его ID."""
    user = users_db.get(user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user

# Запуск: uvicorn main:app --port 8001