An audit against the standard the series set — concepts, procedure, commands, architecture diagram, evidence table, terminal output — found the three new experiments met it while twelve of the original ones had no diagram at all: A-0, A-1, A-3, A-4, A-5, A-6, A-8, B-0, B-2, B-7, C-2, D-2. Each now has one drawn from what that experiment actually found, not filler: A-0 shows sharing going through PostgreSQL rather than between the caches; A-3 the gap between the 200 and the WAL flush, with both failed injections; A-5 the three silent injection failures; A-6 the two places latency is multiplied; B-0 the repository keyed by principal with no session id; B-2 the primary key that causes the overwrite; D-2 why the rolling update stopped the accident halfway. Also corrected the index's stale claim of 11 experiments without a screenshot — it is 14, and the reason is recorded: those experiments were measured from terminals, the database and logs, and the observability stack does not scrape Redis, the BFF or PostgreSQL, so there is no console to photograph. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
49 lines
3.2 KiB
XML
49 lines
3.2 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 860 400" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,sans-serif">
|
|
<style>
|
|
.box{fill:#fff;stroke:#8c959f;stroke-width:1.4;rx:6}
|
|
.dead{fill:#fff5f5;stroke:#cf222e;stroke-width:1.6;stroke-dasharray:5 3;rx:6}
|
|
.ok{fill:#f6fdf6;stroke:#1a7f37;stroke-width:1.6;rx:6}
|
|
.warn{fill:#fff8f0;stroke:#bf8700;stroke-width:1.5;rx:6}
|
|
.t{font-size:12px;fill:#1f2328}
|
|
.tb{font-size:12.5px;fill:#1f2328;font-weight:600}
|
|
.s{font-size:10.5px;fill:#656d76}
|
|
.ttl{font-size:14px;fill:#1f2328;font-weight:600}
|
|
.r{stroke:#cf222e;stroke-width:1.6;fill:none}
|
|
.g{stroke:#1a7f37;stroke-width:1.6;fill:none}
|
|
.k{stroke:#8c959f;stroke-width:1.3;fill:none}
|
|
</style>
|
|
<defs>
|
|
<marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 z" fill="#8c959f"/></marker>
|
|
<marker id="ar" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 z" fill="#cf222e"/></marker>
|
|
<marker id="ag" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 z" fill="#1a7f37"/></marker>
|
|
</defs>
|
|
<text x="20" y="26" class="ttl">A-0 — 세션을 공유하는 것은 Infinispan 이 아니라 PostgreSQL 이다</text>
|
|
<text x="20" y="44" class="s">클러스터가 형성됐다는 것과 세션이 복제된다는 것은 다른 얘기였다</text>
|
|
<rect x="30" y="76" width="330" height="120" class="box"/>
|
|
<text x="46" y="98" class="tb">keycloak-0 (kc-lab-2)</text>
|
|
<rect x="46" y="112" width="298" height="34" class="box"/>
|
|
<text x="58" y="134" class="t">Infinispan sessions 캐시</text>
|
|
<text x="46" y="166" class="s">자기가 처리한 로그인만 들어 있다</text>
|
|
<text x="46" y="184" class="s">entries_unique 는 노드마다 다르다</text>
|
|
<rect x="500" y="76" width="330" height="120" class="box"/>
|
|
<text x="516" y="98" class="tb">keycloak-1 (kc-lab-1)</text>
|
|
<rect x="516" y="112" width="298" height="34" class="box"/>
|
|
<text x="528" y="134" class="t">Infinispan sessions 캐시</text>
|
|
<text x="516" y="166" class="s">여기에도 자기 것만 있다</text>
|
|
<text x="516" y="184" class="s">상대 세션은 들어오지 않는다</text>
|
|
<path d="M362 130 L498 130" class="r" stroke-dasharray="5 3" marker-end="url(#ar)"/>
|
|
<path d="M498 146 L362 146" class="r" stroke-dasharray="5 3" marker-end="url(#ar)"/>
|
|
<text x="430" y="122" class="tb" text-anchor="middle" fill="#cf222e">복제 없음</text>
|
|
<text x="430" y="170" class="s" text-anchor="middle" fill="#cf222e">세션 엔트리는 노드 사이를 건너가지 않는다</text>
|
|
<rect x="300" y="250" width="260" height="76" class="ok"/>
|
|
<text x="316" y="272" class="tb">PostgreSQL</text>
|
|
<text x="316" y="292" class="s">OFFLINE_USER_SESSION (offline_flag='0')</text>
|
|
<text x="316" y="310" class="s">두 노드가 같은 행을 본다</text>
|
|
<path d="M150 198 L330 246" class="g" marker-end="url(#ag)"/>
|
|
<path d="M710 198 L530 246" class="g" marker-end="url(#ag)"/>
|
|
<text x="180" y="232" class="s">SELECT / INSERT</text>
|
|
<text x="600" y="232" class="s">SELECT / INSERT</text>
|
|
<rect x="30" y="346" width="800" height="40" class="box"/>
|
|
<text x="46" y="370" class="s">근거 — 노드 A 로 로그인하고 노드 B 로 refresh 했을 때, 반대편 노드가 날린 SQL 을 문장 로깅으로 직접 잡았다</text>
|
|
</svg>
|