Experiment Metrics KO - k-p2p-lab/kpl-v3 GitHub Wiki
์คํ ์งํ ์ ์
Wiki home โบ ํ๊ตญ์ด ๋ฌธ์ ยท ์์ด ์๋ฌธ
๋ฌธ์ ์๋ด ยท ์์ค ์ ์ฅ์
์ด ๊ฐ์ด๋๋ v3๊ฐ ๊ตฌํํ ๊ณ์ฐ์ ์ ์ํฉ๋๋ค. ๋ฉ์ธ Metricsยท์ ์ฅ ์ฐ๊ตฌ ๊ทธ๋ฆผยท๋์ญํญ์ ์๋์์ ๊ตฌ๋ถํ ์ ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ๋ก์ ํธ ๊ณตํต ์ฐ๊ตฌ ๋ฐฐ๊ฒฝ์ ์ฐ๊ตฌ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. Grafana๋ ๋ชจ๋ํฐ๋ง, ๋ด๋ณด๋ด๊ธฐยท๋ณด์กดยท์ญ์ ๋ ์ ์ฅ ๊ฒฐ๊ณผ์์ ์ค๋ช ํฉ๋๋ค.
Churn ๋๋ฌ๋ฅ : session-window-v1
์ฃผ ์งํ์ ์ง๋ฌธ์ **๊ณ ์ ์์ ๊ธฐ๊ฐ ์ ์ฒด์ ๊ฑธ์ณ ๊ณ์ ๊ตฌ๋ ํ ์๊ฒฉ ์ ํ๋ฆฌ์ผ์ด์ ์ธ์ ์ค ๋ช ๊ฐ๊ฐ ๋ง๊ฐ ์ ์ ์์ ํ๋๊ฐ?**์ ๋๋ค. ์ง์ ๊ตฌ๋ ์ ์กฐ๊ฑด์ผ๋ก ํ๋ฏ๋ก ์ต์ด ๋์ ๋ชจ๋๊ฐ churn์ ๊ฒฌ๋๊ณ ์์ ํ ํ๋ฅ ๊ณผ๋ ๋ค๋ฆ ๋๋ค. ๋ฐํ ์์ ๋์ ๋๋ฌ๋ฅ , ์์ ์ธ์ coverage, ๊ด์ธก ํ์ง์ ํจ๊ป ํ์ธํ์ญ์์ค.
๊ด์ธก ๋จ์๋ (run, topic, message, ์์ ์ธ์
) ์์
๋๋ค. ๊ฐ์ node ID๋ฅผ ์ฌ์ฌ์ฉํด๋ ํ๋ก์ธ์ค ์ฌ์์์ ์ ์ธ์
์
๋๋ค. ์ฑ๊ณต ๋ฐํ์ publish ์ด๋ฒคํธ๊ฐ ์์ง๋ ๋ฉ์์ง๋ง ๋ถ์ํฉ๋๋ค. ์์ฒญ ์คํจ๋ ์์
์คํจ์ด๋ฉฐ, RPC ์๋ต์ด ๋ถ๋ช
ํํด๋ ์ค์ ๋ฐํ ํ telemetry๊ฐ ๋์ฐฉํ๋ค๋ฉด ์ฑ๊ณต ๋ฐํ์ ๊ด์ธกํ ์ ์์ต๋๋ค.
๊ณ ์ ๊ธฐ๊ฐ๊ณผ ๊ตฌ๋ ์ฆ๊ฑฐ
publish phase์ deliveryWindow๋ 0๋ณด๋ค ํฌ๊ณ 1์๊ฐ ์ดํ์ธ Go duration์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 10s์
๋๋ค. ์คํ ์ ์ ์ง์ ํ๊ณ ๋น๊ตํ๋ ์คํ์๋ ๊ฐ์ ๊ฐ์ ์ฌ์ฉํ์ญ์์ค.
t๋ ๋ฐํ์๊ฐ ๋ก์ปฌ ๋ฐํ ์ ๊ธ์ ํ๋ํ ๋ค payload๋ฅผ ์์ฑํ๊ณ ์ธ์ฝ๋ฉํ๊ธฐ ์ ์ ์ธก์ ํ ์ ํ๋ฆฌ์ผ์ด์
์๊ฐ์
๋๋ค. Peer๋ Topic.Publish๊ฐ ์ฑ๊ณตํ ๋ค์๋ง ์ด ์๊ฐ์ publish ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ๋ง๊ฐ์ d = t + deliveryWindow์ด๋ฏ๋ก payload ์ค๋น์ ๋ก์ปฌ PubSub ์ฒ๋ฆฌ ์๊ฐ๋ ํฌํจํฉ๋๋ค. Controller ์์ฒญ ์๊ฐ์ด๋ ํ์ฌ ํ๋ฉด์ Peer ์๋ก ๋์์ ์ ํ์ง ์์ต๋๋ค.
Peer๋ ์ค์ ๊ตฌ๋
์ค์ ์ ์๋ฃํ ๋ค measurement_start์ sessionId์ ์ ํํ fields.subscribedTopics๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ๊ฐ์ ํ๋ก์ธ์ค์์ 2์ด๋ง๋ค measurement_checkpoint๋ฅผ ๋ณด๋ด๋ฉฐ ์ ์์ ์ธ ์ธ์
์ข
๋ฃ ๋ measurement_stop์ ๊ธฐ๋กํฉ๋๋ค. ์ด๋ ๊ณ์ธก๋ ์ ํ๋ฆฌ์ผ์ด์
์ธ์
์ ์ฆ๊ฑฐ์ด๋ฉฐ ๋ฌผ๋ฆฌ์ uptime์ ์ธก์ ํ๋ ์ฅ์น๊ฐ ์๋๋๋ค. checkpoint ์ฃผ๊ธฐ๋ ์์ ๋ง๊ฐ์ ์ ์ ์๊ฐ์ด ์๋๋๋ค.
๋ฉ์์ง๋ง๋ค ๋์ผ runยทtopic์ ๊ธฐ๋ก๋ ์ธ์ ์์ ๋ฐํ์๋ฅผ ์ ์ธํ๊ณ ๋ค์ ์งํฉ์ ์ฌ๊ตฌ์ฑํฉ๋๋ค.
- ํ์ธ๋ ๋ฐํ ์์ ๋์ K:
t์ด์ ๋๋ ๊ฐ์ ์๊ฐ์ ๊ตฌ๋ ์ ์์ํ๊ณ , checkpoint ๋๋ stop์ด ๋์ผ ์ธ์ ์t๊น์ง ์ง์์ ์ฆ๋ช ํฉ๋๋ค.t์ดํ ์์ํ๊ฑฐ๋t์ด์ ยท๊ฐ์ ์๊ฐ์ ์ข ๋ฃ๊ฐ ํ์ธ๋ ์ธ์ ์ ์ ์ธํฉ๋๋ค. - ์์ ๋์ S: K ์ค
d์ดํ ๋๋ ๊ฐ์ ์๊ฐ์ checkpoint/stop์ด ์์ผ๋ฉฐd์ ์๋ ๊ตฌ๋ ์ธ์ ์ด ์ข ๋ฃ๋์ง ์์ ๋์์ ๋๋ค. - ์ดํ D: K ์ค
d์ ์ stop์ด ๊ธฐ๋ก๋ ์ธ์ ์ ๋๋ค. ๋ ๋๊ธฐ ์ ์ ์์ ํ๋๋ผ๋ ์์ ๋์์ ๋ถ์์ ๋ถ๋ชจ์์ ๋ชจ๋ ์ ์ธํฉ๋๋ค. ํ์ธ๋ ๋ฐํ ์์ ๋์์๋ ๋จ์ต๋๋ค. - ์ง์ ์ฌ๋ถ ๋ถ๋ช
C: K์ ์ํ์ง๋ง
d์ ์ดํ๊ณผd๊น์ง์ ์ง์ ์ด๋ ์ชฝ๋ ๋ก๊ทธ๋ก ์ฆ๋ช ํ์ง ๋ชปํ ๋์์ ๋๋ค. - ๋ฐํ ์์ ๊ฐ์ฉ์ฑ ๋ถ๋ช
:
t์ ์ ์์ํ ํ๋ณด ์ธ์ ์ด์ง๋งt์๋ ์กด์ฌํ๋์ง ๊ธฐ๋ก์ผ๋ก ์ฆ๋ช ํ์ง ๋ชปํ ๋์์ ๋๋ค. K ๋ฐ์ ๋๊ณ ๊ด์ธก ํ์ง๋ก ๋ณ๋ ๋ณด๊ณ ํฉ๋๋ค.
ํ์ธ๋ ๋ฐํ ์์ ์์๋ ์ ์ธ ๊ฐ์ง ์ง์ ๊ฒฐ๊ณผ ์ค ์ ํํ ํ๋๊ฐ ๋์ํ๋ฏ๋ก K = S + D + C๊ฐ ์ฑ๋ฆฝํฉ๋๋ค. ๊ฐ์ ์ข
๋ฃ๋ ๋ ์ข
๋ฅ์ ๋ถ๋ช
๊ผฌ๋ฆฌ ๊ตฌ๊ฐ์ ๋จ๊ธธ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ดํ์ด๋ ์์ ์คํจ๋ก ์๋ ๋ถ๋ฅํ์ง ์์ต๋๋ค.
Agent๋ ํ๋ก์ธ์คยท์ปจํ
์ด๋ ์ข
๋ฃ๋ฅผ ํ์ธํ๋ฉด measurement_terminated๋ ๊ธฐ๋กํ ์ ์์ต๋๋ค. Controller๋ ์ด Agent ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ๋ Agent ํธ์คํธ์ ์๊ฐ์ Controller ์์ ์๊ฐ์ผ๋ก ๋ฐ๊พธ๊ณ ์๋ ๊ฐ์ fields.sourceTimestamp์ ๋ณด์กดํฉ๋๋ค. ์ด ์์ ์๊ฐ์ ํธ์คํธ ๊ฐ ๋น๊ต ๊ฐ๋ฅํ ์ข
๋ฃ ์๊ฐ์ ์ํ์ด๋ฉฐ ์ ํํ ์ฌ๋ง ์๊ฐ์ด๋ ์์ checkpoint๊ฐ ์๋๋๋ค. ๋ฐํ ์ ์ข
๋ฃ๊ฐ ํ์คํ ์ธ์
์ ์ ์ธํ๊ฑฐ๋, ๋ณ๋ Peer checkpoint๋ก ๋ฐํ ์ ์์กด์ด ์ด๋ฏธ ์ฆ๋ช
๋ ๊ฒฝ์ฐ ๋ง๊ฐ ์ ์ดํ์ ํ์ ํ ์ ์์ต๋๋ค. ๋ถ๋ช
๊ผฌ๋ฆฌ ๊ตฌ๊ฐ์ด ๋ง๊ฐ๊น์ง ์ด์ ์์์์ ์ฆ๋ช
ํ์ง๋ ๋ชปํฉ๋๋ค. Docker churn์ ๊ฐ์ ์ ๊ฑฐ๋ฅผ ์ ์งํ๋ฉฐ ๊ฐ์ ์ข
๋ฃ๋ Peer์ ์ ์ ์ข
๋ฃ telemetry drain์ ์คํํ์ง ์์ต๋๋ค.
Transport ๋จ์ , GRAFT/PRUNE, mesh ์ ๊ฑฐ, ์ค๋๋ inventory, offline Agent๋ ๊ตฌ๋ ์ธ์ ์ stop ์ฆ๊ฑฐ๊ฐ ์๋๋๋ค. ํ ํด๋ก์ง์์ ์์ ์ง์๋ ์งํ๊ฐ ์ข์์ง์ง ์์ต๋๋ค. ์ดํ ๋์ฐฉํ ๋์ผ ์ธ์ ์ ์ฆ๊ฑฐ๋ ์ด์ ์ ๋ถ๋ช ๋ถ๋ฅ๋ฅผ ์ ์ ํ ์ ์์ต๋๋ค.
๊ตฌ๋
๊ธฐ๊ฐ์ [t, d)์
๋๋ค. ์ ํํ d์์ ์ข
๋ฃํ ์ธ์
์ ํด๋น ๊ธฐ๊ฐ ๋์ ๊ณ์ ๊ตฌ๋
ํ ๊ฒ์ผ๋ก ๋ณด๊ณ , ์ ํํ d์ ์์ ํ ๋ฉ์์ง๋ ๊ธฐํ ๋ด ์ฑ๊ณต์
๋๋ค. t์์ ์ด๋ฏธ ์ข
๋ฃํ ์ธ์
์ ๋ฐํ ๋น์ ๋์์์ ์ ์ธํฉ๋๋ค.
๊ธฐ๊ฐ ์๋ฃ, ์์ , ๊ด์ธก ๋ถ๋ช
d๊ฐ ์ง๋์ง ์์ ๋ฉ์์ง๋ pending์ด๋ฉฐ ํ์ ๋์ ์ ์ง๊ณ์์ ์ ์ธํฉ๋๋ค. ๊ธฐ๊ฐ์ด ์ง๋ ๋ฉ์์ง๋ ํด๋น ์์ ์ธ์
์์ ์๋ ์๊ณ ๊ท์น์ ๋ฐ๋ผ ๋ง๊ฐ์ ์ถฉ์กฑํ๋ ๊ฐ์ฅ ์ด๋ฅธ ์ ํจ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ์ฑ๊ณต์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๋ง๊ฐ ํ ์์ ์ late์ด๋ฉฐ ๊ธฐํ ๋ด ์ฑ๊ณต์ ์๋๋๋ค. ๋ฐํ์ ๋ก์ปฌ ์์ ๊ณผ ๋ฆ์ join์ ํฌํจํ์ง ์์ต๋๋ค.
Peer ์ด๋ฒคํธ์๋ ์๋ณธ sessionId, ์ฆ๊ฐํ๋ sequence, ์ฌ์๋์๋ ์ ์ง๋๋ eventId๊ฐ ์์ต๋๋ค. ์์ ๊ธฐ๋ก์ด ์์ ๋๋ measurement_start๋ถํฐ ํด๋น ๊ธฐ๊ฐ์ ๋ฎ๋ ์ธ์
์ฆ๊ฑฐ๊น์ง ์๋ณธ sequence prefix๊ฐ ์ฐ์์ธ ๊ฒฝ์ฐ์๋ง ํ์ธ๋ ๋ฏธ๋๋ฌ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ค๊ฐ ๋ฒํธ ๋๋ฝ์ด๋ ์๋ชป๋ ์๊ฐ ์์๊ฐ ์์ผ๋ฉด ์์ ์ฌ๋ถ๋ unknown์
๋๋ค. ์ฌ์๋๋ก ๊ฐ๊ฒฉ์ด ์ฑ์์ง ์ ์์ต๋๋ค. ๋ง๊ฐ ๊ฒฝ๊ณผ๋ telemetry ์์ง ์๋ฃ๋ฅผ ๋ปํ์ง ์์ผ๋ฏ๋ก ํ์ ์ง๊ณ๋ ๋ฆ์ ๋ฐฐ์น๋ก ์ ์ ๋ ์ ์์ต๋๋ค.
ํ์ธ๋ ์์ ์ ์๋ฅผ S, ๊ธฐํ ๋ด ์ฑ๊ณต์ R, ์์ ์ฌ๋ถ ๋ถ๋ช ์ U, ํ์ธ๋ ๋ฏธ๋๋ฌ์ F๋ผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
S = R + U + F
์์ ๋์ ๋๋ฌ๋ฅ ํํ = R / S
์์ ๋์ ๋๋ฌ๋ฅ ์ํ = (R + U) / S
U๊ฐ 0์ด๋ฉด ์ยทํํ์ด ๊ฐ์ต๋๋ค. ์ด๋ ๋๋ฝ๋ ๊ด์ธก์ผ๋ก๋ถํฐ ๊ณ์ฐํ ๋ ผ๋ฆฌ์ ๋ฒ์์ด๋ฉฐ ํต๊ณ์ ์ ๋ขฐ๊ตฌ๊ฐ์ด ์๋๋๋ค. ๋ถ๋ชจ๊ฐ 0์ด๋ฉด N/A์ ๋๋ค. ๋น์จ์ ๋์ด๋ ค๊ณ unknown์ ๋ถ๋ชจ์์ ์ ๊ฑฐํ์ง ์์ต๋๋ค. ๊ฐ์ฉ์ฑ ๋ถ๋ช ์ ๋ณ๊ฐ ๋ฌธ์ ์ ๋๋ค. ์ด ๋ฒ์๋ ํ์ธ๋ ์์ ์ธ์ ์ ๋ํ ๊ฐ์ด๋ฉฐ ๋ฏธ์ง์ ์ ์ฒด ๋ชจ์ง๋จ๊น์ง ์ค๋ช ํ์ง ์์ต๋๋ค.
lateDeliveries๋ ๊ธฐํ ๋ด ์ฑ๊ณต์ด ์๋ ์์ ์์ ๋ณ๋ ์ง๋จ๊ฐ์
๋๋ค. ํด๋น ์์ ๊ด์ธก ์์ ์ฑ์ ๋ฐ๋ผ ํ์ธ๋ ๋ฏธ๋๋ฌ์ด๋ ์์ ๋ถ๋ช
์ค ํ๋์ ์ด๋ฏธ ํฌํจ๋ฉ๋๋ค. S = R + U + F์ late๋ฅผ ๋ค ๋ฒ์งธ ๊ฒฐ๊ณผ๋ก ๋ํ์ง ๋ง์ญ์์ค.
ํ์ธ๋ ๋ฐํ ์์ ๋์ ๋๋ฌ๋ฅ ์ ์ดํ๊ณผ ์ง์ ์ฌ๋ถ ๋ถ๋ช
์์ ๋ถ๋ชจ์ ์ ์งํ๋ฉฐ ์ดํ ์ธ์
์ ๊ธฐํ ๋ด ์์ ๋ ๋ถ์์ ํฌํจํฉ๋๋ค. K์ ๊ธฐํ ๋ด ์ฑ๊ณต์ Rk, ์์ ์ฌ๋ถ ๋ถ๋ช
์ Uk๋ผ ํ๋ฉด ํ์ ๋ฒ์๋ Rk / K๋ถํฐ (Rk + Uk) / K๊น์ง์
๋๋ค.
์์ coverage๋ ๋ค์ ๋ ผ๋ฆฌ์ ๋ฒ์๋ก ํ์ํฉ๋๋ค.
์์ coverage ํํ = S / K
์์ coverage ์ํ = (S + C) / K
๋ ๋ณด์กฐ ์งํ๋ K > 0์ด๋ฉด ์ ๊ณตํ๋ฉฐ, ํ์ธ๋ ๋ฐํ ์์ ๋์์ด ํ๋๋ ์์ ๋๋ง N/A์
๋๋ค. ๋ฐํ ์์ ๊ฐ์ฉ์ฑ ๋ถ๋ช
์์ K ๋ฐ์ ๋๊ณ measurementIncomplete์ ํจ๊ป ๊ด์ธก ํ์ง ๊ฒฝ๊ณ ๋ก ๊ณ์ ํ์ํฉ๋๋ค. ์ด ๊ฐ๋ค์ด 0์ด ์๋์ด๋ ํ๋ณดํ ์ฆ๊ฑฐ์ ๊ฒฐ๊ณผ๋ฅผ ์จ๊ธฐ์ง ์์ต๋๋ค. ๋ฒ์๋ ํ์ธ๋ ์ง๋จ์ ์กฐ๊ฑด์ผ๋ก ํ๋ฉฐ ๋ณด์ด์ง ์๋ ๋ชจ์ง๋จ ์ ์ฒด๋ฅผ ์ค๋ช
ํ์ง ์์ต๋๋ค. ๊ด์ธก๋ sequence stream์ ์ธก์ ๋ฒ์๋ฅผ ํ์ธํ ์ ์์ผ๋ฉด measurementIncomplete๋ฅผ ์ค์ ํ์ง๋ง, ์์ ๊ด์ธก๋์ง ์์ ์ธ์
์ด๋ stream์ ์์ ๋ก๊ทธ๋ง์ผ๋ก ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ false๋ ์ค์ ๋ชจ๋ Peer๋ฅผ ๋น ์ง์์ด ์ธก์ ํ๋ค๋ ์ฆ๋ช
์ ์๋๋๋ค.
metrics.json์์ publicationAvailabilityUnknownPairs๋ K ๋ฐ์ ํ๋ณด ์, continuityUnknownPairs๋ C, stableCoverage๋ ํํ, stableCoverageUpperBound๋ ์ํ์
๋๋ค. ํธํ์ฑ์ ์ํด availabilityUnknownPairs๋ ๋ unknown ๋ฒ์ฃผ์ ํฉ๊ณ๋ฅผ ๊ณ์ ์ ๊ณตํฉ๋๋ค.
Controller์ ๊ธฐ์กด targetNodeIds ์์ฒญ ์ง์ ์ค๋
์ท์ ์ถ๊ฐ ๋๋ฝ ์ ๊ฒ ์๋ฃ๋ก๋ง ์ ์งํฉ๋๋ค. ๋ชฉ๋ก์ ์๋ ์์ ์์๊ฒ ์ ํจํ ์ธ์
์์ ๊ธฐ๋ก์ด ์ ํ ์์ผ๋ฉด ์ธก์ ๋ถ์์ ์ผ๋ก ํ์ํฉ๋๋ค. ๊ทธ ์์ ์๋ฅผ ๋ถ๋ชจ์ ๋ฃ๊ฑฐ๋ ์ค์ ๋ฐํ ์์ ์ ์์กด ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฐ์ง๋ ์์ต๋๋ค. ๊ณ์ธก ๊ธฐ๋ก๊ณผ ์ด ์ค๋
์ท ์์ชฝ์ ์๋ ์ธ์
์ ์ฌ์ ํ ๋ณด์ด์ง ์์ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ฒ์ ๊ตฌ๋ ์ 10๋ช ์ ๊ธฐ๋ก์ ๋ชจ๋ ํ๋ณดํ์ต๋๋ค. ๋ง๊ฐ ์ ์ 2๋ช ์ด ๋ ๋ฌ๊ณ ๊ทธ์ค 1๋ช ์ ๋ ๋๊ธฐ ์ ์ ์์ ํ์ต๋๋ค. 8๋ช ์ ๊ธฐ๊ฐ ๋ด๋ด ๊ตฌ๋ ํ๊ณ ์ด ์ค 7๋ช ์ด ์ ๋ ์์ ํ์ต๋๋ค. telemetry๊ฐ ์์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ๋์ ์กฐ๊ฑด๋ถ ๋๋ฌ๋ฅ = 7 / 8 = 87.5%
๋ฐํ ์์ ๋์ ๋๋ฌ๋ฅ = 8 / 10 = 80%
์์ coverage = 8 / 10 = 80%
์ผ์ฐ ์์ ํ ์ดํ์๋ ์์ ๋์์ ๋ถ์์ ๋ถ๋ชจ์์ ํจ๊ป ์ ์ธํฉ๋๋ค. ๊ทธ ์ฑ๊ณต๋ง ๋จ๊ธฐ๊ณ ์์ ํ์ง ๋ชปํ ์ดํ์๋ฅผ ์ ๊ฑฐํ๋ฉด ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋์ ์๊ฒฉ์ด ๋ฌ๋ผ์ง๋๋ค.
์ง๊ณ๋ ์์ ๋์ ์ ๊ฐ์ค์
๋๋ค. ๊ธฐ๊ฐ์ด ์ง๋ ๋ฉ์์ง๋ค์ ์ฑ๊ณต ์์ ๋์ ์๋ฅผ ๊ฐ๊ฐ ํฉํ ๋ค ๋๋๋ฉฐ ๋ฉ์์ง๋ณ ๋ฐฑ๋ถ์จ์ ๋จ์ ํ๊ท ํ์ง ์์ต๋๋ค. ๋์ 1๋ช
์ค 1๋ช
์ฑ๊ณต, ๋ค์ ๋ฉ์์ง๋ 3๋ช
์ค 1๋ช
์ฑ๊ณต์ด๋ฉด 2 / 4 = 50%์ด๋ฉฐ 66.7%๊ฐ ์๋๋๋ค. ์์ ๊ธฐ๊ฐ์ ๋ฐ๊พธ๋ฉด ๊ธฐํ ๋ด ์ฑ๊ณต๋ฟ ์๋๋ผ ๋๊น์ง ๋จ๋ ์ง๋จ๋ ๋ฌ๋ผ์ง๋ฏ๋ก ๊ฐ์ ๊ธฐ๊ฐ์ ๋น๊ตํ๊ณ coverage๋ฅผ ๋ณ๊ธฐํ์ญ์์ค.
์๊ณ์ ์์ง ํ๊ณ
๋ฐํยท๊ตฌ๋ ยทcheckpointยทstopยท์์ ์๊ฐ์ ์๋ก ๋ค๋ฅธ ํธ์คํธ์์ ๊ธฐ๋ก๋ฉ๋๋ค. ๊ฐ Peer๋ ์์ํ ๋ ์ต๋ 5์ด ๋์ Controller health ํ๋ณธ์ ์ต๋ 7๊ฐ ์์งํฉ๋๋ค. ๋น ๋ฅธ ์คํจ๊ฐ ๋ชจ๋ ์๋๋ฅผ ์ฆ์ ์์งํ์ง ์๋๋ก ์คํจํ ์๋ ์ฌ์ด๋ฅผ 250ms ๋์๋๋ค. RTT์๋ timestamp ์๋ต ๋ณธ๋ฌธ์ ์์ ยท๋์ฝ๋ฉ๊น์ง ํฌํจํ๋ฏ๋ก ๋ณธ๋ฌธ ์ ์ก ์ง์ฐ๋ ์ค์ฐจ ๋ฒ์์ ๋ฐ์๋ฉ๋๋ค. RTT๊ฐ ๊ฐ์ฅ ์์ ํ๋ณธ์ ์์ฒญ ์ค๊ฐ์ ์ผ๋ก ์ธก์ ์๊ฐ์ Controller ์๊ณ์ ๋ง์ถฅ๋๋ค. ์ด ์์ ์ด ์คํจํด๋ Peer๋ ๋ฏธ๋๊ธฐํ ์ํ๋ก Ready๊น์ง ์งํํ๊ณ 5์ด๋ง๋ค ๋ค์ ์๋ํฉ๋๋ค. ๋๊ธฐํ๋ ๋ค์๋ 30์ด๋ง๋ค ๊ฐฑ์ ํฉ๋๋ค.
์ฑ๊ณตํ ํ๋ณธ์ ์ ๋ขฐ ๊ธฐ๊ฐ์ 2๋ถ์
๋๋ค. ๊ณ์๋ ๊ฐฑ์ ์คํจ๋ก ์ด ๊ธฐ๊ฐ์ด ์ง๋๋ฉด timestamp ์ฐ์์ฑ์ ์ํด ๋ง์ง๋ง offset์ ์ ์งํ์ง๋ง ์ ๋ขฐํ ์ ์๋ ์๊ณ metadata๋ ๋ ์ด์ ๋ถ์ด์ง ์์ต๋๋ค. ์ดํ ์ฑ๊ณตํ๋ฉด metadata๋ฅผ ๋ค์ ์ ๊ณตํฉ๋๋ค. ์ ํจํ ํ๋ณธ์ด ์์ ๋ ์ด๋ฒคํธ์ clockBasis, clockOffsetMs, clockUncertaintyMs๋ฅผ ๊ธฐ๋กํ๋ฉฐ, ๊ธฐ๋ณธ uncertainty๋ RTT์ ์ ๋ฐ์
๋๋ค. ์์ ๊ณผ ์ธก์ ๊ฒฝ๊ณ์ timestamp๋ ๊ฐ์ Peer ์ธ์
์์์ ํญ์ ์ฆ๊ฐํฉ๋๋ค. ์๊ณ ๋ณด์ ๊ฐ์ด ๋ค๋ก ์ด๋ํด ๊ด์ธก ์์๋ฅผ ์งํค๋ ค๊ณ timestamp๋ฅผ ์์ผ๋ก ์กฐ์ ํ๋ฉด, ์ ์ถ์ ์๊ฐ๊ณผ์ ์ฐจ์ด ์ ์ฒด๋ฅผ ํด๋น ๊ด์ธก์ uncertainty์ ๋ํฉ๋๋ค. clockOffsetMs๋ ํ๋ณธ์์ ์ป์ offset์ ๊ทธ๋๋ก ๊ธฐ๋กํฉ๋๋ค. Envelope๋ ๋ฐํ์ uncertainty๋ฅผ ์ด๋ฐํ๊ณ ์์ ์๋ ์์ชฝ ๊ฐ์ ๋ํ latencyUncertaintyMs๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
Controller๋ ๋จ๋ฐฉํฅ ์ง์ฐ ์ถ์ ์ด 0์ด๋ ์์ ๋ง๊ฐ ๊ฒฝ๊ณ๋ฅผ ๋์ ๋ ์ด ๋ฒ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฝ๊ฐ ์์์ธ ์ถ์ ๋ uncertainty ๋ฒ์ ์์์ ์ธ๊ณผ์ ์ผ๋ก ๊ฐ๋ฅํ๊ณ ํ์คํ ๊ธฐํ ๋ด๋ผ๋ฉด ์์ ์ฑ๊ณต์ผ๋ก ์ธ์ ํ๋, ์์ ๊ฐ์ ์ง์ฐ histogram์์ ์ ์ธํฉ๋๋ค. ๋ฒ์ ์ ์ฒด๊ฐ ๋ฐํ ์ ์ด๋ฉด ๋ฌดํจ, ์ ์ฒด๊ฐ ๋ง๊ฐ ํ๋ฉด late, ๋ง๊ฐ์ ๊ฑธ์น๋ฉด unknown์ ๋๋ค. ์ฃผ๊ธฐ์ ์ธก์ ์ Controller์ ์ฐ๊ฒฐ๋ ๋์ drift๋ฅผ ์ค์ด์ง๋ง ์์ฒญ ์ค๊ฐ์ ์ถ์ ๊ณผ ์ผ์์ ๋จ์ ์ด ํธ์คํธ ์๊ณ ๋๊ธฐํ๋ฅผ ๋์ฒดํ์ง๋ ์์ต๋๋ค. ํนํ ์ฅ์๊ฐ churn ์คํ์์๋ ๋ชจ๋ ํธ์คํธ์ chrony/NTP๋ฅผ ๊ณ์ ํ์ฑํํ์ญ์์ค. ๊ณ์ธก๋ ์ธ์ ์ ์ฐ์์ฑ์ด ๋ฌผ๋ฆฌ์ ์ฐ๊ฒฐ์ ์ฐ์์ฑ์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค.
์ด uncertainty ๊ณ์ฐ์ ๋ฐํ์์ ์์ ์์ ์ ๋ขฐ ์๊ณ metadata๋ฅผ ๋ชจ๋ ๊ฐ์ง envelope ์์ ์ ์ ์ฉํฉ๋๋ค. Raw ์์ ๊ณผ ๋ฏธ๋๊ธฐํ envelope ์์ ์ ๊ธฐ๋ก๋ point timestamp๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ตฌ๋ ๋์ ํ์ ๊ณผ ์ค๋ณต์ ์์ ๊ธฐ๊ฐ ๊ฒ์ฌ๋ point timestamp๋ฅผ ๋น๊ตํฉ๋๋ค. ์ด ํ์ ์ ์๊ณ uncertainty๋ฅผ ๋์ ์งํฉ์ ๊ฒฝ๊ณ๊น์ง ์ ํํ์ง ์์ต๋๋ค. join, stop์ด๋ ๋ง๊ฐ์ ๊ฐ๊น์ด ๊ฒฐ๊ณผ๋ฅผ ํด์ํ ๋ ์ด ํ๊ณ๋ฅผ ํจ๊ป ๋ณด๊ณ ํ์ญ์์ค.
Peer telemetry๋ ํ๋๊ฐ ์๋ ์ฌ์๋์ ์ ์ ์ข
๋ฃ ์ drain์ ์ฌ์ฉํฉ๋๋ค. Agent๋ ํ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ์ฑ๊ณต ์๋ต ํ ๋ฐฐ์น๋ฅผ ๋ฒ๋ฆฌ๋ ๋์ backpressure๋ฅผ ์ ์ฉํ๋ฉฐ ์ ์ ์ข
๋ฃ ๋ Peer ์ ๋ฆฌ๋ฅผ ํ์ฉํ ๋ค ์ ํ ์๊ฐ ๋ด ์ต์ข
drain์ ์ํํฉ๋๋ค. ํ ์ด๊ณผ, ์ข
๋ฃ ์ ์ ์์ง, ํ๋ก์ธ์คยทAgentยทController ์คํจ๋ก ๊ด์ธก์ด ๋๋ฝ๋ ์ ์์ต๋๋ค. sequence๋ ์ผ๋ถ ๋๋ฝ๊ณผ ํ์ธ๋ ๋ฏธ๋๋ฌ์ ๊ตฌ๋ถํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๊ฑฐ๋ ์์ ๋ณด์ด์ง ์์ ์ธ์
์ ์กด์ฌ๋ฅผ ์ฆ๋ช
ํ์ง ์์ต๋๋ค. scope: all์ ๊ณ์ธก ๊ฒฝ๋ก๋ ํผ์ํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ํจ๊ป ์ ์ค ์นด์ดํฐ ๋ฐ incomplete/unknown ํ์๋ฅผ ๋ณด์กดํ์ญ์์ค.
์ฒซ ์์ ๋๋ฌ์๊ฐ
๊ธฐ๊ฐ์ด ์ง๋ฌ๊ณ ์์ ๋์์ ์ํ๋ฉฐ ์ ๋ ์ฑ๊ณตํ ์๊ฒฉ ์๋ง ์ง์ฐ ํ๋ณธ์ ํฌํจํฉ๋๋ค. ๊ธฐํ ๋ด ์ฒซ ์ ํจ Subscription.Next ์์ ์๊ฐ์์ ๋ฐํ์๊ฐ ๋ก์ปฌ ๋ฐํ ์ ๊ธ ํ๋ ํ ์ค๋นํ envelope ์๊ฐ์ ๋บ๋๋ค. payload ์์ฑ, ์ง๋ ฌํ, PubSub ์ฒ๋ฆฌ, ๋คํธ์ํฌ์ ์์ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ฅผ ํฌํจํ๊ณ ControllerโAgent ์ ๋ฌ ๋ฐ ๋ก์ปฌ ๋ฐํ ์ ๊ธ ๋๊ธฐ๋ ์ ์ธํฉ๋๋ค.
raw์๋ ์ ํ๋ฆฌ์ผ์ด์
๋ฐํ ์๊ฐ์ด ์์ผ๋ฏ๋ก ์ธ์
๊ธฐ๊ฐ ๋๋ฌ๋ฅ ์๋ ํฌํจํ๋ ์ง์ฐ์ N/A์
๋๋ค. ๋ก์ปฌยทํ์ ์์ , ์ดํยท๋ฆ์ join, ์ง์ฐ ๋ฏธ์ธก์ ์ ๋ถํฌ์์ ์ ์ธํฉ๋๋ค. uncertainty ๋ฒ์๋ก ๊ธฐํ ๋ด ์์ ์ ์ธ์ ํ ๊ฒฝ์ฐ์๋ ์์ point estimate๋ invalidLatencySamples์ ๊ธฐ๋กํ๊ณ ์ง์ฐ ๋ถํฌ์์ ์ ์ธํฉ๋๋ค.
UI์ metrics.json์ ์ฐ์ ํ๊ท , nearest-rank P95, latencySamples๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฏธ์์ ์ด๋ unknown์ 0ms๊ฐ ์๋๋๋ค. ๊ด์ธก๋ ๊ธฐํ ๋ด ์ฑ๊ณต๊ณผ ์์ ๊ตฌ๋
์ ์กฐ๊ฑด์ผ๋ก ํ ์ง์ฐ์ด๋ฏ๋ก ๋๋ฌ๋ฅ ๋ฒ์์ coverage๋ฅผ ๋ฐ๋์ ํจ๊ป ๋ณด์ญ์์ค.
invalidLatencySamples๋ ์์ ์์์ ์ ํํ ๊ธฐํ ๋ด envelope์ ์ง์ฐ ๊ฐ์ด ๋ฌดํจ์ด๊ฑฐ๋, ์ ํจํ ๊ธฐํ ๋ด ์์ ์ด ์์ผ๋ฉด์ ๊ด์ธก ์์ ์ด ์๊ฐยท์ธ์
์์ ๊ฒ์ฌ์ ์คํจํ ๊ฒฝ์ฐ ํด๋น ์์ ์
๋๋ค. ๋ง๊ฐ์ ๊ฑธ์น๋ uncertainty ๊ตฌ๊ฐ๋ ํฌํจํ ์ ์์ผ๋ฏ๋ก ๋จ์ํ histogram์์ ์ ์ธํ ์์ ํ๋ณธ ์๋ ์๋๋๋ค.
ํ๊ท ์ค๋ณต ๋ฉ์์ง
์ถ๊ฐ ๋ณต์ฌ๋ณธ์ ์์ ์ธก GossipSub RawTracer.DuplicateMessage๊ฐ ๊ด์ธกํ PubSub ๋ฉ์์ง ์บ์ hit์
๋๋ค. TCP ์ฌ์ ์ก, ๋ฐ๋ณต IHAVE, ๋ฐ์ดํธ ์, ๋ ๋ฒ์งธ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ์๋ฏธํ์ง ์์ต๋๋ค.
ํ๊ท ์ ์์ ๋์์ ๊ธฐํ ๋ด ์ฑ๊ณต ์์์ ๊ฐ์ ์์ ๊ธฐ๊ฐ ์์ ๊ด์ธกํ ์ถ๊ฐ ๋ณต์ฌ๋ณธ ์๋ฅผ ์ฑ๊ณต ์ ์๋ก ๋๋๋๋ค. ๋ณต์ฌ๋ณธ์ด ์๋ ์ฑ๊ณต ์์ 0์ผ๋ก ํฌํจํ๊ณ ์ฑ๊ณต ์์ด ์์ผ๋ฉด N/A์
๋๋ค. ๋ก์ปฌยท์ดํยท๋ฆ์ join ์์ ์ ๋ฐ ๊ธฐ๊ฐ ๋ฐ์ ๋ณต์ฌ๋ณธ์ ์ ์ฒด ์ด๋ฒคํธ ์์๋ ๋จ์ง๋ง ํ๊ท ์์ ์ ์ธํฉ๋๋ค. ์ฑ๊ณต ์์ ์ถ๊ฐ ๋ณต์ฌ๋ณธ์ด 0, 1, 5๊ฐ์ด๋ฉด ํ๊ท ์ 6 / 3 = 2์
๋๋ค. ์ค๋ณต telemetry ๋๋ฝ์ ์ด ๊ด์ธก ํ๊ท ๋ ๋ฎ์ถ ์ ์์ต๋๋ค.
envelope ์ด๋ฒคํธ๋ ์ ํ๋ฆฌ์ผ์ด์
๋ฉ์์ง ID๋ก ์ฐ๊ฒฐํฉ๋๋ค. raw๋ pubsub-<hex native message ID>๋ฅผ ์ฌ์ฉํ๊ณ fields.pubsubMessageId์๋ ํด๋น native ID์ 16์ง์ ์ธ์ฝ๋ฉ์ ๋ด์ต๋๋ค. ID๋ ์ค์ ๋ ์ ์ญ ๋๋ topic๋ณ ๋ฉ์์ง ID ์ ์ฑ
์ ๋ฐ๋ฆ
๋๋ค. ๊ธฐ๋ณธ ๋ฐ์ ์+sequence ์ ์ฑ
์ ๊ฐ์ ๋ฐ์ดํธ์ ๋ณ๋ ๋ฐํ์ ๊ตฌ๋ถํ์ง๋ง sha256ยทtopic-sha256์ ๊ฐ์ ๋ด์ฉ์ ๋์ผ PubSub ๋ฉ์์ง๋ก ํฉ์น ์ ์์ต๋๋ค. Telemetry ์๊ด๊ด๊ณ ์ฒ๋ฆฌ๋ raw ๋ฉ์์ง์ ๋ฐ์ดํธ๋ฅผ ์ถ๊ฐํ์ง ์์ผ๋ฉฐ ์๋ณธ sequence๋ ๋ณ๋ ์นด์ดํฐ์
๋๋ค. ์ด๋ฒคํธ ID๋ ์ฌ์๋์๋ ์ ์งํ์ฌ Controller๊ฐ ํ ๋ฒ๋ง ์ ์ฅยท์ง๊ณํฉ๋๋ค.
GossipSub ์ ์ด ํธ๋ํฝ
KPL์ GossipSub SEND_RPC, RECV_RPC, DROP_RPC trace์ ํฌํจ๋ ์ ์ด metadata๋ฅผ ๊ด์ธกํฉ๋๋ค. Peer๋ RPC๋ง๋ค ๊ทธ ์์ ์กด์ฌํ๋ ๊ฐ ์ ์ด ํ์
์ ๋ํด send_*, recv_*, drop_* ์ด๋ฒคํธ๋ฅผ ํ๋์ฉ ๋ง๋ญ๋๋ค. ์ง์ suffix๋ ihave, iwant, idontwant, graft, prune์
๋๋ค. ๋ฐ๋ผ์ IHAVE์ IWANT๋ฅผ ํจ๊ป ๋ด์ ํผํฉ RPC๋ ๋ ์๊ณ์ด์ ๋ชจ๋ ํ ๋ฒ์ฉ ๋ฐ์๋ฉ๋๋ค.
์ธ ์์น๋ ๋จ์๊ฐ ์๋ก ๋ค๋ฆ ๋๋ค.
- RPC ์๋ ํด๋น ์ ์ด ํ์ ์ ํฌํจํ envelope ์์ ๋๋ค. ํ์ ์ ์ฒด๋ฅผ ํฉํ๋ฉด ํ๋์ ํผํฉ envelope๊ฐ ์ฌ๋ฌ ๋ฒ ํฌํจ๋ ์ ์์ต๋๋ค.
- Entry ์๋ RPC ์์ repeated protobuf control entry ์์ ๋๋ค.
- ๋ฉ์์ง ID ์๋ IHAVE, IWANT, IDONTWANT entry ์์ ID ์ฐธ์กฐ ์ถํ ํ์์ ๋๋ค. ๊ฐ์ ID์ ๋ฐ๋ณต ์ฐธ์กฐ๋ ๋ฐ๋ณตํด ์ธ๋ฉฐ unique ๋ฉ์์ง ์๋ ์ ๋ฌ ์๊ฐ ์๋๋๋ค.
PRUNE peer-exchange record๋ ๋ณ๋๋ก ์ง๊ณํฉ๋๋ค. IHAVE, GRAFT, PRUNE์๋ topic ํ๋๊ฐ ์์ผ๋ฏ๋ก ์์ ์ด๋ฒคํธ์ fields.topics, fields.topicEntryCounts, IHAVE์ fields.topicMessageIdCounts์ ์ ๋ ฌ๋ topic๋ณ ์ ๋ณด๋ฅผ ๋ณด์กดํฉ๋๋ค. ํ RPC๊ฐ ์ฌ๋ฌ topic์ ๋ด์ ์ ์๊ณ IWANT/IDONTWANT์๋ wire topic์ด ์์ผ๋ฏ๋ก ์ต์์ ์ด๋ฒคํธ topic์ ๋น์ ๋ก๋๋ค. ๋ฐ๋ผ์ Prometheus counter๋ topic label ์์ด run, Agent, ๋ฐฉํฅ, ์ ์ด ํ์
์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค. ๋ค์ด๋ก๋ํ metrics.json์๋ ์ ํํ ๊ฐ์ events.jsonl ๊ฒฝ๊ณ์์ ์ฌ๊ตฌ์ฑํ Agent๋ณ ๋ด์ญ์ด ๋ค์ด๊ฐ๋๋ค.
send๋ ๋ก์ปฌ outbound queue๊ฐ RPC๋ฅผ ์๋ฝํ๋ค๋ ๋ป์ด๋ฉฐ stream write๋ ์๊ฒฉ ์์ ์ ์ฆ๋ช
ํ์ง ์์ต๋๋ค. recv๋ ์ดํ router admission๊ณผ flood limit ํ๋จ ์ ์ inbound ๊ด์ธก์
๋๋ค. ๋ ๋ฐฉํฅ์ ๋ํ๋ฉด ๊ฐ์ ์ ์ก์ ์ ๋ ๊ด์ธก์ ์ค๋ณตํด ์
์ ์์ผ๋ฏ๋ก ๊ณ ์ wire RPC ์ด์๋ก ํด์ํ๋ฉด ์ ๋ฉ๋๋ค. drop์ queue ํฌํ๋ oversized RPC ๊ฐ์ ๋ก์ปฌ ์ก์ ์ ํ๊ธฐ์ด๋ฉฐ netem ํจํท ์์ค์ด ์๋๋๋ค. ๊ธฐ์กด์ ๋จ์ graft์ prune ์ด๋ฒคํธ๋ ๋ก์ปฌ mesh ์ ์ด๋ฅผ ๋ปํ๋ฏ๋ก wire send_graft/recv_graft, send_prune/recv_prune์ ๋ถ๋ฆฌํฉ๋๋ค.
v2 ์ฌํ ๊ฐ์ด๋์์ ์ ์ด trace์ ํธํ์ฑ ์ฐจ์ด๋ฅผ ์ค๋ช
ํฉ๋๋ค. IDONTWANT ๋ฐ์์๋ GossipSub v1.2 ์ง์๊ณผ ๋ฉ์์ง ํฌ๊ธฐ๋ ์ํฅ์ ์ค๋๋ค. ๊ณ ์ ๋ ๊ธฐ๋ณธ๊ฐ์์๋ ๋ณดํต data๊ฐ 1,024๋ฐ์ดํธ ์ด์์ผ ๋ ์์ฑ๋๋ฏ๋ก ์ด๋ฅผ ์ํํ๋ ค๋ฉด payload๋ฅผ ํค์ฐ๊ฑฐ๋ gossipsub.params.iDontWantMessageThreshold๋ฅผ ๋ฎ์ถ์ญ์์ค.
P2P ์คํธ๋ฆผ ๋์ญํญ
๋์ญํญ ํ๋ณธ์ ํ๋ก์ธ์ค ์ธ์ ๋ง๋ค ์ค์ libp2p ์คํธ๋ฆผ ๋ฐ์ดํธ๋ฅผ ์ ๋๋ค. ์ ์ก๋ฅ ์ ๋์ ๋ฐ์ดํธ ์ฐจ์ด๋ฅผ ์์ค์ ๋จ์กฐ ๊ฒฝ๊ณผ์๊ฐ ์ฐจ์ด๋ก ๋๋๋ฉฐ, ์ ๊ตฌ๋ ๋์ ์งํฉ์ด๋ ์์ ๋ง๊ฐ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์ง๊ณํฉ๋๋ค. ์ ๋ฌยท์ค๋ณต ๋ณต์ฌ์ ํ๋กํ ์ฝ ์ ์ด ํธ๋ํฝ์ ํฌํจํ๊ณ HTTP ๊ด๋ฆฌ ํธ๋ํฝยทtransport ์ค๋ฒํค๋ยท๋ฌผ๋ฆฌ ํ์ ์ฉ๋์ ์ธก์ ๋ฒ์์์ ์ ์ธํฉ๋๋ค.
metrics.bandwidth, ์ ์ฅ ๋ถ์ ์ฐจํธ, kpl_p2p_* ์งํ๋ ์ ์ก๋ยท๊ตฌ๊ฐ ์ ์ก๋ฅ ยท์ข
๋ฃ ํ๋ณธ ํ์ง์ ์ ๊ณตํฉ๋๋ค. ์ค์ ์ ํ์ธ network.rateMbps๋ publish/deliver ์ด๋ฒคํธ์ PubSub data ํฌ๊ธฐ๋ฅผ ๋ํ๋ kpl_message_bytes_total๊ณผ๋ ๋ค๋ฅธ ๊ฐ์
๋๋ค. ๋จ์ยทํ๋กํ ์ฝ ๊ท์ยทํ๋ณธ ๋๋ฝยท์ฌ์์ ๋์์ Bandwidth ์ธก์ ์ ์ฐธ๊ณ ํ์ญ์์ค.
์ ์ฅ ๊ฒฐ๊ณผ ์ฐ๊ตฌ ์งํ
์ ์ฅ ๋ถ์ ์๋ต์๋ ๋ ์ ์ ์์ญ์ด ์์ต๋๋ค. metrics ๊ฐ์ฒด๋ ์์ ์ธ์
๊ธฐ๊ฐ ๋๋ ๊ณผ๊ฑฐ ์งํ ์ ์๋ฅผ ์ฌ์ฉํ๊ณ , research ๊ฐ์ฒด๋ ์ถ๊ฐ v2 ์ฐ๊ตฌ ๊ทธ๋ฆผ์ ์ํด definition: "v2-corrected-observations-v1"์ ์ฌ์ฉํฉ๋๋ค. FRTยทreachabilityยทDRC๋ผ๋ ์ด๋ฆ์ด ๊ฐ์๋ ๋ ๊ฐ์ ์๋ก ๋์ฒดํ ์ ์์ต๋๋ค. ์ฐ๊ตฌ ์งํ๋ ๋ฉ์ธ Metrics ์นด๋๋ kpl_window_* Prometheus ๊ณ์ด์ ์ถ๊ฐ๋์ง ์์ต๋๋ค.
| ํญ๋ชฉ | ๋ฉ์ธ ์ธ์ ๊ธฐ๊ฐ Metrics | ์ ์ฅ research |
|---|---|---|
| ์์ ์ ๋จ์ | ๋ฉ์์ง ร ๊ตฌ๋ ์ธ์ | ๋ฉ์์ง ร Node ID, ๋น๋ฐํ ๋ ธ๋์ ๊ธฐ๋ก๋ ์ต์ด ์์ |
| ๋ชจ์ง๋จ๊ณผ ์๊ฐ | ๊ณ ์ ๋ฐํยท๋ง๊ฐ ๊ธฐ๊ฐ์ ๊ตฌ๋ ์ฆ๊ฑฐ | ์ต์ด ์์ ์์ ๋ค์ ๊ตฌ๋ ํ ๋น๋ฐํ ๋ ธ๋์ ํฉ์งํฉ. ์์ ์ด ์์ผ๋ฉด ๋ฐํ ์์ |
| ์คํ ๋๋ฌ๋ฅ ์ง๊ณ | ์์ ์ ์ฑ๊ณต ์์ ๋ถ๋ชจ๋ฅผ ํฉ์ฐํ๊ณ unknown ๋ฒ์ ํ์ | ๋ฉ์์ง๋ณ ์ฐ๊ตฌ ๋๋ฌ๋ฅ ์ ํ๊ท . ๋์ ์ ํ ๊ณก์ ์ ์ ์ฒด ์ ๊ฒฉ ์์ ์ / ๋ฉ์์ง๋ณ ๋ชจ์ง๋จ ํฉ |
| ์ง์ฐ | ์์ ์๊ฒฉ ์์ ์ ํจํ ๊ธฐ๊ฐ ๋ด envelope ์์ , UI๋ ๋ฐ๋ฆฌ์ด | ๋ฉ์ธ ๊ธฐ๊ฐยท์งํฉ ์ ํ ์์ด ์ป์ ์์๊ฐ ์๋ ์ต์ด ์์ ๊ฐ, ์ด ๋จ์ |
| ์ค๋ณต | ์ฑ๊ณตํ ์์ ์๊ฒฉ ์์ ๊ธฐ๊ฐ ๋ด ์ถ๊ฐ ์ฌ๋ณธ ํ๊ท | ๋ฉ์์ง๋ณ ๊ธฐ๋ก๋ ๋น๋ก์ปฌ ์ถ๊ฐ ์ฌ๋ณธ ์. drc_per_node_count๋ ๊ด์ธก GossipSub ํ๊ท ๋
ธ๋ ์, drc_per_target์ ํด๋น ๋ฉ์์ง์ ์์ ๋ชจ์ง๋จ์ผ๋ก ๋๋ |
์ฐ๊ตฌ ๋ชจ์ง๋จ์ JOIN/LEAVE์ ์ธก์ ์๋ช
์ฃผ๊ธฐ ๊ด์ธก์ ์ฌ์ฉํฉ๋๋ค. ํด๋น ํ ํฝ์ ๊ตฌ๋
์ด๋ ฅ์ด ์์ ๋๋ง dispatch targetNodeIds๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ถ๋ชจ๊ฐ 0์ด๊ฑฐ๋ ์์ผ๋ฉด N/A์
๋๋ค. ๋ฉ์์ง๋ณ population๊ณผ populationBasis๋ฅผ ๋ณด์กดํฉ๋๋ค. ์ด ๋ชจ์ง๋จ์ ํ๋ณธ ์๊ฐ์ด ์์ ๊ธฐ๋ก์ ๋ฐ๋ผ ์ ํด์ง๋ ๊ด์ธก ์กฐ๊ฑด๋ถ ์งํฉ์ด๋ฏ๋ก ๋ฉ์ธ ์ธ์
์งํ์ ์ ๋ฌ ์ฑ๊ณต๊ณผ ๋
๋ฆฝ์ ์ธ ๋์ ์ ์ ๊ท์น์ ๋ง์กฑํ์ง ์์ต๋๋ค. ๊ทธ ์ฐ๊ตฌ ์ง๋ฌธ์๋ ๋ฉ์ธ ๋๋ฌ ๋ฒ์์ coverage๋ฅผ ์ฌ์ฉํ๊ณ , v2 ๋ฐฉ์ ๊ณก์ ์ ๋น๊ตํ ๋๋ ์ด ์ฌํ ์ ์๋ฅผ ๋ช
์ํ์ญ์์ค. ์ฐ๊ตฌ ๊ธฐ๋ก์ ์ธ์
์์ค sequence์ ์์ ํ prefix๋ก ๋ฏธ์์ ์ ํ์ ํ๋ ๊ฒ์ฌ๋ ์ ์ฉํ์ง ์์ต๋๋ค.
์ฐ๊ตฌ FRT๋ ๊ธฐ๋ก๋ ์์๊ฐ ์๋ envelope ์ง์ฐ์ ์ฐ์ ์ฌ์ฉํฉ๋๋ค. ์์ผ๋ฉด ๋ฐํยท์์ ์์ชฝ์ ์ ํจํ ์๊ฐ ๋๊ธฐํ ํ์๊ฐ ์๊ฑฐ๋ ๊ฐ์ ๋น์ด ์์ง ์์ Agent ID๋ฅผ ๊ฐ์ง ๋๋ง ๋ก๊ทธ ์๊ฐ ์ฐจ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฉ์ธ raw ์ง์ฐ์ด N/A์ฌ๋ ์ฐ๊ตฌ ๋ถ์์๋ raw ๋ฉ์์ง์ ๋ก๊ทธ ์๊ฐ ์ถ์ ์ด ๋์ฌ ์ ์์ต๋๋ค. ์ด ์๊ฐ ์ฐจ์ด์ ๋ชจ์ง๋จ ๊ฒฝ๊ณยท์ค๋ณต ์๊ณ์ดยท์ถ์ฒ ์ฐ๊ด์๋ ์๊ฐ ๋ถํ์ค์ฑ ๊ตฌ๊ฐ์ ์ ํํ์ง ์์ต๋๋ค. ๋ฐํ ๊ธฐ๋ก์ด ์๋ ์์ ์ orphanReceipts๋ก ์ง๊ณํ๋ฉฐ ๋ฐํ์ด๋ 0 ์ง์ฐ์ ๋ง๋ค์ด ๋ฃ์ง ์์ต๋๋ค.
๋ฉ์์ง ๋ด๋ถ์ average, deviation, median, count๋ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ณธ์ ํ๊ท ยท๋ชจ์ง๋จ SDยท์ค์๊ฐยท๊ฐ์์
๋๋ค. ์ง์ ์ค์๊ฐ์ ๊ฐ์ด๋ฐ ๋ ๊ฐ์ ํ๊ท ์
๋๋ค. ๋ฉ์์ง ํต๊ณ์ ์คํ ์ฐ๊ตฌ ์์ฝ์ ๋ฉ์์ง ํ๊ท ์ ๋์ผ ๊ฐ์ค์น๋ฅผ, ๊ทธ๋ํ ์์ฝ์ ๋ถ์์ ๋จ๊ธด snapshot์ ๋์ผ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํฉ๋๋ค. Control ์์ฝ์ ๊ธฐ๋ก ๋ฒ์์ ์ ์ฒด ํ์์ด๋ฉฐ RPCยทentryยทID ์ฐธ์กฐยทmesh ์ ์ด๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์คํ ๊ฐ ๋น๊ต ๋ง๋๋ ํ๋ณธ SD์ด๋ฉฐ ๋ฐ๋ณต 1ํ์๋ SD๊ฐ ์์ต๋๋ค. ์ ํยท์ค๋ณต ์ ๊ทํ ๊ณก์ ์ ๋์ผํ ์ ๊ฒฉ ๋ฉ์์งโ๋
ธ๋ ์งํฉ์ ์ฐ๋ฉฐ, ๋ชจ์ง๋จ๋น ์ค๋ณต ์ฌ๋ณธ์ 1์ ๋์ ์ ์์ต๋๋ค. Hop ๊ณก์ ์ ๋ฏธ๋ณต์ hop์ ์ ์ธํ๊ณ , eager/lazy ์ง์ฐ CDF๋ ๋ถ๋ฅ๋๊ณ ์ ํจํ ์๊ฐ์ด ์๋ ์์ ์ ์กฐ๊ฑด๋ถ์
๋๋ค. ๊ณก์ ๊ณผ ํจ๊ป ๋ฏธ๋ถ๋ฅ ์๋ฅผ ๋ณด๊ณ ํ์ญ์์ค.
์์ ๊ทธ๋ฃน๋ณ ์ง๊ณ
Delivery & Propagation ์ฐจํธ๋ All Peers์ Group: ์ด๋ฆ์ ํจ๊ป ํ์ํฉ๋๋ค. ๋ฐํ์์ ๊ด๊ณ์์ด ์์ ๋
ธ๋์ ๊ทธ๋ฃน์ ๊ธฐ์ค์ผ๋ก ํ๋ฉฐ, research.receiverGroups์ ํต๊ณ์ ๊ฒฝ๋ ์ฐจํธ ์๋ฃ๋ฅผ ๋ณด์กดํฉ๋๋ค. ์ ํยท๋๋ฌ๋ฅ ์ ๋ถ๋ชจ๋ ๊ฐ ๊ทธ๋ฃน์ ์์ ๋์ ๋ฉ์์งโ๋
ธ๋ ์์ด๋ฉฐ ์ค๋ณต๋ ์์ ๋
ธ๋์ ๊ท์ํฉ๋๋ค. ํด๋น ๊ทธ๋ฃน์ ์์ ๋์ ๋๋ ๋น๋ฐํ์์ ์์ ยท์ค๋ณต ๊ธฐ๋ก์ด ์๋ ๋ฉ์์ง๋ง ๊ทธ๋ฃน ํ๊ท ์ ํฌํจํฉ๋๋ค. ๋ค๋ฅธ ํ ํฝ์ด๋ ๊ทธ๋ฃน์ด ์ฐธ์ฌํ์ง ์์ ๊ธฐ๊ฐ์ ์ธ์์ ์ธ 0์ผ๋ก ๋ฃ์ง ์์ต๋๋ค. ์์ ๋์์ด ์์ง๋ง ์์ ์ด ์์ผ๋ฉด ๋๋ฌ๋ฅ ยท์์ ์๋ 0์ด๊ณ , ์๊ฐยทํ ๊ทผ๊ฑฐ๊ฐ ์๋ ๊ฐ์ ๊ฒฐ์ธก์ผ๋ก ์ ์งํฉ๋๋ค.
๊ฒฝ๋ก์ eager/lazy ์ถ์ ์ ์ ์ฒด ๋คํธ์ํฌ์์ ๋จผ์ ๊ณ์ฐํ ๋ค ์์ ์๋ฅผ ๊ทธ๋ฃน๋ณ๋ก ๋๋๋ฏ๋ก ๋ค๋ฅธ ๊ทธ๋ฃน์ ๊ฑฐ์น๋ ํ๋ ์ ์งํฉ๋๋ค. ๊ทธ๋ฃน FRTยท์กฐ๊ฑด๋ถ ๊ณก์ ์ ์์ ์ฐ๊ตฌ ์งํ ์ ์๋ฅผ ๋ฐ๋ฆ
๋๋ค. ๊ธฐ๋ณธ First-delivery Latency CDFยทHistogram์ ๊ธฐ๋ณธ ์งํ์ ๋์ผํ ์ ํจ ํ๋ณธ์ ๊ทธ๋ฃน๋ณ๋ก ๋ถํ ํ๋ฉฐ ํ์คํ ๊ทธ๋จ ๊ตฌ๊ฐ๋ All Peers์ ๊ฐ์ต๋๋ค. drc_per_node_count๋ ํด๋น ๊ทธ๋ฃน์ ๊ด์ธก๋ GossipSub ํ๊ท ๋
ธ๋ ์๋ฅผ ์ฌ์ฉํ๊ณ ๊ทผ๊ฑฐ๊ฐ ์์ผ๋ฉด ๊ฒฐ์ธก์
๋๋ค. ์์ Message Activity๋ ๋ฐํยท๋ก์ปฌยท์ง์ฐ ์ด๋ฒคํธ๋ฅผ ํฌํจํ๋ ์ ์ฒด ์คํ ์นด์ดํฐ๋ก ์ ์งํฉ๋๋ค.
์ Peer ์ด๋ฒคํธ์๋ ๋
ธ๋์ group์ ๋จ๊น๋๋ค. ๊ณผ๊ฑฐ ๊ฒฐ๊ณผ๋ ํ๋ฉด์ฉ ๋ค์ด์ํ๋ง์์ ์ ์ธ๋ ๊ฒ์ ํฌํจํ ์ ์ฅ ๊ทธ๋ํ์์ ๊ทธ๋ฃน์ ๋ณต์ํฉ๋๋ค. ์ ๋ณด ๋๋ฝยท์ถฉ๋์ Unknown Group์ผ๋ก ํ์ํ๊ณ ๋
ธ๋ ID์์ ๊ทธ๋ฃน์ ์ถ์ธกํ์ง ์์ต๋๋ค. ๋ฐฐ์น ์ฐจํธ๋ ๊ทธ๋ฃน ์ด๋ฆ์ ๋์์์ผ ์ ํจ run์ ๋์ผ ๊ฐ์ค์น๋ก ํ๊ท ํ๋ฉฐ, ์ธก์ ๋ 0์ ํฌํจํ๊ณ ์๋ ๊ทธ๋ฃน์ ์ ์ธํฉ๋๋ค. PNGยทCSV์๋ ๊ทธ๋ฃน ์๋ฆฌ์ฆ๋ฅผ ์ ์งํฉ๋๋ค. ์ค๋๋ ๋ถ์ ์บ์๋ ํ์ฌ ๊ณ์ฐ ๋ฒ์ ์์ ์ด ๋ ์ฌ์์ฑ๋ฉ๋๋ค.
์ฐ๊ตฌ ๊ทธ๋ํ ๊ด์ธก
Controller๋ ์ ์ ํ ๋ณด๊ณ ์์ ์ป์ ์ ์๋ transportยทKademliaยทGossipSub ๊ด๊ณ๋ฅผ observations.jsonl์ ๊ธฐ๋กํฉ๋๋ค. ๊ทธ๋ํ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ isolate๋ฅผ ํฌํจํ๊ณ ๋ฌด๋ฐฉํฅ ๊ณ ์ ๊ฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ ์ฅ๋ ํ๋กํ ์ฝ๋ณ ๊ทธ๋ํ์์๋ ๊ฐ์ GossipSub Peer ์์ ์ฌ๋ฌ ํ ํฝ์ ํ๋์ ์์ผ๋ก ํฉ์นฉ๋๋ค. ์ค์๊ฐ API๋ ํ ํฝ๋ณ ๊ฐ์ ์ ์ ์งํฉ๋๋ค. ๋ณด๊ณ ๋ ๊ด๊ณ์ด๋ฉฐ ํจํท ์ ์ก์ด๋ ํด๋ฌ์คํฐ ์ ์ฒด์ ์์์ snapshot ์ฆ๊ฑฐ๊ฐ ์๋๋๋ค. ํ ํด๋ก์ง๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
๋ถ์์ ๊ด์ธก ํ๋ณธ์ ์ต๋ 1,440๊ฐ๋ก ์ค์ด๋ ๋ง์ง๋ง ํ๋ณธ์ ๋ณด์กดํฉ๋๋ค. ๊ทธ๋ํ ํ๊ท ๊ณผ snapshot๋ณ ์ฐจ์ ํ๋ฅ ํ๊ท ์ ๋ถ์์ ๋จ๊ธด ํ๋ณธ์ ๋์ผ ๊ฐ์ค์น๋ฅผ ์ฃผ๋ฉฐ, ์๊ฐ ๊ธธ์ด๋ ๋
ธ๋ ์๋ก ๊ฐ์คํ์ง ์์ต๋๋ค. ์๋ณธ ๊ด์ธก ํ์ผ์ ๊ฒฐ๊ณผ ZIP์ ๋จ์ต๋๋ค. research.summary์ ์ผ๋ฐ ๊ทธ๋ํ ํค์ degreeDistribution, degreeFit์ ์ ์ฒด ๊ทธ๋ฃน์ GossipSub ๋ ์ด์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ๋กํ ์ฝยท๊ทธ๋ฃน๋ณ ์๊ณ์ด์ observations[].groups[].layers[]์ ์์ต๋๋ค.
| ํต๊ณ | ์ ์ |
|---|---|
| ํ๊ท ์ฐจ์ | isolate๋ฅผ ํฌํจํ 2E/N. average_degree_excluding_leaves๋ v2์ฒ๋ผ ์ ์ฒด ์ฐจ์ ํฉ / degree > 1์ธ ๋
ธ๋ ์. ๋ถ๋ชจ๊ฐ ์์ผ๋ฉด N/A |
| ์ง๊ฒฝ / ํ๊ท ์ต๋จ ๊ฒฝ๋ก | ๋๋ฌ ๊ฐ๋ฅํ ์๋ก ๋ค๋ฅธ ๋
ธ๋ ์๋ง ์ฌ์ฉ. connected_pair_fraction์ ๊ทธ ๋น์จ์ด๋ฉฐ ๋๋ฌ ๊ฐ๋ฅํ ์์ด ์์ผ๋ฉด ๊ฑฐ๋ฆฌ๋ N/A |
| Clustering | ์ง์ญ ์ผ๊ฐํ ๋น์จ ํ๊ท . degree < 2๋ 0 |
| Degree / betweenness / closeness ์ค์ฌ์ฑ | degree / N-1, ์ ๊ทํ Brandes betweenness, ๋๋ฌ ๋
ธ๋ ์๋ก ๋ณด์ ํ closeness |
| PageRank / eigenvector ์ค์ฌ์ฑ | ๊ฐ์ 0.85์ dangling ์ง๋ ๊ท ๋ฑ ๋ฐฐ๋ถ, A+I ๋ฐ๋ณต์ L2 ์ ๊ทํ ๊ณ ์ ๋ฒกํฐ. ๋ฏธ์๋ ด์ N/A์ด๋ฉฐ ๊ฐ์ ์ด ์๋ ๊ณ ์ ๋ฒกํฐ ํต๊ณ๋ N/A |
| Assortativity / modularity | ์ ๋ ์ฐจ์์ ์๊ด์ผ๋ก ๋ถ์ฐ 0์ด๋ฉด N/A. ํด์๋ 1ยทseed 1์ Louvain modularity |
๊ทธ๋ฃน ์ค์ฌ์ฑ์ ์ ์ฒด ๊ทธ๋ํ ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋น ๊ทธ๋ฃน ๋ ธ๋๋ฅผ ํ๊ท ํ๋ฉฐ ๊ทธ๋ฃน ์ ๋ ๊ทธ๋ํ์์ ๋ค์ ๊ณ์ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ฃน ์ฐจ์ยทclustering ์์ฝ๋ ์ ๊ณตํ์ง๋ง ์ ์ฒด ๊ทธ๋ํ์ ์ง๊ฒฝยทassortativityยทmodularity๋ฅผ ๊ทธ๋ฃน๋ง๋ค ๊ณ์ฐํ์ง๋ ์์ต๋๋ค. ๊ณผ๊ฑฐ ์ฐจ์ ์์ฝ๋ง์ผ๋ก ๋๋ฝ๋ ๊ฐ์ ๊ณผ ๊ฐ์ ๊ธฐ๋ฐ ์งํ๋ฅผ ๋ณต์ํ ์ ์์ต๋๋ค.
Student-t๋ ์ ์ฒด ๊ทธ๋ฃน GossipSub์ ์ฐจ์ ํ๋ฅ ์ ์ง์ ๊ฐ์ค ์ต๋์ฐ๋ ์ ํฉํ๋ฉฐ ์๋ก ๋ค๋ฅธ ์ฐจ์๊ฐ 3๊ฐ ์ด์์ด์ด์ผ ํฉ๋๋ค. ์๋ ด๊ณผ ํ๋ผ๋ฏธํฐ ๊ฒฝ๊ณ ์ํ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. ์ฐ์ ์ ํฉ ๋ฐ๋์ ์ ์ ์ฐจ์์ ํ๋ฅ ์ง๋์ ์๋ก ๋ค๋ฅธ ์์ ๋๋ค. ์ด์ฐจ ํ๋ผ๋ฏธํฐ ์์ธก๊ณผ ์ค๋ณต ํ๊ท๋ ์ ํํ case ํ๊ท ์ ์ ํฉํ๊ณ rankยทํ์ต ์๋ฃ Rยฒ๋ฅผ ํ์ํ๋ฉฐ, ์๋ณ๋์ง ์๋ ๋ชจ๋ธ์ ๊ณ์๋ ๋ง๋ค์ง ์์ต๋๋ค. ์ ๋ ฅยทํ๋ผ๋ฏธํฐ ์ ํ์ ๋น๊ต ๋๊ตฌ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์ ์ ๊ตฌ์ฑ์์ ์๊ณ์ด
์ ์ ๊ด์ธก์๋ ์ ํ์ ์ผ๋ก groups[].scoreComponents์ P1~P7, P3b, topic ์ํ ์กฐ์ ๊ฐ๊ณผ ๊ฐ์ ํ๋ณธ์ ์ด์ ์ ๋ํ count/mean/min/max๋ฅผ ํฌํจํฉ๋๋ค. ์ ์ ํ ๊ตฌ์ฑ ํญ๋ชฉ ํ๋ณธ๋ง ์ฌ์ฉํ๋ฉฐ ๊ด์ธก์ ๊ทธ๋ฃน ์์์ ๊ด์ธก์โ์๋ Peer ์ ์๋ก ๊ฐ์คํฉ๋๋ค. ๊ณผ๊ฑฐ ๊ธฐ๋ก์ ๋๋ฝ ํญ๋ชฉ์ ์ธก์ ๋ถ๊ฐ๋ก ์ ์งํฉ๋๋ค. ๊ตฌ์ฑ ํญ๋ชฉ ์ ์์ ์์ง ํ๊ณ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
๋ถ์ ๋ฒ์ 8์ ์ผ๋ฐ ๊ด์ธก ๋ชฉ๋ก์ ์ค์ด๊ธฐ ์ ์ ๋ชจ๋ ์๋ณธ ๊ด์ธก์์ scoreTimeline์ ์ถ์ถํฉ๋๋ค. ๊ฐ ํญ๋ชฉ์ group๊ณผ points๋ฅผ ๊ฐ์ง๋ฉฐ ๊ฐ ์ ์ ์๋ at๊ณผ components ํต๊ณ๊ฐ์ ์ ์งํฉ๋๋ค. ๋น ๊ทธ๋ฃน์ ๊ด์ธก์ ์ ์ฒด์ ์ง๊ณ์
๋๋ค. ๊ทธ๋ฃน๋ง๋ค ๊ฐ ๊ตฌ์ฑ์์์ ์ฒซ ๋ฒ์งธยท๋ง์ง๋ง ๊ธฐ๋ก ํ๋ณธ์ ํฌํจํด ์ต๋ 720๊ฐ ์ ์ ๋ณด์กดํฉ๋๋ค. ๊ด์ธก์ด๋ ๊ตฌ์ฑ์์ ๊ฐ์ด ๋น ์ง ๊ตฌ๊ฐ์ ๋ค์ ์ธก์ ์ ์ breakBefore๋ก ํ์ํ๊ณ , ์ ์ ์ค์ฌ๋ ๋จ์ ์ ์ ์งํฉ๋๋ค. ๊ณต๋ฐฑ์ ์ด์ ๊ฐ์ผ๋ก ์ฑ์ฐ๊ฑฐ๋ 0์ผ๋ก ๋ฐ๊พธ์ง ์์ต๋๋ค. ์๊ฐ์ด ์ญ์ ๋๊ฑฐ๋ ์ค๋ณต๋๋ฉด ์ฐ์์ฑ์ ํ์ ํ ์ ์์ด ํด๋น ๊ทธ๋ฃน์ ์ ๋ค์ ์๋ก ์ฐ๊ฒฐํ์ง ์์ต๋๋ค.
๊ฐ๋ณ ์ ์ฒด ๋ถ์๊ณผ ๋ฐฐ์น์ ๊ฐ ์์ถ Run์๋ scoreTimeline์ ๋ณด์กดํ๊ณ , ๊ฐ๋ณ ๋น๊ต์ฉ /summary์์๋ ์ ์ ์ ์ธํฉ๋๋ค. ์ฐจํธ๋ ์ด ์๊ณ์ด์ ์ฐ์ ์ฌ์ฉํ๋ฉฐ ๊ณผ๊ฑฐ ๋ถ์์์๋ observations๋ฅผ ์ฝ์ต๋๋ค. ๊ทธ๋ฃน๋ณ ์ธก์ ๊ฐ์ด ์์ผ๋ฉด ์ด๋ฅผ ํ์ํ๊ณ , ํด๋น ๊ตฌ์ฑ์์์ ๊ทธ๋ฃน๋ณ ์ธก์ ๊ฐ์ด ์ ํ ์์ผ๋ฉด ๊ธฐ๋ก๋ ์ ์ฒด ์ง๊ณ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐฐ์น ํ๊ท ์ Run๋ณ ๋์ผ ๊ฐ์ค์น๋ฅผ ์ ์งํ๊ณ ๊ฒฐ์ธก ํ๋ณธ์ ์ ์ธํฉ๋๋ค. ๊ฐ์ Run์ ๊ฐ์ ์๊ฐ์ ์ฌ๋ฌ ์ ์ด ์์ผ๋ฉด ๋ง์ง๋ง ์ ํ ๊ฐ์ ์ฌ์ฉํ๋ฉฐ, ๋ค์ ๊ฒฐ์ธก๊ฐ์ด ์ค์ธก๊ฐ์ ์ง์ฐ์ง ์์ต๋๋ค. ์ด์ ๋ถ์์ ์ฌ๊ณ์ฐํ๋ฉด ์ผ๋ฐ ๊ด์ธก ์ถ์ฝ ๊ณผ์ ์์ ์ ์ธ๋๋๋ผ๋ ์๋ณธ ๊ด์ธก์ ๋จ์ ์๋ ์์ธ ์ธก์ ๊ฐ์ ๋ณต์ํฉ๋๋ค. ๊ธฐ๋กํ์ง ์์ ํ๋ณธ์ ์์ฑํ๊ฑฐ๋ ์ด์ ์ผ๋ก ๊ตฌ์ฑ์์๋ฅผ ์ถ์ ํ์ง ์์ต๋๋ค.
Eager Push์ Lazy Pull ์ถ์
์ ํ์ HopWave wire ๋ณด๊ณ ๊ฐ์ Peer ๋ก๊ทธ์ ๋ณ๋๋ก ๋ณด์กดํฉ๋๋ค. ์ํ ์นด์ดํฐ์ ์๋ช ํ์ง ์๋ ๋ง์ง๋ง ์ก์ ํ์์ ๋ณต์ hop ์๋ ์๋ ์ถ์ ์ ๋์ ํ์ง ์์ผ๋ฉฐ, ํด๋น ํ๋๊ฐ ์์ด๋ ๊ณผ๊ฑฐ ๋ถ์ ์ ์๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
ํ์ฌ ๋ฐฉ๋ฒ์ originMethod: "message-id-preferred-graft-ihave-iwant-estimate-v2"์
๋๋ค. linkEstimate๋ ๊ด์ธก ๋ฐ์ ์์์ ์์ ์๋ก ํฅํ๋ ๋ง์ง๋ง ๊ฐ์ , source๋ ๋ฐํ์๋ถํฐ ๋ณต์ํ ๊ฒฝ๋ก์ ๋ถ๋ฅ์ด๋ฉฐ evidence์ ๊ทผ๊ฑฐ๊ฐ ๋จ์ต๋๋ค. Upstream trace ๋ฉํ์ ๋ณด์ ๋ฐ๋ฅธ ์ถ์ ์ด๋ฉฐ ์ง์ ๊ด์ธกํ ๋ฐ์ ํ ์์ธ์ด ์๋๋๋ค.
๊ด์ธกํ topology_applied๋ ํด๋น Peerยทํ ํฝ์ ์ด์ mesh/control ๊ทผ๊ฑฐ๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ๋ช
์์ ๊ทธ๋ํ ์ค์น๋ GRAFT/PRUNE ๊ตํ ์์ด ๋ฉค๋ฒ์ญ์ ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ ๋ topology_assignment๋ ๊ด์ธก ๋งํฌ๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ด๊ธฐํํ ์ ์์ต๋๋ค. ์ด๊ธฐํ ์๊ฐ ์ดํ์ control์ ์ดํ ๋ถ๋ฅ์ ๊ทผ๊ฑฐ๋ก ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, ์ IHAVE/IWANT ๊ด์ธก์ ์ pull ๊ทผ๊ฑฐ๊ฐ ๋ ์ ์์ต๋๋ค. ์ค์ ํ ๊ฐ์ ๋ง์ผ๋ก eager ์ก์ ์ ํ์ ํ์ง ์์ต๋๋ค. ๋ถ์ ํ์ ๋ฒ์ 7์ ์ด ๊ท์น์ ํฌํจํ๋ฉฐ, ๋์ฒด ๋ถ์ ์คํ ์ค์๋ ๊ธฐ์กด ์๋ฃ ๋ถ์์ ๊ณ์ ์ ๊ณตํฉ๋๋ค.
- ์ต์ด ์์ ๋ ํ์ฑ GRAFT๋ eager ํ๋ณด์ ๋๋ค. PRUNE์ ๊ทธ mesh ๊ทผ๊ฑฐ๋ฅผ ํด์ ํ๊ณ , ์ฐ๊ฒฐ ํด์ ยท๊ตฌ๋ ํด์ ยท์ธก์ ์ข ๋ฃ๋ ๊ด๋ จ๋ ์ด์ ๊ทผ๊ฑฐ๋ฅผ ๋ฌดํจํํฉ๋๋ค.
- ๊ฐ์ ๋ฐฉํฅ์ ๋ฐ์ ์ยท์์ ์ ์๊ณผ ํ ํฝ์์ IHAVE๋ณด๋ค ์๊ฒฉํ ๋์ค์ธ IWANT๋ lazy ํ๋ณด์ ๋๋ค. ํ์ ๊ตฌ๊ฐ์ ๋ฐํ ์์ , ํด๋น ์ด๊ธฐํ ์์ , ์์ 5์ด ์ ์ค ๊ฐ์ฅ ๋์ค๋ถํฐ ์์ ์ง์ ๊น์ง์ ๋๋ค. 5์ด๋ ๋ถ์ ๊ท์น์ด๋ฉฐ ํ๋กํ ์ฝ timeout์ด ์๋๋๋ค.
- ์์ธ ID ๋ชฉ๋ก์ ์ ๋ฌ๋
pubsubMessageId์ ์ผ์นํด์ผ ํ๋ฉฐ, ์ ๊ฐ์ ์ ์ฉ ๊ธฐ๋ก์ ์๊ฐ ์ฐ๊ด์ ์ฌ์ฉํฉ๋๋ค. ๋์ผ ๋ฉ์์ง์ ๋ฐ์ดํฐ RPC๋ ๋ณด์กฐ ๊ทผ๊ฑฐ์ ๋๋ค. ๋ก์ปฌ ์ ์ก ์ drop์ ์ฑ๊ณตํ control ์ฐ๊ด์์ ์ ์ธํฉ๋๋ค. - Push/pull ์ถฉ๋, Peer ๋๋ฝ, ์ฌ์ฉํ ์ ์๋ IDยท์๊ฐ๊ณผ ๋ฏธ๋ณต์ ๊ฒฝ๋ก๋ unknown์ ๋๋ค. ์๋ฆฐ ID ๋ชฉ๋ก์ ์์ฒญ์ด ์์๋ค๋ ์ฆ๊ฑฐ๊ฐ ์๋๋๋ค. ์์ ํ ๋ณต์ํ ๊ฒฝ๋ก์ ๋ชจ๋ ๊ฐ์ ์ด eager ์ถ์ ์ด๋ฉด eager, lazy ์ถ์ ๊ฐ์ ์ด ์์ผ๋ฉด lazy์ ๋๋ค. ๋ฏธ๋ณต์ยท์ํ ๊ฒฝ๋ก๋ ๊ฐ์ ๊ทผ๊ฑฐ๋ง ๋จ๊ธฐ๊ณ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ๋ถ๋ฅํ์ง ์์ต๋๋ค.
eager_count, lazy_count๋ ๋ถ๋ฅ๋ ์์ ๋ง ์ธ๋ฏ๋ก ๋ ๋ค 0์ด์ด๋ unknown_count๊ฐ ์์์ผ ์ ์์ต๋๋ค. ์ค์ ์ ํ ๋ฐฉ์์ด ์์๋ค๋ ๋ป์ด ์๋๋๋ค. ์กฐ๊ฑด๋ถ FRTยทreachability์ lazy-on/off ๊ธฐ์ฌ ๊ทธ๋ฆผ๋ ์ด ๋ถ๋ฅ ๋ฒ์์ ์ํฅ์ ๋ฐ์ต๋๋ค. ๊ธฐ์ค ์คํ๊ณผ์ ์ฐจ์ด๋ ๊ด์ธก ์ถ์ ์ด๋ฉฐ ์ธ๊ณผ ํจ๊ณผ์ ์ฆ๋ช
์ด ์๋๋๋ค. ์์ง ํ๋์ ์๋ต ํ๋๋ ์์ธ Peer ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์ง๊ณ ๋ฒ์, ๋ด๋ณด๋ด๊ธฐ, ๋ชจ๋ํฐ๋ง
์ ์์ฝ์ definition: "session-window-v1"์ ์ฌ์ฉํฉ๋๋ค. ๋ฐํ์ fields.measurementDefinition๊ณผ fields.deliveryWindow๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์ ์ฅ๋ ์ธ์
์ฆ๊ฑฐ, ๋ฐํยท์์ ์๊ฐ, ์๋ณธ sequence๋ก ๊ฐ์ ๊ณ์ฐ์ ์ฌ๊ตฌ์ฑํฉ๋๋ค.
- ์น ์นด๋๋ ๊ฐ์ฅ ์ต๊ทผ ์์ํ ์คํ ์ค ์คํ์ ํ์ํ๋ฉฐ ์นด๋ ์์ run์ ํ์ํฉ๋๋ค. ๋๊ธฐ ํ์ฐจ๊ฐ ์ด๋ฅผ ๋ฎ์ด์ฐ์ง ์์ต๋๋ค. ์คํ ์ค์ธ run์ด ์์ผ๋ฉด ์นด๋๋ฅผ ์ ์งํ๋ฉด์ ์คํ ์์น๋ฅผ ์ด๊ธฐ N/Aยท0์ผ๋ก ๋๋๋ฆฝ๋๋ค. ํด๋ฌ์คํฐ ์์น๋ ์ค์๊ฐ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. Snapshot API์๋ ๊ฐ์ฅ ์ต๊ทผ ์์ํ ์ข ๋ฃ ์คํ์ ์์ฝ์ด ๋จ์ผ๋ฉฐ ์ ์ฅ ๊ฒฐ๊ณผ์ ๋ด๋ณด๋ด๊ธฐ์ ์ธก์ ๊ฐ๋ ์ ์งํฉ๋๋ค.
- ์ต๊ทผ ์ด๋ฒคํธ 300๊ฐยทํ์ ํ 40๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด์ธกํ ์คํ ์ ์ฒด๋ฅผ ์ง๊ณํฉ๋๋ค. ์ธ๋ฑ์ค๋ ์ธ์ ยท๋ฉ์์งยท์์ ์ยท์ด๋ฒคํธ ID์ ๋น๋กํด ์ฆ๊ฐํ๋ฉฐ ๊ฒฐ๊ณผ ์ญ์ ๋๋ ํ๋ก์ธ์ค ์ฌ์์ ๋ ํด์ ๋ฉ๋๋ค.
published,delivered,duplicates๋ ์ ์ฒด ์ด๋ฒคํธ ์๋ฅผ ์ ์งํฉ๋๋ค. ์์ ์๋ ๋ก์ปฌยท๋ฆ์ join๋ ํฌํจ๋๋ฏ๋ก ์์ ์๋ฅผ ๋ฐํ ์๋ก ๋๋ ๊ฐ์ ๋๋ฌ๋ฅ ์ด๋ ํจํท ์์ค๋ฅ ์ด ์๋๋๋ค.- ZIP
metrics.json์ ์ ํํ ๊ฐ์ ๊ฒฝ๊ณ์events.jsonl์์ ์ฌ๊ณ์ฐํ๋ฉฐ Controller ์ฌ์์ ํ์๋ ๊ฐ๋ฅํฉ๋๋ค. ๊ธฐํ ๊ฒฝ๊ณผ ํ๋จ์๋ manifest์ ๊ณ ์ ํexportedAt์ ์ฌ์ฉํ๋ฏ๋ก ์ฌํ ๊ณ์ฐ์๋ ๊ฐ์ ์๊ฐ์ ์ ์ฉํ์ญ์์ค.deliveryWindows์๋ ๊ด์ธกํ ์ ํจ ์์ ๊ธฐ๊ฐ ์ค์ ๋ค์ด ๊ธฐ๋ก๋ฉ๋๋ค. ์ดํ telemetry๋ ํด๋น ๋ค์ด๋ก๋์ ํฌํจ๋์ง ์์ต๋๋ค. ๋ถ์์ ํ ๊ด์ธก์ unknown/incomplete๋ก ํ์ํ๋ฉฐ ํ์์ด ์์๋ ์ด๋ฒคํธ ๋ก๊ทธ๋ ์์น๋ฅผ ๋ง๋ค์ง ์๊ณ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์คํจ์ํต๋๋ค. - Prometheus
kpl_window_*gauge๋ run๋ณ ์์ ยทํ์ธ๋ ๋ฐํ ์์ ๋์ ์, ๋๋ฌ๋ฅ ๋ฒ์, coverage ๋ฒ์, pending, ์ดํ, ์ง์ ์ฌ๋ถ ๋ถ๋ช , ๋ฐํ ์์ ๊ฐ์ฉ์ฑ ๋ถ๋ช ๊ณผ ๊ด์ธก ํ์ง์ ์ ๊ณตํฉ๋๋ค. Grafana ์ธ์ ํจ๋์๋ Run ํํฐ๋ง ์ ์ฉํ๊ณ ์ฌ๋ฌ run์ ์์ ์์ผ๋ก ๊ฐ์คํฉ๋๋ค. ๋ฐํ ์์ ๋๋ฌ๋ฅ ๊ณผ coverage๋ ํ์ง ๊ฒฝ๊ณ ๊ฐ 0์ด ์๋์ด์๊ฐ ์๋๋ผ ํ์ธ๋ ๋ฐํ ์์ ๋ถ๋ชจ๊ฐ 0์ผ ๋๋ง N/A์ ๋๋ค. kpl_window_propagation_latency_seconds๋ ๊ฐ์ ์ฑ๊ณต ์์ runยท์์ Agentยทtopic์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค. Grafana๋ ์คํ ์ ์ฒด histogram ๋ถ์์๋ฅผ ๊ทผ์ฌํ๋ฉฐ ์น P95๋ ์ ํํ nearest rank์ ๋๋ค. ๋ฆ์ telemetry๋ก gauge์ ๋ฒํท์ด ์ ์ ๋ ์ ์์ดrate/increase๋์ ์ง์ ์กฐํํฉ๋๋ค. ํธ๋ํฝ ์ด๋ฒคํธ ์นด์ดํฐ์ rate ์๋ฏธ๋ ์ ์งํฉ๋๋ค.
๊ณผ๊ฑฐ ๊ฒฐ๊ณผ
dispatch-cohort-v1์ Controller ์์ฒญ ์ง์ ์ ready/online ๊ตฌ๋
์ ID๋ฅผ ๊ณ ์ ํ๊ณ ์ดํ ์ดํ์ ๋ถ๋ชจ์ ์ ์งํ์ผ๋ฉฐ ๋ฉ์์ง๋ณ ๋ง๊ฐ์ด ์์์ต๋๋ค. ๋ ์ค๋๋ ๋ฐ์ดํฐ์๋ ๋์ ์ซ์๋ง ์๊ณ ์์ ์ ID๊ฐ ์์ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ณผ๊ฑฐ ์ ์์ด๋ฉฐ ์ง์ ๊ตฌ๋
์ธ์
์ธก์ ์ผ๋ก ์ฌํด์ํ์ง ์์ต๋๋ค. ์ด์ kpl_delivery_*/kpl_propagation_latency_seconds๋ฅผ ์ ๊ธฐ๊ฐ ์งํ์ ํฉ์ฐํ์ง ๋ง์ญ์์ค. ์์ ์ด๋ฒคํธ๋ ๋ณด์กดํ๊ณ ํผํฉ ๋ก๊ทธ์ legacy/unscoped ๋ฐํ ์๋ ์ ์ธ๋ ๊ธฐ๋ก์ ํ์ํฉ๋๋ค. ๋ค์ด๋ก๋๋ก ์๋ ์๋ ์ธ์
์ฆ๊ฑฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ Grafana ์ธ์
ํจ๋์ ๊ณผ๊ฑฐ ๊ฒฐ๊ณผ๋ง ์ ํํ๋ฉด ํ์ํ ๊ฐ์ด ์์ต๋๋ค.
๊ตฌํ๊ณผ ๊ด๋ จ ๊ฐ์ด๋
์ง์ ๊ตฌ๋ ๊ธฐ๊ฐ, ์ฆ๊ฑฐ ๊ท์น, ์ ๊ฐ์ค, unknown ๋ฒ์์ ์ฑ๊ณต๋น ์ค๋ณต ๊ณ์ฐ์ v3์ ๋ช ์์ ์ค๊ณ ์ ํ์ ๋๋ค. ๊ด๋ จ ๋ฌธํ๊ณผ ๊ฐ๋ ๋น๊ต๋ ์ฐ๊ตฌ ๊ฐ์ด๋์์ ๊ด๋ฆฌํฉ๋๋ค. ์ด ์์์ ํ์ฌ ๊ตฌํ์ ์ค๋ช ํ๋ฉฐ v2 ํธํ์ฑ๊ณผ๋ ๋ ๋ฆฝ์ ์ ๋๋ค.
| ๊ตฌํ | ๋ด๋น ๋ด์ฉ |
|---|---|
| Peer ๋ฐํ๊ณผ ์ฐ๊ฒฐ | Envelope/raw ID, payload ์ค๋น, ์์ ์ง์ฐ๊ณผ ์ค๋ณต ์ฐ๊ฒฐ |
| Peer telemetry์ ์๊ณ ํ๋ณธ | ์ธ์ ์๋ช ์ฃผ๊ธฐ, ์๋ณธ sequence, ์ฌ์๋์ ์๊ณ metadata |
| ์ธ์ ๊ธฐ๊ฐ ์ง๊ณ | ๋์ ์งํฉ, ์์ ๋ฒ์, coverage, ์ง์ฐ๊ณผ ์ค๋ณต ์์ฝ |
| ๊ธฐ๊ฐ ์งํ ํ๊ท ์ฌ๋ก | ๋ง๊ฐ ๊ฒฝ๊ณ, ์ฆ๊ฑฐ ๋๋ฝ, churn๊ณผ ์์๊ฐ ๋ค๋ฐ๋ telemetry ์ฌ๋ก |
| Prometheus collector | Run gauge์ ์ฌ๊ตฌ์ฑํ ์ง์ฐ histogram |
| ์ฐ๊ตฌ ์ง๊ณ, ๊ทธ๋ํ, ์ถ์ฒ ์ถ์ | ์ ์ฅ ๊ฒฐ๊ณผ์ ๋ณ๋ ์ฐ๊ตฌ ์ ์ยทํ๋ณธ ๊ทธ๋ํยท๋ฉํ์ ๋ณด ์ถ์ |
| ๊ฒฐ๊ณผ ๋ด๋ณด๋ด๊ธฐ | ๋ค์ด๋ก๋์ ์ด๋ฒคํธ ๋ก๊ทธ ๊ฒฝ๊ณ์ ์งํ ์ฌ๊ณ์ฐ |
๊ทธ๋ํ ๋ ์ด์ด, Agent ๋ฒํธ์ ํ๋ฉด ์กฐ์์ ํ ํด๋ก์ง ๊ฐ์ด๋์์ ๊ด๋ฆฌํฉ๋๋ค. ํ๋ฉด ๋ณ๊ฒฝ์ ์ธก์ ๋์ ์งํฉ์ ๋ฐ๊พธ์ง ์์ต๋๋ค. ์ ์ฅ ๊ฒฐ๊ณผ์์ ์ ์ฅ ํ์ผ์ ๋ณด์กดยท์ญ์ ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ๊ฒฐ๊ณผ ์ญ์ ๋ ํด๋น ์งํ ์ธ๋ฑ์ค๋ฅผ ํด์ ํ์ง๋ง Peer๋ฅผ ์ข ๋ฃํ๊ฑฐ๋ Prometheus ์ด๋ ฅ์ ์ญ์ ํ์ง ์์ต๋๋ค. ๋ค์ด๋ก๋ยท์ญ์ endpoint๋ REST API ๊ฐ์ด๋์์ ์ ์ํฉ๋๋ค.
๊ฐ์ ์๋๋ฆฌ์ค ์ฌ๋ฌ ๋ฒ ์คํ
์ ์ฐจ๋ ์คํ๊ณผ ๋ฐ๋ณต์ผ๋ก ์ฎ๊ฒผ์ต๋๋ค.
์คํจ ํ ๋จ์ ํ์ฐจ ์ด์ด์ ์คํ
๋ฏธ์์ ํ์ฐจ ์ด์ดํ๊ธฐ์ ๋ฏธ์๋ฃ ํ์ฐจ ์ฌ์๋๋ ๋ณต๊ตฌ ๋ฐฉ์์ ์ฐธ๊ณ ํ์ญ์์ค.