AfRel исходит из того, что любой проект, система или организация существуют не в идеальном мире, а в среде с конечными ресурсами. Игнорирование этих ограничений — основная причина паразитических (неверифицируемых, не достигающих цели) задач и провала архитектурных решений.
AfRel выделяет три первичных типа ресурсных ограничений, которые должны быть явно отражены в каждом артефакте ( targ , req , task , check ):
Это масштаб системы (или задачи) в количественных единицах.
Примеры:
Как фиксируется в артефактах:
current), целевое (target) и единицу измерения (unit).req/task/check — вклад в изменение X по сравнению с родительским артефактом.Это «плотность» или эффективность на единицу количества.
Примеры:
p95, p99), пропускная способность (throughput)error rate), точность (precision/recall)Как фиксируется в артефактах:
Это стоимость достижения цели или поддержания состояния.
Что сюда входит:
Как фиксируется в артефактах:
Три типа ограничений не независимы. AfRel требует фиксировать их вместе, потому что:
Улучшение качества (Y↑) часто требует увеличения ресурсов (Z↓) или сокращения масштаба (X↓).
Расширение масштаба (X↑) может привести к падению качества (Y↓) или росту затрат (Z↓).
Экономия ресурсов (Z↑) может быть достигнута только за счёт сжатия (X↓) или ухудшения качества (Y↓).
Любой артефакт, который описывает изменение только одной оси без учёта двух других, считается неполным (и, как правило, паразитическим). Пример фиксации ограничений в артефакте YAML
id: "1b-targ"
x:
current: "10 сервисов, 500 заказов/сек"
target: "3 сервиса, 500 заказов/сек"
unit: "число сервисов, заказы/сек"
y:
current: "latency p95=200ms, availability=99.9%"
target: "latency p95=100ms, availability=99.99%"
unit: "ms, %"
z:
current: "операционные затраты $500k/год"
target: "затраты $350k/год, экономия $150k/год"
unit: "USD/год"
Выход за ограничения (невозможно, но иногда кажется)
AfRel не запрещает ставить амбициозные цели, но требует:
Если артефакт не содержит явного плана возврата к допустимым ограничениям — он считается нежизнеспособным.
Три оси куба выживания — это и есть ресурсные ограничения:
Каждое состояние системы — точка в кубе. Каждая цель — вектор. Допустимые движения определяются текущими и прогнозируемыми ограничениями.
Отрицательные значения по осям X, Y, Z (например, убыток, уменьшение количества, деградация качества) — это не выход за пределы куба, а состояния, ведущие к нежизнеспособности системы. Задача AfRel — не допустить, чтобы система попадала в такие состояния без плана выхода из них.