Load Balancer vs Reverse Proxy — У чому різниця
Вступ
Балансувальник навантаження (Load Balancer) та зворотний проксі (Reverse Proxy) — це два фундаментальні компоненти мережевої інфраструктури, які часто плутають. Обидва розташовуються між клієнтами та серверами, обидва приймають запити та пересилають їх. Однак їхні цілі та функціональність відрізняються.
На практиці багато інструментів поєднують обидві ролі (Nginx, HAProxy), що ще більше посилює плутанину. Давайте розберемося детальніше.
Зворотний проксі (Reverse Proxy) — що він робить
Зворотний проксі — це сервер, який приймає запити від клієнтів від імені бекенд-серверів. Клієнт не знає, з яким саме сервером він спілкується.
Ключові функції
Приховування інфраструктури — клієнти бачать лише IP проксі, а не реальні сервери. Це підвищує безпеку.
SSL-термінація — проксі обробляє SSL/TLS, знімаючи криптографічні операції з бекенд-серверів.
Кешування — зберігання відповідей для повторних запитів без звернення до бекенду.
Стиснення — стиснення відповідей gzip/brotli для економії пропускної здатності.
Захист від атак — фільтрація шкідливих запитів, захист від DDoS.
Перезапис URL — модифікація шляхів запитів перед пересиланням на бекенд.
Введення заголовків — X-Real-IP, X-Forwarded-For та інші службові заголовки.
Балансувальник навантаження (Load Balancer) — що він робить
Балансувальник навантаження — це сервер, який розподіляє вхідні запити між кількома бекенд-серверами для оптимізації навантаження та забезпечення відмовостійкості.
Ключові функції
Розподіл навантаження — рівномірний розподіл запитів між серверами відповідно до заданого алгоритму.
Перевірка стану (Health checking) — безперервна перевірка доступності бекенд-серверів. Недоступні сервери видаляються з пулу.
Збереження сесії (Session persistence) — прив'язка сесії користувача до одного сервера (sticky sessions).
Відмовостійкість — автоматичне перенаправлення трафіку у разі відмови сервера.
Масштабування — додавання нових серверів без простоїв.
Алгоритми балансування
| Алгоритм | Опис | Коли використовувати |
|---|---|---|
| Round Robin | Послідовний розподіл | Ідентичні сервери |
| Weighted Round Robin | Враховує вагу сервера | Сервери різної потужності |
| Least Connections | До сервера з найменшою кількістю з'єднань | Різна тривалість запитів |
| IP Hash | На основі хешу IP клієнта | Потрібне збереження сесії |
| Least Response Time | До найшвидшого сервера | Швидкість критична |
| Random | Випадковий вибір | Простота |
Порівняння
| Параметр | Зворотний проксі | Балансувальник навантаження |
|---|---|---|
| Основна мета | Посередник між клієнтом і сервером | Розподіл навантаження |
| Бекенд-сервери | 1+ | 2+ (зазвичай) |
| SSL-термінація | Так | Не обов'язково |
| Кешування | Так | Ні |
| Перевірки стану | Базові | Розширені |
| Балансування | Базове | Розширене |
| Стиснення | Так | Ні |
| Перезапис URL | Так | Ні |
| L4 (TCP) | Деякі | Так |
| L7 (HTTP) | Так | Так |
Коли вони перетинаються
Насправді більшість інструментів поєднують обидві ролі:
Nginx — починав як зворотний проксі, але підтримує балансування upstream з перевірками стану, weighted round robin та least connections.
HAProxy — починав як балансувальник навантаження, але підтримує SSL-термінацію, заголовки та ACL для маршрутизації.
Envoy — розроблений як універсальний проксі з повною підтримкою обох ролей плюс service mesh.
Traefik — автоматична конфігурація для контейнерів, зворотний проксі + балансувальник навантаження.
Рівні балансування
L4 (Транспортний рівень)
Балансування на рівні TCP/UDP. Балансувальник бачить лише IP та порт, не аналізує вміст запиту. Швидко, але без маршрутизації, що залежить від вмісту.
L7 (Прикладний рівень)
Балансування на рівні HTTP. Аналізує URL, заголовки, куки. Дозволяє маршрутизацію на основі вмісту запиту. Повільніше, ніж L4, але гнучкіше.
Приклад різниці
L4 бачить: TCP-з'єднання до порту 443 → розподіляє за алгоритмом.
L7 бачить: GET /api/users з Cookie: session=abc123 → маршрутизує до конкретного бекенду.
Застосування в проксі-індустрії
Провайдери проксі
Провайдери проксі використовують обидва компоненти:
Зворотний проксі — фронтальний шлюз, який приймає з'єднання клієнтів, обробляє автентифікацію та маршрутизує до відповідного пулу IP-адрес.
Балансувальник навантаження — розподіляє запити між пулами проксі-серверів у різних дата-центрах для відмовостійкості.
Власна інфраструктура
При побудові власної проксі-ферми:
1. Балансувальник навантаження на вході розподіляє трафік між проксі-серверами
2. Кожен проксі-сервер діє як прямий проксі до цільових веб-сайтів
3. Перевірки стану (Health checks) верифікують доступність кожного проксі
Що обрати
Вам потрібен лише зворотний проксі, якщо:
- У вас один бекенд-сервер
- Потрібна SSL-термінація та кешування
- Ви хочете приховати свою інфраструктуру
Вам потрібен балансувальник навантаження, якщо:
- Кілька бекенд-серверів
- Потрібна відмовостійкість
- Критично важливий рівномірний розподіл навантаження
Вам потрібні обидва (що найчастіше):
- Використовуйте Nginx, HAProxy або Traefik — вони можуть виконувати обидві функції
Висновок
Зворотний проксі та балансувальник навантаження — це два аспекти одного завдання: управління трафіком між клієнтами та серверами. Зворотний проксі зосереджується на посередницьких функціях (SSL, кешування, безпека), тоді як балансувальник навантаження — на розподілі навантаження та відмовостійкості. У сучасній інфраструктурі найчастіше використовується інструмент, що поєднує обидві ролі.