← Назад к вопросам

Что такое микросервис?

1.8 Middle🔥 251 комментариев
#DevOps и инфраструктура#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Микросервис: определение и концепция

Что такое микросервис

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

Ключевые характеристики

1. Единственная ответственность

Каждый микросервис отвечает за одну бизнес-функцию:

# Пример разделения ответственности
# Сервис 1: User Service
@app.post("/users")
def create_user(user: UserData):
    return save_user(user)

# Сервис 2: Order Service
@app.post("/orders")
def create_order(order: OrderData):
    return save_order(order)

# Сервис 3: Notification Service
@app.post("/send-notification")
def send_notification(message: str):
    return send_email(message)

2. Независимое развертывание

Можно обновить один сервис без влияния на другие:

# Обновляем только User Service
docker build -t user-service:v2 .
docker push user-service:v2
kubectl set image deployment/user-service user-service=user-service:v2

# Остальные сервисы продолжают работать

3. Распределённая коммуникация

Сервисы общаются через API (HTTP/REST, gRPC) или сообщения (RabbitMQ, Kafka):

# User Service вызывает Order Service
import httpx

async def get_user_orders(user_id: int):
    async with httpx.AsyncClient() as client:
        response = await client.get(
            f"http://order-service:8001/users/{user_id}/orders"
        )
    return response.json()

4. Независимые базы данных

Каждый сервис имеет свою БД (Database per Service pattern):

# User Service
user_db = PostgreSQL("postgresql://user-db:5432/users")

# Order Service
order_db = PostgreSQL("postgresql://order-db:5432/orders")

# Notification Service
notif_db = SQLite("sqlite:///notifications.db")

Архитектурный пример

┌─────────────────────────────────────────────────────┐
│              API Gateway                             │
└──────────┬──────────┬──────────┬────────────────────┘
           │          │          │
    ┌──────▼──┐ ┌────▼────┐ ┌───▼────────┐
    │ User    │ │ Order   │ │ Payment    │
    │ Service │ │ Service │ │ Service    │
    └──────┬──┘ └────┬────┘ └───┬────────┘
           │         │          │
    ┌──────▼──┐ ┌────▼────┐ ┌───▼────────┐
    │ User    │ │ Order   │ │ Payment    │
    │ DB      │ │ DB      │ │ DB         │
    └─────────┘ └─────────┘ └────────────┘

    ┌──────────────────────────────────────┐
    │   Message Queue (RabbitMQ/Kafka)     │
    │  (асинхронная коммуникация)         │
    └──────────────────────────────────────┘

Преимущества

  1. Масштабируемость: Масштабируем отдельные сервисы независимо
  2. Гибкость: Разные команды работают на разных технологиях
  3. Отказоустойчивость: Отказ одного сервиса не отключает всю систему
  4. Быстрая разработка: Команды разрабатывают параллельно
  5. Простота развертывания: Docker контейнеры, CI/CD pipeline

Вызовы

  1. Распределённость: Сложнее отлаживать, логировать и отслеживать
  2. Consistentcy: Сложнее обеспечить консистентность данных
  3. Network latency: Коммуникация между сервисами медленнее
  4. Operational complexity: Требуется больше инструментов для мониторинга

Когда использовать

✅ Крупные, сложные приложения ✅ Разные команды разработки ✅ Разные требования к масштабируемости ❌ Стартапы с малой командой ❌ Простые приложения

Что такое микросервис? | PrepBro