Ответ
Микросервисная архитектура — это подход к разработке, при котором одно большое приложение строится как набор небольших, независимо развертываемых сервисов. Каждый сервис решает узкую бизнес-задачу.
Ключевые свойства:
-
Автономность и независимое развертывание (Autonomy & Independent Deployment)
- Каждый сервис можно изменять, тестировать и развертывать независимо от других. Это ускоряет циклы разработки и снижает риски, связанные с обновлениями.
-
Ориентация на бизнес-возможности (Organized around Business Capabilities)
- Сервисы строятся вокруг конкретных функций бизнеса (например, "управление заказами", "аутентификация пользователей"), а не технических слоев (UI, база данных).
-
Децентрализованное управление данными (Decentralized Data Management)
- Каждый сервис владеет своей базой данных или хранилищем. Это позволяет выбирать наиболее подходящую технологию хранения для конкретной задачи (например, SQL для транзакционного сервиса, NoSQL для каталога).
-
Слабая связанность и сильная сплоченность (Loose Coupling & High Cohesion)
- Сервисы минимально зависят друг от друга и взаимодействуют через четко определенные API. Внутри одного сервиса все компоненты тесно связаны для выполнения одной функции.
-
Отказоустойчивость (Resilience)
- Сбой одного сервиса не должен приводить к отказу всей системы. Архитектура должна быть спроектирована так, чтобы изолировать сбои и обеспечивать частичную работоспособность.
-
Технологическая гетерогенность (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