Счёт за хранилище вырос втрое
Пришёл счёт за объектное хранилище — втрое больше обычного. Никаких новых проектов не появлялось, объём данных рос ровно. Полез разбираться.
Куда уходили деньги
Оказалось, дело не в самих данных, а в их версиях. Версионирование включили когда-то «на всякий случай», а правило удаления старых версий не настроили. Пайплайн каждую ночь перезаписывал одни и те же витрины — и каждая перезапись оставляла предыдущую копию навсегда.
За полтора года набралось вот столько:
| Что лежит | Объём | Доля счёта |
|---|---|---|
| актуальные объекты | 310 ГБ | 26% |
| прошлые версии | 840 ГБ | 71% |
| незавершённые загрузки | 36 ГБ | 3% |
Третья строка — отдельный сюрприз. Многочастевые загрузки, которые упали на середине, не удаляются сами: куски продолжают лежать и тарифицироваться, хотя в списке объектов их не видно.
Что настроил
Три правила жизненного цикла, и счёт вернулся к прежнему:
{
"Rules": [
{ "ID": "drop-old-versions",
"Status": "Enabled",
"NoncurrentVersionExpiration": { "NoncurrentDays": 30 } },
{ "ID": "cleanup-failed-uploads",
"Status": "Enabled",
"AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 } },
{ "ID": "archive-cold-exports",
"Status": "Enabled",
"Filter": { "Prefix": "exports/" },
"Transitions": [ { "Days": 90, "StorageClass": "GLACIER" } ] }
]
}
Чего бы я не стал делать
Соблазн выключить версионирование совсем — плохая идея. Оно один раз спасло, когда джоб записал пустой датафрейм поверх витрины: откатились на предыдущую версию за минуту вместо пересчёта за полдня. Тридцать дней хранения — разумный компромисс.
И не стоит вешать переход в холодный класс на всё подряд. Достать оттуда дороже и дольше; для витрин, к которым ходят дашборды, это ухудшение, а не экономия. Только на то, что действительно лежит мёртвым грузом.
Вывод банальный: политика хранения — часть проектирования, а не то, что настраивают после первого страшного счёта. Но настраивают обычно именно так.