Files
huncode 1b5ff34e2b
Build and deploy / deploy (push) Successful in 17s
revise October 2024 capacity cost articles
2026-07-31 16:43:48 +03:00

120 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` исключены.