Files
progcode/web/public/assets/editorial/2024/feature-flags-2024-rollout-timeline.svg
T
huncode 04dbb60f16
Build and deploy / deploy (push) Successful in 18s
revise August 2024 feature flag articles
2026-07-31 16:27:37 +03:00

48 lines
4.8 KiB
XML
Raw 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.
<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>