«Оплата посекундно» — одна из тех фраз, что звучат законченно, но такими не являются. За ней стоит несколько решений, от которых зависит счёт: что именно измеряется, когда часы стартуют и останавливаются, есть ли минимум, как обрабатываются доли цента и когда деньги реально уходят с баланса.
В этом посте — наши ответы с арифметикой для песочниц для кода. Цель простая: чтобы вы могли предсказать счёт с точностью до цента ещё до запуска и вовремя заметили момент, когда посекундная модель не подходит вашей нагрузке.
Единица: зарезервированные 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 простым языком, а что ИИ-агентам на самом деле нужно от инфраструктуры объясняет, почему модель оплаты так важна, когда машины создают не люди, а программы.
Комментарии
Пока нет комментариев. Будьте первым.