revise November 2021 load testing articles
Build and deploy / deploy (push) Successful in 14s

This commit is contained in:
2026-07-31 13:18:55 +03:00
parent f6058fbbca
commit d6f5767f2a
7 changed files with 1029 additions and 1 deletions
@@ -0,0 +1,55 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 700" role="img" aria-labelledby="title desc">
<title id="title">Диагностический маршрут для signal при нагрузочном тестировании</title>
<desc id="desc">Вертикальный маршрут начинается с error-signal или latency-signal как диагностической метки. Затем проверяет evidence packet, environment drift, пробел сценария и synthetic bottleneck. Каждая карточка содержит обратимое действие. Fixture не измеряет latency.</desc>
<defs>
<marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#486581"/>
</marker>
<style>
.bg { fill: #f8fafc; }
.title { fill: #102a43; font: 700 25px Arial, sans-serif; }
.subtitle { fill: #486581; font: 15px Arial, sans-serif; }
.start { fill: #ebf8ff; stroke: #3182ce; stroke-width: 2; }
.question { fill: #ffffff; stroke: #829ab1; stroke-width: 2; }
.drift { fill: #fffaf0; stroke: #dd6b20; stroke-width: 2; }
.gap { fill: #fff5f5; stroke: #c53030; stroke-width: 2; }
.boundary { fill: #f0fff4; stroke: #2f855a; stroke-width: 2; }
.action { fill: #edf2f7; stroke: #486581; stroke-width: 1.5; }
.label { fill: #102a43; font: 700 17px Arial, sans-serif; }
.small { fill: #334e68; font: 14px Arial, sans-serif; }
.tiny { fill: #486581; font: 13px Arial, sans-serif; }
.arrow { fill: none; stroke: #486581; stroke-width: 2.5; marker-end: url(#arrow); }
</style>
</defs>
<rect class="bg" width="480" height="700" rx="22"/>
<text class="title" x="30" y="44">Signal не выбирает причину сам</text>
<text class="subtitle" x="30" y="70">Сначала сохранить evidence, затем сузить гипотезу.</text>
<text class="tiny" x="30" y="94">Fixture: latency не collected; нет HTTP, tool, server, network или benchmark.</text>
<rect class="start" x="30" y="118" width="420" height="70" rx="14"/>
<text class="label" x="74" y="148">error-signal / latency-signal</text>
<text class="small" x="94" y="173">диагностическая метка, не verdict</text>
<path class="arrow" d="M 240 188 L 240 218"/>
<rect class="question" x="30" y="224" width="420" height="78" rx="14"/>
<text class="label" x="78" y="254">Evidence packet complete?</text>
<text class="small" x="60" y="280">endpoint · environment · data · profile · stop criterion</text>
<path class="arrow" d="M 240 302 L 240 332"/>
<rect class="drift" x="30" y="338" width="420" height="82" rx="14"/>
<text class="label" x="54" y="368">1. Environment drift?</text>
<text class="small" x="54" y="393">Identity или constraint отличаются от declared envelope.</text>
<text class="tiny" x="54" y="412">Rollback-safe: вернуться к manifest; не менять endpoint.</text>
<path class="arrow" d="M 240 420 L 240 450"/>
<rect class="gap" x="30" y="456" width="420" height="82" rx="14"/>
<text class="label" x="54" y="486">2. Scenario gap?</text>
<text class="small" x="54" y="511">Нет route, data identity, segment или stop criterion.</text>
<text class="tiny" x="54" y="530">Rollback-safe: восстановить карточку и evidence packet.</text>
<path class="arrow" d="M 240 538 L 240 568"/>
<rect class="boundary" x="30" y="574" width="420" height="92" rx="14"/>
<text class="label" x="54" y="604">3. Synthetic boundary?</text>
<text class="small" x="54" y="629">Flag в step и units согласованы с planned slots.</text>
<text class="tiny" x="54" y="650">Rollback-safe: изменить один field; сохранить packet.</text>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,61 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 680" role="img" aria-labelledby="title desc">
<title id="title">Как профиль workload превращается в evidence packet</title>
<desc id="desc">Вертикальная схема показывает карточку workload, четыре сегмента и evidence packet с endpoint, средой, данными и критерием остановки. Красная карточка отклоняет общее количество запросов без сценария. Схема не содержит HTTP, генератора или измерений latency.</desc>
<defs>
<marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#486581"/>
</marker>
<marker id="warn-arrow" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#c53030"/>
</marker>
<style>
.bg { fill: #f8fafc; }
.title { fill: #102a43; font: 700 25px Arial, sans-serif; }
.subtitle { fill: #486581; font: 15px Arial, sans-serif; }
.card { fill: #ffffff; stroke: #829ab1; stroke-width: 2; }
.packet { fill: #ebf8ff; stroke: #3182ce; stroke-width: 2; }
.reject-card { fill: #fff5f5; stroke: #c53030; stroke-width: 2; }
.label { fill: #102a43; font: 700 17px Arial, sans-serif; }
.small { fill: #334e68; font: 14px Arial, sans-serif; }
.tiny { fill: #486581; font: 13px Arial, sans-serif; }
.arrow { fill: none; stroke: #486581; stroke-width: 3; marker-end: url(#arrow); }
.warn { fill: none; stroke: #c53030; stroke-width: 3; stroke-dasharray: 8 6; marker-end: url(#warn-arrow); }
.slot { fill: #4299e1; }
.accept { fill: #2f855a; }
.reject { fill: #c53030; }
</style>
</defs>
<rect class="bg" width="480" height="680" rx="22"/>
<text class="title" x="30" y="44">Evidence начинается до tool</text>
<text class="subtitle" x="30" y="70">План и наблюдение остаются рядом.</text>
<rect class="card" x="30" y="108" width="420" height="132" rx="14"/>
<text class="label" x="54" y="140">1. Карточка workload</text>
<text class="small" x="54" y="170">endpoint intent · data setup identity</text>
<text class="small" x="54" y="196">environment + constraint · stop criterion</text>
<text class="tiny" x="54" y="222">GET /fixture/neutral-resource · in-memory only · no HTTP</text>
<path class="arrow" d="M 240 240 L 240 276"/>
<rect class="card" x="30" y="282" width="420" height="150" rx="14"/>
<text class="label" x="54" y="314">2. Профиль: порядок visible</text>
<g transform="translate(54 324)">
<rect class="slot" x="0" y="0" width="18" height="18" rx="3"/>
<text class="small" x="28" y="15">warm-up: slots</text>
<rect class="accept" x="0" y="30" width="18" height="18" rx="3"/>
<text class="small" x="28" y="45">steady: accepted units</text>
<rect class="reject" x="0" y="60" width="18" height="18" rx="3"/>
<text class="small" x="28" y="75">step: flag + rejected units</text>
<rect class="slot" x="0" y="90" width="18" height="18" rx="3"/>
<text class="small" x="28" y="105">recovery: stop criterion can close</text>
</g>
<path class="arrow" d="M 240 432 L 240 476"/>
<rect class="packet" x="30" y="482" width="420" height="126" rx="14"/>
<text class="label" x="54" y="514">3. Evidence packet</text>
<text class="small" x="54" y="542">endpoint + data · environment identity · profile records</text>
<text class="small" x="54" y="568">accepted/rejected · stop state · diagnostic labels</text>
<text class="tiny" x="54" y="592">Synthetic units only: not latency, not throughput.</text>
<rect class="reject-card" x="30" y="626" width="420" height="32" rx="10"/>
<text class="small" x="46" y="647">Total без scenario → отклонить: не workload model.</text>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

@@ -0,0 +1,90 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 640" role="img" aria-labelledby="title desc">
<title id="title">Учебный профиль нагрузочного тестирования из четырёх сегментов</title>
<desc id="desc">Вертикальная диаграмма показывает warm-up, steady, step и recovery. У каждого сегмента есть planned request slots, accepted и rejected synthetic units. Только step получает synthetic bottleneck flag. Все единицы явно исключены из latency, throughput и RPS.</desc>
<defs>
<style>
.bg { fill: #f8fafc; }
.title { fill: #102a43; font: 700 25px Arial, sans-serif; }
.subtitle { fill: #486581; font: 15px Arial, sans-serif; }
.label { fill: #102a43; font: 700 16px Arial, sans-serif; }
.small { fill: #334e68; font: 14px Arial, sans-serif; }
.tiny { fill: #486581; font: 13px Arial, sans-serif; }
.axis { stroke: #829ab1; stroke-width: 2; }
.grid { stroke: #d9e2ec; stroke-width: 1; }
.card { fill: #ffffff; stroke: #bcccdc; stroke-width: 1.5; }
.accept { fill: #2f855a; }
.reject { fill: #c53030; }
.plan { fill: #4299e1; }
.step { fill: #f6ad55; }
.note { fill: #fffaf0; stroke: #dd6b20; stroke-width: 1.5; }
</style>
</defs>
<rect class="bg" width="480" height="640" rx="22"/>
<text class="title" x="30" y="44">Профиль — порядок, не total</text>
<text class="subtitle" x="30" y="70">In-memory модель: slots не отправляются в сеть.</text>
<line class="axis" x1="42" y1="394" x2="440" y2="394"/>
<line class="axis" x1="42" y1="126" x2="42" y2="394"/>
<line class="grid" x1="42" y1="327" x2="440" y2="327"/>
<line class="grid" x1="42" y1="260" x2="440" y2="260"/>
<line class="grid" x1="42" y1="193" x2="440" y2="193"/>
<text class="tiny" x="15" y="141">slots</text>
<g>
<rect class="card" x="56" y="282" width="76" height="112" rx="9"/>
<rect class="plan" x="66" y="318" width="18" height="46" rx="3"/>
<rect class="accept" x="91" y="318" width="18" height="46" rx="3"/>
<rect class="accept" x="116" y="318" width="8" height="46" rx="3"/>
<text class="label" x="56" y="262">warm-up</text>
<text class="tiny" x="56" y="382">2 slots</text>
</g>
<g>
<rect class="card" x="150" y="238" width="76" height="156" rx="9"/>
<rect class="plan" x="160" y="274" width="16" height="90" rx="3"/>
<rect class="accept" x="182" y="274" width="16" height="90" rx="3"/>
<rect class="accept" x="204" y="274" width="14" height="90" rx="3"/>
<text class="label" x="159" y="218">steady</text>
<text class="tiny" x="160" y="382">3 accepted</text>
</g>
<g>
<rect class="card" x="244" y="128" width="100" height="266" rx="9"/>
<rect class="step" x="254" y="146" width="80" height="34" rx="5"/>
<text class="tiny" x="263" y="167">synthetic flag</text>
<rect class="plan" x="258" y="208" width="14" height="126" rx="3"/>
<rect class="accept" x="278" y="208" width="14" height="126" rx="3"/>
<rect class="accept" x="298" y="208" width="14" height="126" rx="3"/>
<rect class="accept" x="318" y="208" width="14" height="126" rx="3"/>
<rect class="reject" x="258" y="342" width="36" height="22" rx="3"/>
<rect class="reject" x="300" y="342" width="36" height="22" rx="3"/>
<text class="label" x="272" y="108">step</text>
<text class="tiny" x="254" y="382">5 slots · 2 rejected</text>
</g>
<g>
<rect class="card" x="362" y="282" width="76" height="112" rx="9"/>
<rect class="plan" x="372" y="318" width="18" height="46" rx="3"/>
<rect class="accept" x="397" y="318" width="18" height="46" rx="3"/>
<rect class="accept" x="422" y="318" width="8" height="46" rx="3"/>
<text class="label" x="361" y="262">recovery</text>
<text class="tiny" x="372" y="382">2 accepted</text>
</g>
<g transform="translate(30 430)">
<rect class="card" width="420" height="78" rx="12"/>
<rect class="plan" x="18" y="18" width="18" height="18" rx="3"/>
<text class="small" x="45" y="32">planned request slot</text>
<rect class="accept" x="218" y="18" width="18" height="18" rx="3"/>
<text class="small" x="245" y="32">accepted unit</text>
<rect class="reject" x="18" y="48" width="18" height="18" rx="3"/>
<text class="small" x="45" y="62">rejected synthetic unit</text>
</g>
<g transform="translate(30 530)">
<rect class="note" width="420" height="76" rx="12"/>
<text class="label" x="18" y="29">Граница этой диаграммы</text>
<text class="small" x="18" y="53">Synthetic units only: не latency, не throughput,</text>
<text class="small" x="18" y="69">не RPS, не users и не capacity benchmark.</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB