48 lines
4.8 KiB
XML
48 lines
4.8 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 980" role="img" aria-labelledby="title desc">
|
||
<title id="title">Поток решения feature flag между сервером и клиентом</title>
|
||
<desc id="desc">Схема отделяет защищенный серверный контекст, evaluation, ответ с presentation value и configuration version, от клиентского rendering и candidate exposure event. Пунктирная линия подчёркивает отсутствие exactly-once гарантии.</desc>
|
||
<defs>
|
||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto" markerUnits="strokeWidth">
|
||
<path d="M0,0 L10,5 L0,10 Z" fill="#74d5c0"/>
|
||
</marker>
|
||
</defs>
|
||
<rect width="720" height="980" rx="28" fill="#0f1d2e"/>
|
||
<rect x="28" y="26" width="664" height="112" rx="20" fill="#16334b" stroke="#3f6680"/>
|
||
<text x="58" y="72" fill="#f5fbff" font-family="Arial, sans-serif" font-size="28" font-weight="700">Где принимается решение?</text>
|
||
<text x="58" y="105" fill="#b8cedd" font-family="Arial, sans-serif" font-size="18">Eligibility живёт рядом с protected input; UI получает результат.</text>
|
||
|
||
<text x="80" y="181" fill="#89abc1" font-family="Arial, sans-serif" font-size="17" font-weight="700">SERVER BOUNDARY</text>
|
||
<rect x="54" y="202" width="612" height="184" rx="20" fill="#16334b" stroke="#3f6680" stroke-width="2"/>
|
||
<rect x="82" y="234" width="242" height="118" rx="16" fill="#4d2a33" stroke="#e08091" stroke-width="2"/>
|
||
<text x="106" y="271" fill="#ffe9ed" font-family="Arial, sans-serif" font-size="20" font-weight="700">Защищённый context</text>
|
||
<text x="106" y="300" fill="#f7c6cf" font-family="Arial, sans-serif" font-size="16">entitlement, risk rule,</text>
|
||
<text x="106" y="323" fill="#f7c6cf" font-family="Arial, sans-serif" font-size="16">стабильный cohort key</text>
|
||
<path d="M324 293 L384 293" fill="none" stroke="#74d5c0" stroke-width="3" marker-end="url(#arrow)"/>
|
||
<rect x="394" y="234" width="244" height="118" rx="16" fill="#1d4a44" stroke="#74d5c0" stroke-width="2"/>
|
||
<text x="418" y="271" fill="#e7fff7" font-family="Arial, sans-serif" font-size="20" font-weight="700">Evaluator</text>
|
||
<text x="418" y="300" fill="#b9eadc" font-family="Arial, sans-serif" font-size="16">flag key + context</text>
|
||
<text x="418" y="323" fill="#b9eadc" font-family="Arial, sans-serif" font-size="16">→ variant + config version</text>
|
||
|
||
<path d="M516 386 L516 442" fill="none" stroke="#74d5c0" stroke-width="3" marker-end="url(#arrow)"/>
|
||
<rect x="142" y="456" width="436" height="96" rx="18" fill="#24415c" stroke="#a6d6ff" stroke-width="2"/>
|
||
<text x="172" y="494" fill="#eff9ff" font-family="Arial, sans-serif" font-size="21" font-weight="700">Ответ клиенту</text>
|
||
<text x="172" y="524" fill="#c4e7ff" font-family="Arial, sans-serif" font-size="17">presentation value + effective config version</text>
|
||
|
||
<path d="M360 552 L360 608" fill="none" stroke="#74d5c0" stroke-width="3" marker-end="url(#arrow)"/>
|
||
<text x="80" y="641" fill="#89abc1" font-family="Arial, sans-serif" font-size="17" font-weight="700">CLIENT BOUNDARY</text>
|
||
<rect x="54" y="660" width="612" height="146" rx="20" fill="#16334b" stroke="#3f6680" stroke-width="2"/>
|
||
<rect x="82" y="692" width="242" height="82" rx="16" fill="#24415c" stroke="#a6d6ff" stroke-width="2"/>
|
||
<text x="106" y="726" fill="#eff9ff" font-family="Arial, sans-serif" font-size="20" font-weight="700">Render</text>
|
||
<text x="106" y="752" fill="#c4e7ff" font-family="Arial, sans-serif" font-size="16">видит returned value</text>
|
||
<path d="M324 733 L384 733" fill="none" stroke="#e9b45f" stroke-width="3" stroke-dasharray="9 8" marker-end="url(#arrow)"/>
|
||
<rect x="394" y="692" width="244" height="82" rx="16" fill="#513f25" stroke="#e9b45f" stroke-width="2"/>
|
||
<text x="418" y="726" fill="#fff1cf" font-family="Arial, sans-serif" font-size="19" font-weight="700">Exposure candidate</text>
|
||
<text x="418" y="752" fill="#f2d5a1" font-family="Arial, sans-serif" font-size="16">event id + version</text>
|
||
|
||
<path d="M516 806 L516 838" fill="none" stroke="#e9b45f" stroke-width="3" stroke-dasharray="9 8" marker-end="url(#arrow)"/>
|
||
<rect x="108" y="850" width="504" height="104" rx="18" fill="#4b2932" stroke="#e08091" stroke-width="2"/>
|
||
<text x="138" y="883" fill="#ffe9ed" font-family="Arial, sans-serif" font-size="20" font-weight="700">Delivery boundary: retry possible</text>
|
||
<text x="138" y="908" fill="#ffe9ed" font-family="Arial, sans-serif" font-size="20" font-weight="700">exactly-once не обещан</text>
|
||
<text x="138" y="935" fill="#f7c6cf" font-family="Arial, sans-serif" font-size="16">Приёмник делает dedupe только там, где это нужно.</text>
|
||
</svg>
|