Ответ
Монолитная архитектура — это единое приложение, где все компоненты (UI, бизнес-логика, доступ к данным) тесно связаны, скомпилированы и развёрнуты как один процесс.
Микросервисная архитектура — это набор небольших, независимых сервисов, каждый из которых отвечает за отдельную бизнес-возможность, работает в своём процессе и общается через лёгкие механизмы (HTTP API, сообщения).
Сравнение на примере:
- Монолит (Python/Flask):
from flask import Flask, jsonify app = Flask(__name__) # Все "сервисы" в одном коде @app.route('/users') def get_users(): # Прямой запрос к общей БД users = db.execute("SELECT * FROM users").fetchall() return jsonify(users)
@app.route('/orders') def get_orders(): orders = db.execute("SELECT * FROM orders").fetchall() return jsonify(orders)
* **Микросервис (User Service на FastAPI):**
```python
# Сервис users, развёрнутый независимо
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
async def get_users():
# Работает со своей собственной БД
users = await user_db.fetch("SELECT * FROM users")
return users
| Ключевые различия: | Критерий | Монолит | Микросервисы |
|---|---|---|---|
| Связность | Высокая, компоненты тесно связаны | Низкая, сервисы слабо связаны | |
| Масштабирование | Масштабируется целиком (вертикально) | Каждый сервис масштабируется независимо (горизонтально) | |
| Развёртывание | Единое развёртывание всего приложения | Непрерывное и независимое развёртывание сервисов | |
| Отказоустойчивость | Отказ одного компонента может привести к падению всего приложения | Отказ одного сервиса изолирован | |
| Сложность | Проще в разработке, тестировании и развёртывании | Сложнее: требуется оркестрация, мониторинг, обработка сетевых сбоев |