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>
52 lines
3.6 KiB
XML
52 lines
3.6 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-6 — 200밀리초가 22초가 된다</text>
|
|
<text x="20" y="44" class="s">지연은 왕복 횟수만큼 곱해지고, 커넥션 풀에서 한 번 더 곱해진다</text>
|
|
<rect x="30" y="76" width="180" height="60" class="ok"/>
|
|
<text x="46" y="98" class="tb">대조군 keycloak-0</text>
|
|
<text x="46" y="120" class="s">DB 와 같은 노드 · 66ms</text>
|
|
<rect x="250" y="76" width="180" height="60" class="dead"/>
|
|
<text x="266" y="98" class="tb">시험군 keycloak-1</text>
|
|
<text x="266" y="120" class="s">tc netem delay 200ms</text>
|
|
<text x="230" y="112" class="tb" fill="#cf222e">✂</text>
|
|
<rect x="470" y="76" width="180" height="60" class="warn"/>
|
|
<text x="486" y="98" class="tb">단일 요청</text>
|
|
<text x="486" y="120" class="t">1,872 ms <tspan class="s">(28배)</tspan></text>
|
|
<rect x="690" y="76" width="140" height="60" class="dead"/>
|
|
<text x="706" y="98" class="tb">동시 20건</text>
|
|
<text x="706" y="120" class="t" fill="#cf222e">22.2 초</text>
|
|
<path d="M432 106 L466 106" class="k" marker-end="url(#a)"/>
|
|
<path d="M652 106 L686 106" class="r" marker-end="url(#ar)"/>
|
|
<text x="20" y="176" class="tb">왜 200ms 가 1,872ms 가 되는가 — 왕복 횟수</text>
|
|
<rect x="30" y="190" width="800" height="46" class="box"/>
|
|
<text x="46" y="210" class="s">로그인 한 번은 DB 왕복을 여러 번 한다: 클라이언트 조회 · 사용자 조회 · 세션 INSERT · 커밋 …</text>
|
|
<text x="46" y="228" class="s">왕복마다 200ms 가 더해진다. 애플리케이션은 아무것도 잘못하지 않았다</text>
|
|
<text x="20" y="266" class="tb">왜 1,872ms 가 22.2초가 되는가 — 커넥션 풀</text>
|
|
<rect x="30" y="280" width="390" height="76" class="dead"/>
|
|
<text x="46" y="302" class="s">요청이 커넥션을 오래 붙들고 있으면</text>
|
|
<text x="46" y="320" class="s">뒤의 요청은 풀에서 대기한다</text>
|
|
<text x="46" y="342" class="t" fill="#cf222e">agroal 커넥션 획득 대기 최대 20,000 ms</text>
|
|
<rect x="440" y="280" width="390" height="76" class="warn"/>
|
|
<text x="456" y="302" class="tb">그리고 파드가 죽는다</text>
|
|
<text x="456" y="322" class="s">readiness 프로브가 타임아웃으로 실패 →</text>
|
|
<text x="456" y="342" class="s">느린 노드가 로드밸런서에서 빠진다. 느림이 장애로 승격된다</text>
|
|
<text x="30" y="384" class="s">측정 장치 주의 — 동시 20건을 kubectl run --rm -i 로 돌리면 출력 스트림이 유실된다. 상주 탐침에 파일로 모아야 한다</text>
|
|
</svg>
|