Skip to main content

Як розподілити запити між кількома репліками?

Розподіл запитів між кількома репліками - це ключова частина архітектури з реплікацією, яка дозволяє розвантажити основний сервер (master) і підвищити масштабованість системи.

Ось основні підходи:

1. Балансувальник навантаження (load balancer)

Використовується програмний чи апаратний балансувальник, який спрямовує запити на читання (SELECT) до різних реплік. Популярні рішення:

  • PgBouncer, HAProxy, Pgpool-II (для PostgreSQL),
  • ProxySQL (для MySQL). Балансувальник стежить за станом реплік і рівномірно розподіляє трафік. Підходить для автоматизації й високої стійкості до відмов.

2. Логіка на рівні застосунку

Застосунок сам вирішує, куди відправляти запит. Наприклад:

  • усі записи (INSERT, UPDATE, DELETE) ідуть на master;
  • усі SELECT-запити - випадковим чином чи циклічно на одну з реплік. Плюс: гнучкість. Мінус: ускладнює код застосунку й вимагає відстежувати стан реплік.

3. DNS-балансування

Кожній репліці присвоюється той самий домен (наприклад, read-db.example.com), а DNS-сервер повертає різні IP на запити. Плюс: простота налаштування. Мінус: немає контролю над розподілом навантаження й часом відповіді.

4. Розумні проксі й middleware

Сучасні проксі можуть аналізувати тип SQL-запиту й автоматично спрямовувати:

  • операції запису - на master,
  • операції читання - на репліки. Приклад: Pgpool-II, ProxySQL.

Підсумок: На практиці найчастіше використовують PgBouncer / HAProxy / Pgpool-II, які беруть на себе маршрутизацію й балансування читання між репліками, забезпечуючи при цьому стійкість до відмов і прозорість для застосунку.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.