120 lines
11 KiB
Markdown
120 lines
11 KiB
Markdown
# P80 — октябрь 2024: ёмкость и стоимость
|
||
|
||
## Граница пакета
|
||
|
||
Пакет заменяет только три overlay-ревизии:
|
||
|
||
- editorial-2024-10-practice-capacity-cost;
|
||
- editorial-2024-10-mechanism-capacity-cost;
|
||
- editorial-2024-10-field-capacity-cost.
|
||
|
||
Все workload, request, limit, quota, p95, проценты, риски и суммы в статьях
|
||
принадлежат synthetic-capacity-cost-model/2024-10-v1. Это фиксированные
|
||
литералы JavaScript в памяти и их детерминированные производные; в пакете нет
|
||
счёта, тарифа, имени продукта, клиентского объёма, метрики, интервью или
|
||
утверждения об actual saving.
|
||
|
||
## Проход 1 — факты и техника
|
||
|
||
### Источники и историческая граница
|
||
|
||
Все четыре URL проверены обычным TLS-запросом без авторизации и без обхода
|
||
сертификатов: каждый вернул HTTP 200.
|
||
|
||
| Источник | Версия / дата | Что подтверждает | Чего не подтверждает |
|
||
| --- | --- | --- | --- |
|
||
| [Kubernetes: Manage Resources for Containers](https://github.com/kubernetes/website/blob/0666011822b3ebbec179d6b3a2e6832977daa3bc/content/en/docs/concepts/configuration/manage-resources-containers.md) | Immutable commit 0666011822b3ebbec179d6b3a2e6832977daa3bc, 06.05.2024 | Scheduler использует request; CPU/memory limits имеют отдельную семантику исполнения. | Цену, invoice, тариф provider или безопасный размер instance. |
|
||
| [Kubernetes: ResourceQuota](https://github.com/kubernetes/website/blob/c87b19193d8b1e96de03d76ec7eece02262580f0/content/en/docs/concepts/policy/resource-quotas.md) | Immutable commit c87b19193d8b1e96de03d76ec7eece02262580f0, 30.05.2024 | Абсолютные quota для requests/limits; сумма quota может превышать cluster capacity. | Связь quota с расходом, claim об экономии или доступная capacity. |
|
||
| [Kubernetes: LimitRange](https://github.com/kubernetes/website/blob/c889d9b2510bba78dbb527a79b8e2099b16f3d67/content/en/docs/concepts/policy/limit-range.md) | Immutable commit c889d9b2510bba78dbb527a79b8e2099b16f3d67, 14.03.2024 | Admission defaults, minimum, maximum и ratio request/limit. | Прогноз saturation, стоимости или изменение уже работающего workload. |
|
||
| [Google Cloud Billing Catalog v1 proto](https://github.com/googleapis/googleapis/blob/0fe653872eca3ece391a0b4ec2f8ace64634419f/google/cloud/billing/v1/cloud_catalog.proto) | Immutable commit 0fe653872eca3ece391a0b4ec2f8ace64634419f, 18.06.2024 | Форму SKU/pricing expression: usage unit, base unit и tiered rates. | Реальную цену, скидку, валюту, billing account или счёт читателя. |
|
||
|
||
Все снимки существовали до конца октября 2024. В текстах эти источники
|
||
использованы только для словаря и границ модели, не для переноса поведения
|
||
конкретной платформы на synthetic cards.
|
||
|
||
### Проверка арифметики и модели
|
||
|
||
- steady-slo-cost-drift: 0,36 + (1,2 × 0,08) + (2 × 0,01) = 0,476 u/h;
|
||
за 24 часа — 11,424 u.
|
||
- next-limit-balanced: 0,36 + (1,4 × 0,08) + (2,2 × 0,01) = 0,494 u/h;
|
||
за 24 часа — 11,856 u; разница от 1,4 до 1,6 CPU — 0,384 u/24h.
|
||
- saturation-stop: 0,512 u/h, 12,288 u/24h; p95 headroom — 4 ms,
|
||
поэтому branch останавливается до выбора следующего предела.
|
||
- large-instance-unjustified: 0,74 u/h, 17,76 u/24h; низкий synthetic
|
||
utilisation не выдаётся за реальный bill или доказательство безопасного
|
||
уменьшения capacity.
|
||
|
||
Fixture имеет закрытые контракты input/report/draft/return card. Он проверяет
|
||
точные ключи, dense arrays, unknown keys, cyclic JSON и canonical comparison.
|
||
В нём нет чтения файлов, Git, облака, billing export, telemetry, CI, сети или
|
||
production state; return card не выполняет rollback.
|
||
|
||
**Вердикт:** фактические утверждения ограничены источниками и fixed model;
|
||
арифметика и негативные ветки согласованы с кодом.
|
||
|
||
## Проход 2 — редактура и голос
|
||
|
||
Автор октября 2024 звучит как системный практик: не обещает «оптимизацию», а
|
||
ведёт от симптома к причине, проверке и действию. В первых двух абзацах каждой
|
||
статьи есть исходная ситуация и цена ошибки:
|
||
|
||
| Статья | Исходная проблема | Цена ошибки | Практический артефакт |
|
||
| --- | --- | --- | --- |
|
||
| Practice | SLO проходит, а model cost растёт. | SLO ошибочно принимают за доказательство стоимости. | Capacity-card и формула workload → resource → unit → stop. |
|
||
| Mechanism | Процент загрузки принимают за цену. | Fixed base, unit и quota исчезают из причинной цепочки. | Causal diagram, таблица терминов и negative fixture. |
|
||
| Field | Большой instance выбирают по одной latency-точке. | Предел, risk и return boundary остаются неявными. | Матрица трёх cases, limit curve и маршрутизированный чек-лист. |
|
||
|
||
Из текста удалены общие обещания, real savings и production advice. Термины
|
||
раскрыты через конкретную роль: request/limit/quota для формы ресурса,
|
||
usage/base unit и tiered rate для billing expression, saturation для stop
|
||
condition. Финалы оставляют проверяемый tabletop-шаг, а не лозунг.
|
||
|
||
Проверенный объём основного текста, без списка источников:
|
||
|
||
- practice — **9 930** знаков;
|
||
- mechanism — **10 997** знаков;
|
||
- field — **10 037** знаков.
|
||
|
||
**Вердикт:** каждый текст находится в диапазоне 5 000–15 000 знаков, держит
|
||
тон 2024 года и не подменяет границу модели универсальным советом.
|
||
|
||
## Проход 3 — визуал и выпуск
|
||
|
||
| Asset | Смысл | Проверка на 375 px |
|
||
| --- | --- | --- |
|
||
| capacity-cost-2024-load-resource-cost.svg | Связь workload, resource, billing unit и stop boundary. | Рендер 375×233, карточки и стрелки различимы. |
|
||
| capacity-cost-2024-scenario-matrix.svg | Causal split utilisation, allocation, saturation и billing expression. | Рендер 375×233, короткая нижняя легенда не обрезается. |
|
||
| capacity-cost-2024-limit-curve.svg | Три synthetic точки: performance, model cost и operational risk. | Рендер 375×233, title и stop line читаемы. |
|
||
|
||
У каждой статьи есть figure с meaningful alt и caption, HTML table с thead,
|
||
компактный code example, ordered route и раздел ограничений. Для SVG проверены
|
||
XML и отсутствие script, foreignObject, javascript:, data:image и event
|
||
handlers.
|
||
|
||
Запущенные проверки:
|
||
|
||
~~~text
|
||
node --check scripts/upgrade-2024-10.mjs
|
||
PASS fixture: 33/33 assertions
|
||
npm run audit:draft -- scripts/upgrade-2024-10.mjs
|
||
PASS editorial-2024-10-practice-capacity-cost: 9930 body chars
|
||
PASS editorial-2024-10-mechanism-capacity-cost: 10997 body chars
|
||
PASS editorial-2024-10-field-capacity-cost: 10037 body chars
|
||
xmllint --noout <three SVG files>
|
||
SVG safety scan: 0 matches
|
||
Sharp 375 px: 375x233, 375x233, 375x233
|
||
~~~
|
||
|
||
Общий production build намеренно не запускался: пакет изолирован, а задача
|
||
запрещает registry/README/queue/Git/staging/commit/push. Выпускной вердикт для
|
||
draft-пакета: **готов к независимому подключению и отдельной сборке владельцем
|
||
пакета**.
|
||
|
||
## Выпуск после трёх независимых проходов
|
||
|
||
1. **Факты и техника.** Редактор повторно прочитал четыре immutable sources. Kubernetes snapshots подтвердили request/limit semantics, aggregate ResourceQuota и admission-only LimitRange; Google Cloud proto — SKU, usage/base unit и tiered rates. Формулировка о quota уточнена: сумма quota может превышать ёмкость кластера, поэтому quota не является доказательством доступной capacity. `node --check` и fixture — **PASS 33/33**.
|
||
2. **Редактура и голос.** Три статьи держат разные вопросы: capacity-card, причинная модель стоимости и выбор следующего предела. После уточнения источника объёмы — **9 995**, **11 013**, **10 047** знаков; synthetic values не выданы за тариф или advice. В каждом тексте есть problem/cost, таблица, пример и один проверяемый следующий шаг.
|
||
3. **Визуал и выпуск.** Первый мобильный просмотр нашёл недопустимо узкую карточку «предел» в схеме workload → resource → cost. Схема переработана в четыре крупные последовательные карточки, заново прошла XML/safety scan и Sharp-render на 375 px; остальные две диаграммы также просмотрены. После подключения overlay `audit:articles` подтвердил figure/table/code example на каждый slug; registry содержит **235** уникальных ревизий. `npm run build` успешно построил **374** страницы.
|
||
|
||
В выпуск входят только пять файлов октября, обновления registry/production README и эта приёмка. Пользовательские изменения, черновики ноября/декабря/января и исходный `articles.json` исключены.
|