«Оплата посекундно» — одна з тих фраз, що звучать завершено, але такими не є. За нею стоїть кілька рішень, від яких залежить рахунок: що саме вимірюється, коли годинник стартує й зупиняється, чи є мінімум, як обробляються частки цента і коли гроші реально йдуть із балансу.
У цьому пості — наші відповіді з арифметикою для пісочниць для коду. Мета проста: щоб ви могли передбачити рахунок із точністю до цента ще до запуску й вчасно помітили момент, коли посекундна модель не підходить вашому навантаженню.
Одиниця: зарезервовані vCPU і RAM
Ціна пісочниці — це ціна ресурсів, які резервує її тариф:
- $0.040 за vCPU-годину
- $0.013 за GiB RAM на годину
Тариф small (0.5 vCPU, 1 GB) тому коштує 0.5 × 0.040 + 1 × 0.013 = $0.033 на годину, або близько $0.0000092 на секунду. Найбільший, max (8 vCPU, 16 GB), — $0.528 на годину.
Ми рахуємо резерв, а не споживання. Пісочниця, що чекає наступної команди, коштує на секунду стільки ж, скільки та, що компілює проєкт. Облік реального CPU виглядав би на папері чесніше, але тоді ціну неможливо знати заздалегідь, а потужності за вами тримаються в будь-якому разі. Вихідний трафік не тарифікується.
Годинник: від створення до видалення
Тимчасова пісочниця оплачується від моменту створення до моменту видалення. Сюди входить і простій до того, як її видалить таймаут бездіяльності, типово 300 секунд.
Звідси більшість сюрпризів. Скрипт, що працює дві хвилини, у пісочниці, яку ніхто не видалив, оплачується за сім: дві роботи й п'ять очікування таймауту. Рішення нудне: видаляйте пісочницю, коли закінчили (блок with у SDK робить це сам), або зменште таймаут бездіяльності.
Мінімум: 60 секунд на пісочницю
Кожна тимчасова пісочниця оплачується щонайменше за 60 секунд життя. Запуск мікро-VM, підключення диска й мережі та подальше розбирання коштують однаково, працює код усередині секунду чи п'ятдесят.
| Час життя | Тариф | Оплачено | Вартість |
|---|---|---|---|
| 20 с | small | 60 с | $0.00055 |
| 61 с | small | 61 с | $0.00056 |
| 10 хв | small | 600 с | $0.0055 |
| 3 год | standard | 10 800 с | $0.198 |
Мінімум застосовується один раз, коли пісочниця завершилася, і лише якщо весь її час життя був меншим за 60 секунд. Жодних додаткових мінімумів за годину чи за команду немає.
Нарахування і списання: мікродолари й цілі центи
А ось те, про що «посекундно» зазвичай мовчить. Хост пісочниць записує використання в годинні бакети, по одному на пісочницю. Раз на хвилину задача білінгу забирає бакети, що закрилися, тарифікує їх і списує з балансу.
Тарифікація йде в мільйонних частках долара. Списання — у цілих центах. Усе, що менше цента, лишається на рахунку й додається до наступного списання; нічого не округлюється вгору ні по пісочниці, ні по годині.
На малих обсягах це важливо. Сто 20-секундних пісочниць нараховують 100 × $0.00055 = $0.055. Списується п'ять центів, пів цента чекає наступної пачки. Якби кожна пісочниця округлювалася до цента, та сама робота коштувала б долар.
Ще дві властивості варто знати:
- Кожен бакет списується рівно один раз. Запис про використання і списання пишуться в одній транзакції бази, з ключем «пісочниця + година». Повторний запуск чи загублене підтвердження не спишуть двічі.
- Збої затримують списання, але не гублять і не дублюють їх. Якщо білінг не може зв'язатися з хостом пісочниць, нічого не підтверджується, бакети чекають і списуються, коли зв'язок повернеться.
Наслідок: кабінет може відставати від живої цифри до години. Живе значення віддає GET /sandboxes/{id}/usage: там billed_usd та estimated_total_usd по пісочниці на поточний момент.
Persistent-пісочниці: за розпочату годину, зі стелею
Persistent-пісочниці зберігають диск між сесіями, до 30 днів. Вони оплачуються за кожну розпочату годину: 61 хвилина — це дві години. Натомість календарний місяць (UTC) ніколи не коштує більше за 730 годин мінус 25%.
Для тарифу standard ця стеля — $36.14 на місяць замість $48.18. Поки persistent-пісочниця на паузі, вона не тарифікується взагалі.
Коли закінчується баланс
Баланс ніколи не йде в мінус. Нові пісочниці відхиляються з 402 insufficient_balance. Тимчасові, що вже працюють, завершуються за своїм таймаутом бездіяльності чи TTL. Persistent ставляться на паузу через 24 години без поповнення й самі відновлюють роботу, щойно ви додасте кошти. Снапшоти на паузі зберігаються 14 днів. Потім пісочниця видаляється, і її id відповідає 410 sandbox_deleted.
Якщо пісочниці за вас створює ШІ-агент, задайте денний і місячний ліміт. Коли його досягнуто, повертається 429 budget_exceeded із часом скидання, і програма зможе на це відреагувати.
Де посекундна оплата програє
Посекундна оплата чудова для роботи, що вимірюється секундами й хвилинами. Що довша робота, то вона гірша.
| Навантаження | Посекундна пісочниця | Альтернатива |
|---|---|---|
| Прогін тестів на 2 хвилини | $0.0011 (small) | машина з погодинною оплатою візьме за всю годину |
| Пакетна задача на 3 години | $0.198 (standard) | приблизно стільки ж |
| Сервіс 24/7 | $36.14/міс (standard, стеля persistent) | VPS AI agent: 4 vCPU, 4 GB за $10/міс |
Точка перелому — приблизно там, де навантаження працює більше за кілька годин на добу. Далі ви платите за гнучкість, якою не користуєтеся, а сервер, орендований помісячно, дешевший за годину з великим запасом. Чесніше думати про посекундну оплату як про ціну за те, що не треба планувати потужності, а не як про знижку.
Швидка оцінка
Ціна тарифу за годину × секунди, які пісочниця проживе ÷ 3600, з підлогою в 60 секунд. Якщо видаляти її самі не будете, додайте таймаут бездіяльності. Для persistent округлюйте кожну сесію вгору до цілих годин і зупиняйтеся на місячній стелі.
Усі правила, квоти й API лімітів — у розділі ліміти й оплата пісочниць; виклики, згадані вище, — у довіднику SDK. Якщо цікаво, що саме ви орендуєте посекундно, про це Firecracker microVM простою мовою, а що ШІ-агентам насправді потрібно від інфраструктури пояснює, чому модель оплати така важлива, коли машини створюють не люди, а програми.
Коментарі
Поки немає коментарів. Будьте першим.