Чем отличается двухзвенная (2- tier) архитектура от трехзвенной (3-tier)?

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

Ответ

Двухзвенная архитектура (2-tier, Client-Server) состоит всего из двух логических уровней:

  1. Клиент (Presentation + Business Logic): Отвечает за пользовательский интерфейс и часто содержит в себе бизнес-логику.
  2. Сервер (Data Tier): Обычно это сервер базы данных.

Клиент напрямую обращается к базе данных.

Трехзвенная архитектура (3-tier) добавляет промежуточный уровень, разделяя ответственность:

  1. Презентационный уровень (Presentation Tier): Только пользовательский интерфейс (веб-браузер, мобильное приложение).
  2. Уровень бизнес-логики (Application/Logic Tier): Сервер приложений, который обрабатывает бизнес-правила, валидацию и логику.
  3. Уровень данных (Data Tier): Сервер базы данных.

Клиент взаимодействует только с сервером приложений, который, в свою очередь, общается с БД.

Сравнение на примере:

// 2-TIER (Десктоп-приложение с прямой БД)
// Клиентский код:
const result = database.query("SELECT * FROM orders WHERE user_id = ?", [userId]);
// Здесь же в клиенте может быть логика обработки заказов

// 3-TIER (Веб-приложение)
// 1. Клиент (браузер) -> 2. Сервер приложений (бэкенд):
fetch('/api/orders');
// 2. Сервер приложений (Node.js/Java/Python) -> 3. База данных:
app.get('/api/orders', (req, res) => {
    // Бизнес-логика: проверка прав, агрегация данных
    const orders = db.query("SELECT * FROM orders WHERE user_id = ?", [req.user.id]);
    res.json(orders);
});
Ключевые отличия и преимущества 3-tier: Аспект 2-Tier 3-Tier
Масштабируемость Слабая, масштабируется только сервер БД Отличная, каждый уровень масштабируется независимо
Безопасность Низкая, клиент имеет прямые подключения к БД Высокая, БД изолирована за сервером приложений
Поддержка и гибкость Изменение логики требует обновления клиентов Логику можно менять на сервере, не трогая клиенты
Сложность Проще в развертывании для малых систем Сложнее, но необходима для больших и гибких систем