← Назад к вопросам
Что такое микросервис?
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) │
│ (асинхронная коммуникация) │
└──────────────────────────────────────┘
Преимущества
- Масштабируемость: Масштабируем отдельные сервисы независимо
- Гибкость: Разные команды работают на разных технологиях
- Отказоустойчивость: Отказ одного сервиса не отключает всю систему
- Быстрая разработка: Команды разрабатывают параллельно
- Простота развертывания: Docker контейнеры, CI/CD pipeline
Вызовы
- Распределённость: Сложнее отлаживать, логировать и отслеживать
- Consistentcy: Сложнее обеспечить консистентность данных
- Network latency: Коммуникация между сервисами медленнее
- Operational complexity: Требуется больше инструментов для мониторинга
Когда использовать
✅ Крупные, сложные приложения ✅ Разные команды разработки ✅ Разные требования к масштабируемости ❌ Стартапы с малой командой ❌ Простые приложения