Ответ
Двухзвенная архитектура (2-tier, Client-Server) состоит всего из двух логических уровней:
- Клиент (Presentation + Business Logic): Отвечает за пользовательский интерфейс и часто содержит в себе бизнес-логику.
- Сервер (Data Tier): Обычно это сервер базы данных.
Клиент напрямую обращается к базе данных.
Трехзвенная архитектура (3-tier) добавляет промежуточный уровень, разделяя ответственность:
- Презентационный уровень (Presentation Tier): Только пользовательский интерфейс (веб-браузер, мобильное приложение).
- Уровень бизнес-логики (Application/Logic Tier): Сервер приложений, который обрабатывает бизнес-правила, валидацию и логику.
- Уровень данных (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 |
|---|---|---|---|
| Масштабируемость | Слабая, масштабируется только сервер БД | Отличная, каждый уровень масштабируется независимо | |
| Безопасность | Низкая, клиент имеет прямые подключения к БД | Высокая, БД изолирована за сервером приложений | |
| Поддержка и гибкость | Изменение логики требует обновления клиентов | Логику можно менять на сервере, не трогая клиенты | |
| Сложность | Проще в развертывании для малых систем | Сложнее, но необходима для больших и гибких систем |