83 lines
5.0 KiB
XML
83 lines
5.0 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 1240" role="img" aria-labelledby="cache-diagnosis-title cache-diagnosis-desc">
|
|
<title id="cache-diagnosis-title">Диагностика старой кешированной проекции</title>
|
|
<desc id="cache-diagnosis-desc">Вертикальная схема начинает со старой карточки у читателя, собирает source version, key, cache version, event и visibility. Затем она разделяет stale entry, неправильный ключ, private источник и проблему renderer вне кеша.</desc>
|
|
<defs>
|
|
<style>
|
|
.bg { fill: #111827; }
|
|
.title { fill: #f9fafb; font: 700 34px Arial, sans-serif; }
|
|
.subtitle { fill: #cbd5e1; font: 400 20px Arial, sans-serif; }
|
|
.symptom { fill: #4c1d2a; stroke: #fb7185; stroke-width: 2; }
|
|
.evidence { fill: #172554; stroke: #60a5fa; stroke-width: 2; }
|
|
.decision { fill: #312e81; stroke: #a5b4fc; stroke-width: 2; }
|
|
.action-ok { fill: #12332a; stroke: #34d399; stroke-width: 2; }
|
|
.action-warn { fill: #3b2f16; stroke: #fbbf24; stroke-width: 2; }
|
|
.head { fill: #ffffff; font: 700 26px Arial, sans-serif; }
|
|
.body { fill: #e5e7eb; font: 400 22px Arial, sans-serif; }
|
|
.body-blue { fill: #dbeafe; font: 400 22px Arial, sans-serif; }
|
|
.body-ok { fill: #d1fae5; font: 400 22px Arial, sans-serif; }
|
|
.body-warn { fill: #fef3c7; font: 400 22px Arial, sans-serif; }
|
|
.arrow { stroke: #94a3b8; stroke-width: 4; fill: none; marker-end: url(#arrow); }
|
|
.note { fill: #94a3b8; font: 400 19px Arial, sans-serif; }
|
|
</style>
|
|
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
|
|
<path d="M0,0 L12,6 L0,12 z" fill="#94a3b8"/>
|
|
</marker>
|
|
</defs>
|
|
<rect class="bg" width="720" height="1240" rx="28"/>
|
|
<text class="title" x="42" y="64">Диагноз stale-read</text>
|
|
<text class="subtitle" x="42" y="97">Сначала evidence, потом purge</text>
|
|
|
|
<rect class="symptom" x="48" y="140" width="624" height="118" rx="18"/>
|
|
<text class="head" x="72" y="182">Симптом</text>
|
|
<text class="body" x="72" y="216">source обновлён, reader видит old title</text>
|
|
<text class="body" x="72" y="246">Не удалять key до сохранения фактов.</text>
|
|
|
|
<path class="arrow" d="M360 258 L360 314"/>
|
|
|
|
<rect class="evidence" x="48" y="324" width="624" height="186" rx="18"/>
|
|
<text class="head" x="72" y="366">Evidence packet</text>
|
|
<text class="body-blue" x="72" y="402">1. source id и current version</text>
|
|
<text class="body-blue" x="72" y="432">2. read key и cached version</text>
|
|
<text class="body-blue" x="72" y="462">3. event state и reader visibility</text>
|
|
<text class="body-blue" x="72" y="494">Один title не доказывает причину.</text>
|
|
|
|
<path class="arrow" d="M360 510 L360 566"/>
|
|
|
|
<rect class="decision" x="48" y="576" width="624" height="112" rx="18"/>
|
|
<text class="head" x="72" y="618">Source version выше cached?</text>
|
|
<text class="body" x="72" y="652">Да → key тот же? event pending?</text>
|
|
<text class="body" x="72" y="680">Нет → искать другой read layer.</text>
|
|
|
|
<path class="arrow" d="M190 688 L190 744"/>
|
|
<path class="arrow" d="M530 688 L530 744"/>
|
|
|
|
<rect class="action-ok" x="48" y="754" width="292" height="186" rx="18"/>
|
|
<text class="head" x="72" y="796">Stale entry</text>
|
|
<text class="body-ok" x="72" y="832">source v2, cache v1</text>
|
|
<text class="body-ok" x="72" y="862">read: rebuild v2</text>
|
|
<text class="body-ok" x="72" y="892">late v2: keep current</text>
|
|
<text class="body-ok" x="72" y="922">Не выдавать v1 как hit.</text>
|
|
|
|
<rect class="action-warn" x="380" y="754" width="292" height="186" rx="18"/>
|
|
<text class="head" x="404" y="796">Не тот key</text>
|
|
<text class="body-warn" x="404" y="832">scope или locale lost</text>
|
|
<text class="body-warn" x="404" y="862">исправить key contract</text>
|
|
<text class="body-warn" x="404" y="892">не purge correct entry</text>
|
|
<text class="body-warn" x="404" y="922">до проверки collision.</text>
|
|
|
|
<path class="arrow" d="M190 940 L190 994"/>
|
|
<path class="arrow" d="M530 940 L530 994"/>
|
|
|
|
<rect class="action-warn" x="48" y="1004" width="292" height="142" rx="18"/>
|
|
<text class="head" x="72" y="1046">Source private</text>
|
|
<text class="body-warn" x="72" y="1080">deny + evict before event</text>
|
|
<text class="body-warn" x="72" y="1110">Право выше TTL.</text>
|
|
|
|
<rect class="action-ok" x="380" y="1004" width="292" height="142" rx="18"/>
|
|
<text class="head" x="404" y="1046">Versions equal</text>
|
|
<text class="body-ok" x="404" y="1080">проверить renderer, client</text>
|
|
<text class="body-ok" x="404" y="1110">или другой cache layer.</text>
|
|
|
|
<text class="note" x="48" y="1200">Учебная Map-модель · не browser · не cache store · не broker</text>
|
|
</svg>
|