Налаштування Read Replicas для масштабування читання бази даних

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Read Replicas для масштабування читання бази даних
Середня
~2-3 робочих дні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування Read Replicas для масштабування читання бази даних

Read Replicas — реплік бази даних, які приймають лише SELECT-запити. Дозволяють горизонтально масштабувати навантаження на читання без зміни архітектури програми.

Сценарії застосування

  • Розділена навантаження: API-запити читають з реплік, транзакції пишуть у мастер
  • Аналітичні запити (складні JOIN, агрегації) йдуть на виділену реплік
  • Різні програми використовують різні реплік (CMS-бекенд, публічний API, звіти)

PostgreSQL: кілька реплік

# Створення реплік через pg_basebackup
pg_basebackup -h master-host -U replication_user \
  -D /var/lib/postgresql/14/main -P -Xs -R

Маршрутизація у програмі

Laravel (PHP)

// config/database.php
'pgsql' => [
    'read' => [
        ['host' => '192.168.1.11'],
        ['host' => '192.168.1.12'],
    ],
    'write' => [
        'host' => '192.168.1.10',
    ],
    'sticky' => true,
]

Node.js (Sequelize)

const sequelize = new Sequelize('myapp', 'user', 'password', {
  dialect: 'postgres',
  replication: {
    read: [
      { host: '192.168.1.11', port: 5432 },
      { host: '192.168.1.12', port: 5432 },
    ],
    write: { host: '192.168.1.10', port: 5432 },
  },
})

pgBouncer read/write split

# pgbouncer.ini
[databases]
myapp = host=192.168.1.10 port=5432 dbname=myapp
myapp_read = host=192.168.1.11,192.168.1.12 port=5432 dbname=myapp

Управління лагом репліцирування

Критична проблема: запис → негайне читання може прочитати старі дані, якщо репліка відстає.

-- На мастері: відправити LSN клієнту
SELECT pg_current_wal_lsn();

Паттерн у програмі:

def read_after_write(lsn):
    replica = get_replica()
    if replica.is_caught_up(lsn):
        return replica.execute(query)
    else:
        return master.execute(query)

AWS RDS Read Replicas

aws rds create-db-instance-read-replica \
  --db-instance-identifier myapp-replica-1 \
  --source-db-instance-identifier myapp-master \
  --db-instance-class db.r6g.large

Моніторинг реплік

-- На мастері: статус усіх реплік
SELECT application_name, client_addr, state,
       round(EXTRACT(EPOCH FROM replay_lag)) as replay_lag_sec
FROM pg_stat_replication;

Тривалість

Налаштування двох Read Replicas з балансуванням у програмі — 1–2 робочих дні.