253 lines
24 KiB
Plaintext
253 lines
24 KiB
Plaintext
<mxfile host="app.diagrams.net" modified="2026-05-08T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||
<diagram name="s13-controller-reconcile" id="reconcile">
|
||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||
<root>
|
||
<mxCell id="0" />
|
||
<mxCell id="1" parent="0" />
|
||
|
||
<mxCell id="title" value="컨트롤러의 심장 — Reconcile Loop & Watch 메커니즘" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=26;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="subtitle" value="SharedInformer 가 로컬 캐시 유지 · WorkQueue 가 폭주 흡수 · Reconcile 의 read 경로는 캐시 (write 는 apiserver)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="grp-ext" value="외부 — kube-apiserver / etcd" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||
<mxGeometry x="40" y="120" width="1520" height="180" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="user" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||
<mxGeometry x="100" y="170" width="60" height="60" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="user-lbl" value="사용자 · GitOps" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="234" width="140" height="20" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="api" value="kube-apiserver
(/apis · /watch)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="380" y="170" width="200" height="60" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="api-sub" value="HTTP/2 · long-stream · resourceVersion 기반 증분" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;" vertex="1" parent="1">
|
||
<mxGeometry x="360" y="232" width="240" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="etcd" value="etcd" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#57606A;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="660" y="180" width="100" height="40" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="etcd-sub" value="desired state 영구 저장" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||
<mxGeometry x="640" y="224" width="140" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-user-api" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="user" target="api">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num1" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="258" y="188" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-user-api-lbl" value="kubectl apply (Ingress 변경)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="188" y="216" width="180" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-api-etcd" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#57606A;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="api" target="etcd">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-api-etcd-lbl" value="persist" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#24292F;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="600" y="190" width="60" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="ext-note" value="✓ 사용자는 desired state 만 선언 — 실제 동작은 컨트롤러가 구현" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#FB923C;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="900" y="180" width="640" height="40" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="grp-ctrl" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#3B82F6;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="40" y="310" width="1300" height="430" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="grp-ctrl-lbl" value="컨트롤러 프로세스" style="text;html=1;strokeColor=none;fillColor=#EFF6FF;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=8;" vertex="1" parent="1">
|
||
<mxGeometry x="50" y="316" width="180" height="20" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="grp-informer" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3B82F6;strokeWidth=1;dashed=1;" vertex="1" parent="1">
|
||
<mxGeometry x="60" y="360" width="740" height="380" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="grp-informer-lbl" value="SharedInformer" style="text;html=1;strokeColor=none;fillColor=#FFFFFF;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=8;" vertex="1" parent="1">
|
||
<mxGeometry x="68" y="366" width="120" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="reflector" value="Reflector
LIST + WATCH" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="90" y="430" width="130" height="70" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="reflector-sub" value="apiserver 1개 long-stream" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="80" y="506" width="150" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="fifo" value="DeltaFIFO
Add / Update / Delete" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="290" y="430" width="140" height="70" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="fifo-sub" value="객체별 delta 슬라이스 큐" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="290" y="506" width="140" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="indexer" value="Indexer (Store)
thread-safe map" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="490" y="430" width="150" height="70" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="indexer-sub" value="namespace/name → object" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="485" y="506" width="160" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="lister" value="Lister
read-only API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BFDBFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="660" y="430" width="125" height="70" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="lister-sub" value="Get/List · 캐시 read" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="650" y="506" width="145" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="handlers" value="ResourceEventHandlers
OnAdd · OnUpdate · OnDelete" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="280" y="610" width="350" height="70" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="handlers-sub" value="콜백은 보통 “key 만 큐에 넣고 끝” — 무거운 일은 Worker" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="245" y="686" width="420" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-api-ref" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.2;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="api" target="reflector">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num2" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="395" y="255" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-api-ref-lbl" value="Watch stream (resourceVersion 부터 증분 이벤트)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="200" y="276" width="320" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-ref-fifo" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="reflector" target="fifo">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num3" value="③" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="243" y="453" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-ref-fifo-lbl" value="delta push" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="220" y="402" width="80" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-fifo-idx" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="fifo" target="indexer">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num4" value="④" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="448" y="453" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-fifo-idx-lbl" value="cache 갱신" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="420" y="402" width="80" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-idx-lister" style="endArrow=none;html=1;strokeColor=#1E40AF;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="indexer" target="lister">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-idx-lister-lbl" value="backed by" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="618" y="402" width="64" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-fifo-handlers" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.4;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="fifo" target="handlers">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num5" value="⑤" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="348" y="540" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-fifo-handlers-lbl" value="콜백 dispatch" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="240" y="552" width="100" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="wq" value="WorkQueue
rate-limit · dedup · 백오프" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="850" y="610" width="240" height="70" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="wq-sub" value="동일 key 큐잉 시 1회로 합쳐 폭주 흡수" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="830" y="686" width="280" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-handlers-wq" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="handlers" target="wq">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num6" value="⑥" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;fontColor=#B45309;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="728" y="633" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-handlers-wq-lbl" value="Add(namespace/name)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="640" y="600" width="180" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="worker" value="Worker
(goroutine × N)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="850" y="430" width="240" height="70" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="worker-sub" value="WQ 에서 key 1개씩 pop → reconcile 호출" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="830" y="506" width="280" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-wq-worker" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="wq" target="worker">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num7" value="⑦" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;fontColor=#B45309;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="958" y="540" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-wq-worker-lbl" value="dequeue" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="988" y="552" width="70" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="reconcile" value="Reconcile(key)
desired vs actual diff" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=3;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||
<mxGeometry x="1120" y="430" width="210" height="70" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="reconcile-sub" value="idempotent · 실패 시 WorkQueue 재큐잉" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="1100" y="506" width="250" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-worker-lister" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="worker" target="lister">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num8" value="⑧" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="813" y="453" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-worker-lister-lbl" value="Lister.Get(key) · 로컬 read" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="800" y="402" width="200" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-worker-rec" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="worker" target="reconcile">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num9" value="⑨" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="1093" y="453" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-worker-rec-lbl" value="invoke" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="1085" y="402" width="60" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="grp-out" value="외부 효과" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#10B981;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#047857;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||
<mxGeometry x="1360" y="310" width="200" height="430" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="traefik" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/traefikio/traefikio-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||
<mxGeometry x="1410" y="440" width="100" height="100" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="traefik-lbl" value="Traefik 동적 설정 갱신" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||
<mxGeometry x="1370" y="550" width="180" height="20" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="traefik-sub" value="router · service · middleware 갱신" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#047857;fontStyle=2;" vertex="1" parent="1">
|
||
<mxGeometry x="1370" y="576" width="180" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="e-rec-out" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="reconcile" target="traefik">
|
||
<mxGeometry relative="1" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="num10" value="⑩" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||
<mxGeometry x="1360" y="478" width="24" height="24" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="e-rec-out-lbl" value="apply" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||
<mxGeometry x="1340" y="448" width="60" height="18" as="geometry" />
|
||
</mxCell>
|
||
|
||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||
</mxCell>
|
||
<mxCell id="caption" value="Watch 한 번으로 변경 스트림 수신 → SharedInformer 가 로컬 캐시 갱신 → WorkQueue 가 폭주 흡수 → Worker 가 Lister 로 캐시 read 후 Reconcile 호출" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||
</mxCell>
|
||
|
||
</root>
|
||
</mxGraphModel>
|
||
</diagram>
|
||
</mxfile>
|