В чём ключевые различия между монолитной и микросервисной архитектурой?

«В чём ключевые различия между монолитной и микросервисной архитектурой?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Монолитная архитектура — это единое приложение, где все компоненты (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
Ключевые различия: Критерий Монолит Микросервисы
Связность Высокая, компоненты тесно связаны Низкая, сервисы слабо связаны
Масштабирование Масштабируется целиком (вертикально) Каждый сервис масштабируется независимо (горизонтально)
Развёртывание Единое развёртывание всего приложения Непрерывное и независимое развёртывание сервисов
Отказоустойчивость Отказ одного компонента может привести к падению всего приложения Отказ одного сервиса изолирован
Сложность Проще в разработке, тестировании и развёртывании Сложнее: требуется оркестрация, мониторинг, обработка сетевых сбоев