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

Формулы расчёта стоимости

Для каждого ресурса рассчитываются три величины:

  • Actual cost — фактическая стоимость при действующем тарифе и реальном потреблении.
  • Optimal cost — стоимость, если бы ресурс использовался полностью (без резервов).
  • Saving cost — разница: actual − optimal. Это потенциал экономии.

Тарифы — почасовые: ставка на CPU-час и на Memory-час.

Почасовая стоимость:

actual_cost(pod, hour)
= max(request_cpu, usage_cpu) × cpu_price_per_hour
+ max(request_memory, usage_memory / GB) × memory_price_per_hour
optimal_cost(pod, hour)
= usage_cpu × cpu_price_per_hour
+ usage_memory / GB × memory_price_per_hour

max(request, usage) — потому что в Kubernetes ресурсы бронируются запросом (request), даже если фактическое потребление меньше.

Тарифы — дневные: ставка на CPU-день и Memory-день.

actual_cost(host, day)
= cpu_cores × cpu_price_per_day
+ memory_bytes / GB × memory_price_per_day

Optimal считается аналогично Kubernetes — по фактическому usage.

Тарифы — из биллинга провайдера. Платформа не применяет собственных ставок, а складывает дневную стоимость из биллинг-экспорта. Optimal определяется аналитически через подбор меньшего типа ресурса на основе метрик утилизации.

Расчёт идёт последовательно:

  • Почасовое (K8s) → суммируется в дневное.
  • Дневное → суммируется в месячное / периодное.
  • Агрегация выполняется после конвертации валют, но до округления. Округление — только на клиенте.

Это гарантирует, что сумма в таблице равна сумме частей на графике.

Прогноз до конца периода строится экстраполяцией тренда.

Упрощённая формула:

forecast(day) = avg(last_7_days) × day_of_month

Более сложная модель учитывает дни недели (workload в будние выше, чем в выходные).

  • Один источник, одна валюта — конвертация не выполняется.
  • Несколько источников с разными валютами — конвертация в валюту top bar.
  • Курс: из таблицы курсов, обновляется раз в сутки.
  • Для исторических дней — курс на тот день (если доступен).

При отсутствии исторического курса значение помечается как приблизительное и отображается с предупреждением.

Kubernetes pod:

  • request: 2 CPU, 4 GiB.
  • usage: 0.5 CPU, 1 GiB.
  • тариф: $0.03/CPU-час, $0.005/GiB-час.
actual = max(2, 0.5) × 0.03 + max(4, 1) × 0.005
= 2 × 0.03 + 4 × 0.005
= $0.080/час
optimal = 0.5 × 0.03 + 1 × 0.005
= $0.020/час
saving = $0.060/час

За месяц (730 часов):

  • actual ≈ $58.40.
  • optimal ≈ $14.60.
  • saving ≈ $43.80.

Такой pod — явный кандидат на right-sizing.