Files
progcode/web/public/assets/editorial/2026/resilience-2026-failure-cascade-graph.svg
huncode 9812aa0c63
Build and deploy / deploy (push) Successful in 17s
revise February 2026 resilience articles
2026-07-31 18:59:19 +03:00

57 lines
5.4 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800" viewBox="0 0 1200 800" role="img" aria-labelledby="title desc">
<title id="title">Каскад fixed сценария и ранняя точка ограничения</title>
<desc id="desc">Схема показывает один логический запрос, временный timeout, единственного владельца retry, выбор одной реплики, именованный fallback и terminal action после исчерпания бюджета.</desc>
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
<path d="M0,0 L12,6 L0,12 Z" fill="#355070"/>
</marker>
<marker id="stop-arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
<path d="M0,0 L12,6 L0,12 Z" fill="#b42318"/>
</marker>
</defs>
<rect width="1200" height="800" fill="#f8fafc"/>
<rect x="38" y="32" width="1124" height="84" rx="18" fill="#102a43"/>
<text x="72" y="82" fill="#ffffff" font-family="Arial, sans-serif" font-size="38" font-weight="700">Fixed каскад: limit стоит до расширения маршрута</text>
<text x="72" y="105" fill="#cfe8ff" font-family="Arial, sans-serif" font-size="22">Одна дополнительная попытка не превращается в новую волну retry, fallback и fan-out.</text>
<rect x="60" y="190" width="240" height="128" rx="16" fill="#e6f4ff" stroke="#2b6cb0" stroke-width="3"/>
<text x="180" y="236" text-anchor="middle" fill="#102a43" font-family="Arial, sans-serif" font-size="29" font-weight="700">logical request</text>
<text x="180" y="270" text-anchor="middle" fill="#334e68" font-family="Arial, sans-serif" font-size="24">fixed input</text>
<text x="180" y="300" text-anchor="middle" fill="#334e68" font-family="Arial, sans-serif" font-size="24">2 units of work</text>
<rect x="390" y="190" width="250" height="128" rx="16" fill="#fff1f0" stroke="#b42318" stroke-width="3"/>
<text x="515" y="236" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="29" font-weight="700">primary-a</text>
<text x="515" y="270" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="24">fixed timeout</text>
<text x="515" y="300" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="24">named injection</text>
<rect x="730" y="174" width="300" height="160" rx="16" fill="#fff7d6" stroke="#b7791f" stroke-width="4"/>
<text x="880" y="220" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="31" font-weight="700">limit point</text>
<text x="880" y="258" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="25">edge owns retry</text>
<text x="880" y="290" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="25">budget: 2 extra attempts</text>
<text x="880" y="318" text-anchor="middle" fill="#744210" font-family="Arial, sans-serif" font-size="22">before route expansion</text>
<rect x="850" y="470" width="280" height="128" rx="16" fill="#e7f8ef" stroke="#21865b" stroke-width="3"/>
<text x="990" y="516" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="29" font-weight="700">primary-b</text>
<text x="990" y="550" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="24">one selected replica</text>
<text x="990" y="580" text-anchor="middle" fill="#135d3d" font-family="Arial, sans-serif" font-size="24">fixed complete</text>
<rect x="410" y="470" width="290" height="128" rx="16" fill="#eef2ff" stroke="#5b5bd6" stroke-width="3"/>
<text x="555" y="516" text-anchor="middle" fill="#3730a3" font-family="Arial, sans-serif" font-size="29" font-weight="700">named-summary</text>
<text x="555" y="550" text-anchor="middle" fill="#3730a3" font-family="Arial, sans-serif" font-size="24">one work unit</text>
<text x="555" y="580" text-anchor="middle" fill="#3730a3" font-family="Arial, sans-serif" font-size="24">no nested retry</text>
<rect x="62" y="612" width="340" height="116" rx="16" fill="#fff1f0" stroke="#b42318" stroke-width="3"/>
<text x="232" y="657" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="29" font-weight="700">budget exhausted</text>
<text x="232" y="691" text-anchor="middle" fill="#7a271a" font-family="Arial, sans-serif" font-size="24">return fixed degraded result</text>
<path d="M300 254 H370" fill="none" stroke="#355070" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M640 254 H708" fill="none" stroke="#355070" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M880 334 V422 H990 V450" fill="none" stroke="#355070" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M760 334 V422 H555 V450" fill="none" stroke="#5b5bd6" stroke-width="5" marker-end="url(#arrow)"/>
<path d="M730 280 C590 365, 270 420, 232 590" fill="none" stroke="#b42318" stroke-width="5" stroke-dasharray="13 10" marker-end="url(#stop-arrow)"/>
<text x="1005" y="392" text-anchor="middle" fill="#334e68" font-family="Arial, sans-serif" font-size="22">max fan-out: 1</text>
<text x="570" y="392" text-anchor="middle" fill="#4c3a9b" font-family="Arial, sans-serif" font-size="22">optional result unavailable</text>
<text x="390" y="640" fill="#7a271a" font-family="Arial, sans-serif" font-size="22">no new retry, no broad fan-out</text>
</svg>