Перейти к содержимому

Биллинг: формулы и переменные

Эта страница для точной проверки расчёта: что агрегируется, как применяется usage credit, как получается итоговая сумма.

Нормативная публичная версия методики: Pricing Appendix.

За расчётный период агрегируются:

  • invocation_count
  • cpu_us (микросекунды)
  • memory_mb_us (интеграл memory_mb × время)
  • ready_us, reserved_us, streaming_us, websocket_us, frozen_us

Входные значения хранятся без округления.

Q_invocations = SUM(invocation_count)
Q_cpu_seconds = SUM(cpu_us) / 1_000_000
Q_memory_gb_seconds = SUM(memory_mb_us) / (1024 × 1_000_000)
Q_compute_seconds = SUM(ready_us + reserved_us + streaming_us + websocket_us) / 1_000_000
Q_frozen_seconds = SUM(frozen_us) / 1_000_000
Q_process_cu_seconds =
max(Q_cpu_seconds, Q_memory_gb_seconds / 4, Q_compute_seconds × 0.25)
+ Q_frozen_seconds × 0.05

Входные значения:

  • isolate_invocation_count
  • isolate_cpu_us (активное runtime CPU-like время, µs)
  • isolate_memory_mb_us (интеграл effective_memory_limit_mb × execution_time_us)
  • isolate_fetch_count, isolate_kv_reads, isolate_kv_writes
Q_isolate_invocations = SUM(isolate_invocation_count)
Q_isolate_cpu_seconds = SUM(isolate_cpu_us) / 1_000_000
Q_isolate_memory_gb_seconds = SUM(isolate_memory_mb_us) / (1024 × 1_000_000)
Q_isolate_cu_seconds = max(Q_isolate_cpu_seconds, Q_isolate_memory_gb_seconds / 4)
Q_isolate_subrequests = SUM(isolate_kv_reads + isolate_kv_writes + isolate_fetch_count)

Входные значения:

  • static_egress_bytes
  • static_image_transform_count
  • static_origin_fetch_bytes
Q_static_egress_gb = SUM(static_egress_bytes) / (1024³)
Q_static_image_transforms = SUM(static_image_transform_count)
Q_static_origin_fetch_gb = SUM(static_origin_fetch_bytes) / (1024³)

Storage учитывает реальную длительность хранения каждого деплоя в рамках расчётного периода:

byte_seconds = Σ (размер_артефакта × время_хранения_в_секундах)
Q_static_storage_gb_month = byte_seconds / (1024³ × 2_592_000)

Время хранения — пересечение жизненного цикла деплоя с расчётным периодом. Артефакт учитывается с момента деплоя до момента удаления (purge).

4. Managed PostgreSQL — входные значения и нормализация

Заголовок раздела «4. Managed PostgreSQL — входные значения и нормализация»

Входные значения:

  • kaiki_cu_seconds — CU-weighted compute time: cu_size × active_time_seconds
  • kaiki_data_storage_bytes — пиковый объём хранилища, включает written_data/WAL
  • kaiki_data_transfer_bytes — сетевой трафик

Диагностические (не billable): kaiki_active_time_seconds, kaiki_compute_time_seconds, kaiki_written_data_bytes.

Q_kaiki_cu_seconds = SUM(kaiki_cu_seconds)
Q_kaiki_cu_hours = Q_kaiki_cu_seconds / 3600
Q_kaiki_storage_gb = MAX(kaiki_data_storage_bytes) / (1024³)
Q_kaiki_data_transfer_gb = SUM(kaiki_data_transfer_bytes) / (1024³)
Q_kaiki_database_count = COUNT(databases WHERE status != DELETED)
Q_kaiki_total_branch_count = COUNT(branches WHERE status != DELETED)

Входные значения:

  • build_minutes
  • kv_storage_bytes
  • kv_storage_byte_seconds
  • kv_read_units
  • kv_write_units
build_overlap_seconds_i = overlap_seconds(build_i_started_at..build_i_finished_at, period_start..period_end)
Q_build_minutes = ceil( SUM(build_overlap_seconds_i) / 60 )
Q_kv_storage_gb_month = SUM(kv_storage_byte_seconds) / (1024³ × 2_592_000)
Q_kv_read_million_units = SUM(kv_read_units) / 1_000_000
Q_kv_write_million_units = SUM(kv_write_units) / 1_000_000

Для любой billable-метрики M quantity считается с первой единицы. Плановые control values не вычитаются из quantity для экономического расчёта:

GrossLineAmount_M = charge(Q_used_M, Rate_M)

Где Rate_M — текущая ставка метрики. Limit_M, если он есть в плане, является reference/control value или защитным порогом.

GrossLineAmount_M = Q_used_M × Rate_M
Blocks_M = ceil(Q_used_M / BlockSize_M)
GrossLineAmount_M = Blocks_M × BlockRate_M

Каждый line item содержит layer и metric теги для идентификации.

GrossUsage = Σ GrossLineAmount_M
IncludedCreditApplied = min(GrossUsage, IncludedUsageCredit)
ExtraUsage = max(0, GrossUsage - IncludedUsageCredit)
InvoiceTotal = ExtraUsage + Adjustments - Credits + Taxes

Где:

  • Σ GrossLineAmount_M — сумма по всем gross line items всех слоёв
  • IncludedCreditApplied — включенный usage credit плана
  • ExtraUsage — usage сверх included credit, который попадает в счёт в пределах extra usage budget
  • Adjustments — ручные/системные корректировки
  • Credits — промокредиты и компенсации
  • Taxes — налоги по профилю биллинга
  1. Raw-счётчики: без округления
  2. Q_*: точность не менее 6 знаков после запятой
  3. Для per_block: сначала ceil блоков, потом умножение
  4. Каждый Amount_M: round_half_up до денежной точности
  5. Общая сумма: после суммирования line items и применения корректировок

Пусть за период:

  • Compute: Q_process_cu_seconds = 7,200, ставка 7.50 за CU-час
  • Static: Q_static_egress_gb = 25, ставка 7.50 за GB
  • Included usage credit: 5,000.00
Compute CU: blocks = ceil(7,200 / 3,600) = 2; amount = 2 × 7.50 = 15.00
Static Egress: amount = 25 × 7.50 = 187.50
─────────────────────────────────────────────
GrossUsage = 202.50
IncludedCreditApplied = 202.50
ExtraUsage = 0.00

Такой период полностью покрывается included usage credit. Если GrossUsage превысит credit, разница попадёт в счёт в пределах extra usage budget.