Налаштування GCP Cloud Storage для зберігання об'єктів

Об'єктів стає дедалі більше, і сховище перестає справлятися: віддача сповільнюється, витрати зростають непередбачувано. Ми налаштовуємо GCP Cloud Storage під ключ: добираємо класи зберігання та правила доступу, передаємо готові схеми й документацію. Час віддачі об'єктів скорочується, а архів перестає зростати безконтрольно.
Часті запитання

Що ламається в GCP Cloud Storage при зростанні навантаження

Першим у GCP Cloud Storage перестає відповідати обхід каталогу об'єктів. Сховище плоске: папки існують лише як префікси ключів, і лістинг за широким префіксом щоразу читається повністю.

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

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

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

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

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

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

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

Що дає налаштоване сховище: швидкість, надійність, контроль

У Google Cloud Storage клас зберігання — перше, що визначає поведінку об'єкта. Гарячі дані, які віддаються користувачу напряму, тримаємо в класі з мінімальною затримкою відгуку, архів із рідкісними зверненнями — у холодному, розрахованому на тривале зберігання.

Різниця у відгуку між класами вимірюється порядками, тому розкладка задається профілем доступу, а не на око.

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

Правило «тримати останні версії на тег» зупиняє неконтрольоване зростання реєстру, але залишає можливість відкотитися на попередню збірку.

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

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

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

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

Режими доступу та класи зберігання: порівняння варіантів

У об'єкта в GCP Cloud Storage два незалежних рішення: хто має право його прочитати і як швидко він має віддаватися. Перше задає режим доступу — єдина політика на весь бакет або пооб'єктні списки; друге — клас зберігання.

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

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

Внутрішнім сервісам достатньо прав на рівні бакета — пооб'єктні списки ускладнюють аудит і майже завжди залишають зайві дозволи.

Варіант Коли підходить Обмеження
Єдина політика на бакет Основний режим, права лише через IAM Не можна надати доступ до одного об'єкта в обхід бакета
Пооб'єктні списки Успадкована структура, точкові винятки Складно аудитувати, конфліктує з політикою бакета
Публічний доступ Статика сайту, наперед відкриті медіа Об'єкт індексується й залишається відкритим після зміни завдання
Підписані посилання Видача файлу партнеру або зовнішньому отримувачу Живуть обмежений час, достроково не відкликаються
Ближній клас Резервні копії, звернення раз на місяць Дострокове видалення в межах мінімального терміну коштує дорожче за зберігання
Холодний клас Архіви, звернення раз на квартал Мінімальний термін зберігання, видача довша за гарячу
Архівне зберігання Тривале утримання задля комплаєнсу Найдовший мінімальний термін, відновлення займає години

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

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

Порядок налаштування: від аудиту до передачі в експлуатацію

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

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

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

Документація, схеми та правила доступу до сховища

Сховище об'єктів, зібране на Google Cloud Storage, живе довше за будь-який окремий реліз: команда змінюється, а правила доступу й структура контейнерів залишаються.

Тому після завершення робіт передаємо не історію команд, а пакет документів, за яким налаштування можна відтворити, перевірити й спокійно передати на супровід.

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

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

Кейс: як змінилися час віддачі об'єктів та обсяг архіву

Що було до

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

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

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

Що змінили

Середовища рознесли за окремими проєктами й бакетами, щоб права не перетиналися.

У Google Cloud Storage налаштували правила життєвого циклу: через 30 днів об'єкт переходить у Nearline, через 90 — у Coldline, через рік — в Archive, з винятком для останніх десяти версій кожного артефакта.

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

Права описали через групи та ролі на рівні бакета, заявку на доступ пов'язали з автоматичним підтвердженням і терміном дії.

Що стало

Віддача прискорилася: 95-й процентиль часу відповіді знизився приблизно з 1,4 секунди до 0,4 — завдяки кешу та розвантаженню гарячого класу. Частка неактивних даних у гарячому класі впала з 70% до 12%, решта лежить у холодних класах і піднімається лише за запитом.

Відновлення об'єкта або попередньої версії займає хвилини замість доби пошуку по резервних копіях. Звернень до підтримки щодо доступів стало в рази менше: замість шести-восьми на місяць — одиниці за квартал.

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

Чим відрізняється Cloud Storage від файлового сховища

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

Каталог не можна перейменувати однією дією: зміна префікса — це перезапис кожного об'єкта за новим ключем.

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

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

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

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

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

Вибір моделі зберігання зводиться до двох питань: чи потрібно змінювати частину файлу на місці і чи потрібна кільком вузлам спільна точка монтування. Якщо друге не потрібне — майже завжди беремо об'єктне сховище.

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

Технічні сумніви при виборі об'єктного сховища

Питання на оцінці рідко бувають про можливості сховища — частіше про ризики переходу. Чотири з них спливають постійно.

Як перенести дані без зупинки сервісу?

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

Що з доступами, коли змінюється склад команди?

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

Чи витримає сховище пікове навантаження?

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

Чим підтверджується збереженість даних?

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

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

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

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

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

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

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

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