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

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

Эта страница для точной проверки расчёта: что агрегируется, как применяется 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

ONREZA Functions public beta тарифицируется одним BFU-hour meter. За расчётный период агрегируются:

  • _invocation_count
  • _duration_us
  • _memory_mb_us
  • _host_idle_mb_us
  • _response_bytes, _egress_bytes
  • _timeout_count, _error_count
  • _cold_start_count, _cold_start_us
Q_function_duration_seconds = SUM(_duration_us) / 1_000_000
Q_function_memory_bfu_seconds = SUM(_memory_mb_us) / (128 × 1_000_000)
Q_function_idle_bfu_seconds = SUM(_host_idle_mb_us) / (128 × 1_000_000) × 0.25
Q_function_transfer_bfu = (SUM(_response_bytes + _egress_bytes) / 1024³) × 10
Q_function_bfu_seconds =
max(Q_function_duration_seconds, Q_function_memory_bfu_seconds)
+ Q_function_idle_bfu_seconds
+ SUM(_invocation_count) × 0.001
+ SUM(_cold_start_count) × 0.01
+ Q_function_transfer_bfu

В счёте BFU-seconds тарифицируются блоками по 1 BFU-hour (BlockSize = 3600 BFU-секунд). Защитные лимиты плана ограничивают выполнение и не создают отдельные billable line items.

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

  • 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_storage_byte_seconds — интеграл хранилища по времени, включает written_data/WAL
  • kaiki_data_transfer_bytes — сетевой трафик

Диагностические (не billable): kaiki_active_time_seconds, kaiki_compute_time_seconds, kaiki_data_storage_bytes, 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_month = SUM(kaiki_storage_byte_seconds) / (1024³ × 2_592_000)
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: 2,500.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.