Cloud SQL і AlloyDB: налаштування керованих БД GCP для продакшену

Продакшен ламається не від навантаження, а від бази, яку до зростання не готували. Ми налаштовуємо керовані бази даних під ключ: розміщення, доступи, резервне копіювання, регламенти. Час відновлення скорочується втричі, а зростання навантаження перестає бути ризиком.
Часті запитання

Налаштування Cloud SQL: де розсипається продакшн

Після запуску Cloud SQL виглядає здоровою базою: значення за замовчуванням справляються з трафіком, графіки рівні, алертів немає.

Але вони розраховані на розробку й невеликий потік, а не на продакшн — з реальним профілем навантаження вони розходяться рівно тоді, коли перебудовуватися вже запізно.

Перша точка відмови — вичерпання з’єднань. Застосунок відкриває підключення на кожен запит, кількість його копій на піку зростає, і база перестає приймати нові сесії: запити стають у чергу, відгук зростає, частина викликів падає з помилкою. Пул з’єднань і явний ліміт на боці застосунку знімають проблему — але лише якщо задані заздалегідь.

Деградація під піковим навантаженням влаштована тонше. Застаріла статистика або змінений план виконання ведуть запит на читання всієї таблиці, пропускної спроможності диска перестає вистачати, і черга зростає вже на рівні введення-виведення. Індекси, регулярний збір статистики та винесення читання на репліку тримають відгук передбачуваним.

Окремий сценарій — відмова під час перемикання репліки. Інстанс переїжджає в іншу зону, застосунок продовжує тримати мертві з’єднання в пулі, а повтори запитів влаштовують шторм на щойно піднятому вузлі. Без коректних таймаутів і логіки перепідключення перемикання перетворюється на помітний простій.

Кожен із цих збоїв передбачуваний і закривається на етапі налаштування керованої бази даних. Нижче — що саме для цього перевіряємо й налаштовуємо.

Що дає керована база в продакшні під час зростання навантаження

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

Відмовостійкість бази даних — це не галочка в панелі, а синхронна репліка в іншій зоні, автоматичне перемикання та проксі підключень перед інстансом.

Cloud SQL при коректному налаштуванні дає час відновлення після збою в межах одного перемикання: застосунок переживає його перепідключенням пулу з’єднань, без ручних дій чергового і без втрати підтверджених транзакцій.

Резервне копіювання бази закриває другу половину ризиків: автоматичні знімки разом із журналом змін дозволяють повернутися на хвилину до помилкового оновлення, а не на останній нічний дамп.

Відновлення регулярно перевіряється на окремому інстансі — неперевірена копія точкою відновлення не вважається.

Третій ефект — швидкість збирання середовищ: клон продакшн-інстанса дає тестовий контур за хвилини, тому міграції схеми й нові індекси перевіряються на реальних обсягах даних до викочування.

У сумі змінюється не окрема метрика, а клас відмов: зникають ручне піднімання бази, втрата даних у разі відмови диска та аварійне відновлення з дампа.

Варіанти розміщення бази: порівняння режимів

Режим розміщення обирають за профілем навантаження, а не за звичкою. Поки це короткі транзакції з передбачуваною кількістю з’єднань, керована база в хмарі (Cloud SQL) знімає з команди резервне копіювання, відмовостійкість і оновлення.

Щойно поруч з’являється звітність, той самий інстанс ділить буферний кеш і дисковий ввід-вивід між аналітикою й продакшном — просідає час відгуку в обох.

Варіант Коли підходить Обмеження
Керована транзакційна база Короткі транзакції, стабільний профіль запитів, потрібен автоматичний перехід на репліку Немає доступу до суперкористувача та файлової системи, частина розширень недоступна, обслуговування відбувається за розкладом провайдера, аналітика конкурує з транзакціями за пам’ять і дисковий ввід-вивід
Аналітичний рушій поруч із транзакційним Звітність та агрегації читають ті самі дані, що й продакшн, але не повинні його гальмувати Окремий інстанс зі своїм моніторингом і оновленнями, затримка реплікації, частина запитів потребує переписування під колонкове виконання
Власна машина з СУБД Потрібні нетипові розширення, тонке налаштування ядра, повний контроль над версією та планами запитів Резервне копіювання, відмовостійкість, патчі й відновлення повністю на нашому боці; помилка в налаштуванні коштує простою продакшну

Найчастіше транзакційне ядро залишають на керованій базі, звітність виносять на аналітичний рушій, а власну машину беруть лише тоді, коли вимоги до розширень і налаштування ядра переважують витрати на супровід. Зворотний перехід важчий: ролі, доступи й частину запитів доведеться переписувати.

Порядок налаштування керованої бази під навантаженням

Навантаження на керовану базу зростає нерівномірно: спочатку впирається в кількість з’єднань, потім у дискові операції, потім у план запитів, який перестає збігатися з реальним розподілом даних.

Конфігурація, зібрана за замовчуванням і перевірена на тестовому трафіку, тримається до першого піку. Тому порядок робіт зафіксовано — від зняття фактів до регламентів експлуатації.

  1. Аудит конфігурації бази: знімаємо параметри екземпляра, статистику планувальника, топ запитів за сумарним часом і за читанням з диска. На виході — перелік вузьких місць з оцінкою, що дасть найбільше на найближчому піку.
  2. Схема реплікації: визначаємо, які читання йдуть на репліку, який запас за затримкою допустимий для звітів, який режим синхронності потрібен критичним транзакціям. Окремо фіксуємо поведінку в разі втрати вузла.
  3. Налаштування екземпляра та ролей: кеш під робочий набір даних, пороги автоочищення, ліміти з’єднань і пул перед базою. Розділяємо доступ застосунку, аналітики та адміністратора.
  4. Бекапи та відновлення: вікно резервного копіювання, глибина зберігання, точка відновлення на момент часу. Відновлення перевіряємо на копії, а не за фактом наявності копій.
  5. Навантажувальна перевірка: прогін профілем, що повторює продовий за співвідношенням читань і записів, окремо пік і повільна деградація. Знімаємо час відгуку та частку запитів поза цільовим часом.
  6. Передавання бази в експлуатацію: метрики й алерти, регламент зміни параметрів, порядок відкату на попередню конфігурацію та копію. Відповідальний на боці замовника отримує документ, а не усні домовленості.

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

Артефакти проєкту: схеми, політики доступу, регламенти

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

  • Схема інфраструктури бази — екземпляри, репліки, сегменти мережі, зони розміщення та точки підключення сервісів. За нею видно, що відмовить у разі втрати зони і куди піде трафік.
  • Політики доступу та ролі — розподіл на власника, адміністратора, розробника й сервісні облікові записи. Застосунки ходять під окремими користувачами з мінімальними правами, прямий доступ людини до продакшну закритий і логується.
  • Регламент резервного копіювання — розклад знімків, глибина зберігання, обов’язкова перевірка відновлення в окремому контурі. Зафіксовано, хто і за який термін піднімає базу в разі втрати даних.
  • Документація щодо бази даних — параметри екземпляра, версія рушія, підключені розширення, ліміти з’єднань, порядок накочування міграцій.
  • Інструкції з типових операцій — розширення сховища, зміна класу екземпляра, планове перемикання на репліку, додавання індексу на великій таблиці без блокування запису.
  • Моніторинг і оповіщення — графіки затримки запитів, кількості з’єднань і залишку місця, пороги спрацювання та порядок розбору інциденту.

Перевірюваність — головна властивість такого комплекту: ваші інженери розгортають конфігурацію з нуля й звіряють результат з описаним станом, не звертаючись до нас за поясненнями.

Кейс: час відновлення бази скоротили втричі

Початковий стан: продакшн на Cloud SQL з інтенсивним записом — замовлення, статуси доставки, історія платежів.

Усі з’єднання, включно зі звітами й нічним звірянням, ішли на основну базу: близько 400 одночасних сесій, автовакуум не встигав за оновленням гарячих таблиць, а резервна копія знімалася цілком за розкладом.

Відновлення після збою займало до 75 хвилин: підняти копію, докотити частину транзакцій вручну й звірити розбіжності — на це витрачалося близько 12 годин роботи чергового інженера на місяць.

Що змінили

Розвели контури: гарячі читання й аналітика пішли на репліки через окремий пул з’єднань, запис залишився на основному інстансі. Увімкнули безперервне журналювання та відновлення на момент часу з вікном зберігання 30 днів — відкат перестав залежати від розкладу копій.

Історію замовлень і платежів перенесли на AlloyDB, залишивши в Cloud SQL транзакційне ядро, а перемикання в разі відмови автоматизували за перевіркою здоров’я.

Що стало

Час відновлення скоротився з 75 до 25 хвилин: інженер обирає точку до збою, база піднімається за журналом, ручне докочування не потрібне. Частка інцидентів із повним простоєм продакшну знизилася в рази — просідання читання тепер гасяться перемиканням на репліку.

Трудовитрати зміни на відновлювальні роботи зменшилися з 12 годин до 1,5 на місяць, а звітність перестала впливати на час відповіді основної бази.

Що робити, якщо база вже розгорнута на власній машині?

Переводити вже працюючу базу на керований сервіс не потрібно через вивантаження й простій.

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

Поки триває синхронізація, на керованому боці розгортається повна копія, і ми стежимо за затримкою застосування змін.

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

До моменту перемикання трафіку час життя адресних записів знижуємо заздалегідь, щоб старі адреси перестали кешуватися.

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

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

Тригери повернення вимірювані — частка помилок, затримка застосування вище порога, відхилення часу відгуку запитів від базового рівня. Вихідний сервер не вимикаємо: він залишається готовою точкою повернення.

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

Часті технічні питання про керовані бази

Сумніви щодо керованих баз рідко стосуються можливостей — частіше це про гарантії: що буде в разі відмови зони, скільки займе оновлення, як перевірити відновлення і наскільки складно піти до іншого постачальника. Нижче — короткі відповіді за кожним сценарієм.

Що станеться в разі відмови зони?

Інстанс розгортаємо в регіональній конфігурації: синхронна репліка живе в іншій зоні й автоматично приймає роль основної. Застосунок переживає перемикання через пул з’єднань — повтори запитів налаштовані, тому користувач бачить коротку затримку, а не помилку.

Як відбуваються оновлення без простою?

Патчі ставимо в узгоджене вікно й по одній репліці: поки оновлюється одна, читання йде через інші, потім перемикаємо основну. До вікна й після знімаємо метрики затримки — у разі деградації повертаємося на попередню ревізію.

Як переконатися, що резервна копія робоча?

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

Наскільки велика залежність від хмарного постачальника?

Схему тримаємо переносимою: стандартний SQL, міграції в репозиторії, вивантаження у відкритих форматах. Перенесення в інше середовище робимо логічною реплікацією — джерело продовжує обслуговувати запити, трафік перемикаємо після звіряння даних.

Обговоримо задачу та повернемося з оцінкою й планом

Оцінка та план робіт виходять точними, коли є факти, а не загальні формулювання. Щоб обговорити задачу предметно, достатньо короткого опису — деталі уточнимо на дзвінку, без анкети на двадцять пунктів.

  • які сервіси працюють із базою і яке навантаження вона має тримати: пікові запити, обсяг даних, очікуване зростання;
  • поточна схема: де розгорнута база, як влаштовані реплікація, резервне копіювання та відмовостійкість;
  • вимоги до доступності та вікон обслуговування — що допустимо зупинити, а що ні;
  • обмеження контуру: мережеві правила, регламенти, хто погоджує зміни в промисловому середовищі;
  • відомі больові точки — повільні запити, важкі міграції, інциденти за останні місяці.

Цього достатньо для підготовки до старту проєкту.

У відповідь повертаємося не оцінкою «на око», а пакетом: схема цільової архітектури з репліками, пулом підключень і мережевими периметрами; план робіт за етапами із залежностями; склад команди та терміни; перелік того, що потрібно від вашого боку — доступи, ролі, тестове середовище, вікно на перемикання.

Далі — дзвінок на 30–40 хвилин: розбираємо схему, порядок етапів і ризики. Опишіть задачу в двох-трьох абзацах, і ми повернемося з оцінкою та планом.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139