V2 Reproduction KO - k-p2p-lab/kpl-v3 GitHub Wiki
v2 ์๋๋ฆฌ์คยท๋คํธ์ํฌ ์คํ ์ฌํ ๋ฒ์
Wiki home โบ ํ๊ตญ์ด ๋ฌธ์ ยท ์์ด ์๋ฌธ
๋ฌธ์ ์๋ด ยท ์์ค ์ ์ฅ์
๊ฒํ ๊ธฐ์ค์ kpl-v2์ ์ค์ Controller/Peer ์ฝ๋์ exp/exp-2603_churn-02.sh์
๋๋ค. ์ค๋ช
๋ฌธ์์ ์คํ ์ฝ๋๊ฐ ๋ค๋ฅผ ๋๋ ์คํ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์์ต๋๋ค. ์๋ ์ค์ ์ผ๋ก ์คํ์ ์ฃผ์ ์กฐ๊ฑด์ ์ฌํํ ์ ์์ผ๋, ๊ณผ๊ฑฐ ์คํ์ ํจํท ์์๋ ํ ํด๋ก์ง๊ฐ ๋์ผํด์ง๋ ๊ฒ์ ์๋๋๋ค.
์ด ํธํ์ฑ ์ธ๋ถ ์ฌํญ์ v3์์ ๊ด๋ฆฌํฉ๋๋ค. ํ๋ก์ ํธ ๊ณตํต ๋ฒ์ ์ด๋ ฅ๊ณผ ์ฐ๊ตฌ ๋ฐฐ๊ฒฝ์ ํ๋ก์ ํธ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์ปจํ ์ด๋ ๊ฒฉ๋ฆฌ์ ๋ฐฐ์น
์์ชฝ ๋ชจ๋ ํผ์ด ํ๋๋ฅผ ์ปจํ
์ด๋ ํ๋๋ก ์คํํฉ๋๋ค. v2๋ Swarm Service, v3๋ Agent๊ฐ ์์ฑํ๋ Docker ์ปจํ
์ด๋์
๋๋ค. v3 Peer์๋ ํธ์คํธ ํฌํธ, ํธ์คํธ ํ์ผ์์คํ
, Docker socket์ ๊ณต์ ํ์ง ์์ต๋๋ค. ๊ฐ Peer์ network namespace์๋ง qdisc๋ฅผ ์ค์นํ๋ฉฐ, ํ์ํ Peer์๋ง NET_ADMIN์ ๋ถ์ฌํฉ๋๋ค. CPUยท๋ฉ๋ชจ๋ฆฌ ์ ํ์ v2์๋ ์์์ผ๋ฉฐ, ํธ์คํธ ๋ถํ๊น์ง ๊ฒฉ๋ฆฌ๋๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
v2์ parallel join์ ํ Worker ํธ์คํธ๋ฅผ ๋ฌด์์ ์ ํํ ๋ค ServiceCreate ์์ฒญ์ ์์ฐจ ์ ์กํฉ๋๋ค. v3์์ ์ด์ ๋์ํ๋ ์ค์ ์ parallel: true, parallelism: 1, placement: single-agent์
๋๋ค. v2์ sequential join์ ๋
ธ๋๋ง๋ค ํธ์คํธ๋ฅผ ๋ค์ ์ ํํ๋ฏ๋ก parallel: false, placement: random์ ์ฌ์ฉํฉ๋๋ค. agentId๋ฅผ ์ง์ ํ๋ฉด ํน์ Agent์ ๊ณ ์ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ placement: balanced๋ ๋ถํ ๋ถ์ฐ ์ ์ฑ
์
๋๋ค.
Swarm์ ์ ํํ ๋ ธ๋๋ง๋ค Agent ํ๋๋ฅผ ์คํํ๋ฉฐ Peer ์ปจํ ์ด๋๋ ๊ณตํต attachable overlay๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค. ๋ฌผ๋ฆฌ ํธ์คํธ ๊ฐ ์ง์ฐ ์คํ์๋ Swarm ์ ์ฐจ๋ก Agent ๋ ธ๋๋ฅผ ์ต์ ๋ ๊ฐ ์ ํํ์ญ์์ค. Agent capacity ๋๊ธฐ, Docker CLI ๋น์ฉ, ์ค์ ๋จธ์ ๋ถํ์ ๋ฐ๋ผ ๋ชฉํ join rate์ ์ค์ ์์ rate๋ ๋ฌ๋ผ์ง๋๋ค. v2์ Swarm ์๋ ๋ณต๊ตฌ์ v3์ ์ข ๋ฃ ์ํ ๊ธฐ๋ก๋ ๋ค๋ฆ ๋๋ค.
Swarm ๋ค์ค ์๋ฒ์ฉ ๋ฐฐํฌ ๊ตฌ์ฑ๊ณผ ํ์ฅ์ฑ ๊ฒํ ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. Swarm์ global Agent๋ฅผ ์๋ฒ๋ณ๋ก ๋ฐฐ์นํ๊ณ Controller๊ฐ Peer๋ฅผ ๋ถ๋ฐฐํฉ๋๋ค. Agent task ์ฌ์์์ ๋ด๋น Peer๋ฅผ ์ ๋ฆฌํ๋ฉฐ, v2์ Peer Service ์ฌ์ค์ผ์ค๋ง์ ๊ทธ๋๋ก ์ฌํํ์ง๋ ์์ต๋๋ค. Peer ๊ด๊ณ ์ฃผ์ยทAgent๋ณ ์ง์ ์ ๊ทผยท์ญ์ ์๋ฃ๊น์ง์ capacity ๋ณด์กดยท์ ์ฒด Agent ๋ชจ๋ํฐ๋ง์ ๋ฐ์ํ์ต๋๋ค.
์์ฑ ๋์ค ์คํ์ ์ทจ์ํ๋๋ผ๋ Docker create์ ์๋ต์ ์ ํ์๊ฐ ๋ด ๊ธฐ๋ค๋ ค ์ปจํ
์ด๋ ID๋ฅผ ํ๋ณดํ ๋ค ์ ๊ฑฐํฉ๋๋ค. CLI๋ง ๋จผ์ ์ข
๋ฃํ์ฌ daemon์ ๋ฆ๊ฒ ์์ฑ๋๋ ์ปจํ
์ด๋๋ฅผ ๋จ๊ธฐ๋ ๊ฒฝํฉ์ ๋ฐฉ์งํฉ๋๋ค. Docker๊ฐ ์ญ์ ์งํ ์ค์ด๋ผ๊ณ ์๋ตํ๋ฉด ์ค์ ์๋ฉธ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. ๊ธฐ๋ณธ jobShutdownTimeout์ 3m์ด๋ฉฐ job ์ข
๋ฃ์ Peer ์ ๋ฆฌ์ ๊ฐ๊ฐ ์ ์ฉ๋ฉ๋๋ค. Swarm์ Controller ์ข
๋ฃ ์ ์๋ฅผ 10m, ๊ฐ Agent ์ข
๋ฃ ์ ์๋ฅผ 4m๋ก ์ค์ ํฉ๋๋ค. ์ข
๋ฃ ์ ์ฐจ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. Docker admission ์์ฒด์ deadline ์ด๊ณผ๋ daemon ์ฅ์ ๋ ์ค๋ฅ๋ก ๋ณด๊ณ ํ๋ฉฐ, ์ดํ ์ฌ์์ ์ ์์ label๋ก ์์ฌ ์ปจํ
์ด๋๋ฅผ ์ ๋ฆฌํฉ๋๋ค.
๋คํธ์ํฌ ์กฐ๊ฑด ๋์
| v2 ์ค์ /๋์ | v3 ์ค์ |
|---|---|
eth0 ์ ์ฒด ์ก์ ์ netem ์ ์ฉ |
network.scope: all (๊ธฐ๋ณธ p2p๋ P2P TCP๋ง ์ ์ฉ) |
delay.distribution์์ ํผ์ด๋น ๊ฐ ํ๋ ์ถ์ถ |
network.delayDistribution |
delay.deviation ๋ฐ๋ฆฌ์ด, ํจํท jitter |
jitter: 5ms, jitterDistribution: uniform |
loss, corrupt |
lossPercent, corruptPercent |
reorder.percentage, reorder.chance |
reorderPercent, reorderCorrelationPercent |
tbf.rate, tbf.burst, tbf.latency |
tbf.rateMbps, tbf.burstKbit, tbf.latency |
v2์ chance๋ ์ค์ tc ๋ช
๋ น์์๋ ์ฌ์ ๋ ฌ ์๊ด๊ณ์์
๋๋ค. rateMbps ๋จ๋
์ netem์ ํจํท ์ง๋ ฌํ ์ง์ฐ์ด๋ฉฐ TBF์ ๋๋ฑํ์ง ์์ต๋๋ค. TBF์ ์์ rateMbps๋ ํจ๊ป ์ค์ ํ ์ ์์ต๋๋ค. TBF latency๋ tc๊ฐ ์ง์ํ๋ 1us~4294967295us ๋ฒ์์ด๋ฉฐ ์์ ๋ง์ดํฌ๋ก์ด๋ ์ฌ๋ฆผํฉ๋๋ค.
network:
scope: all
delayDistribution:
model: normal
mean: 50ms
sigma: 10ms
min: 1ms
jitter: 5ms
jitterDistribution: uniform
lossPercent: 1
reorderPercent: 2
reorderCorrelationPercent: 25
tbf:
rateMbps: 10
burstKbit: 64
latency: 100ms
delayDistribution๋ Peer seed๋ก ํ ๋ฒ ์ํ๋งํฉ๋๋ค. ํจํท๋ง๋ค ๋ฐ๋๋ jitter์ ๋ณ๊ฐ์
๋๋ค. delay์๋ ๋ฐฐํ์ ์ด๋ฉฐ, jitter/reorder๊ฐ ํ์ฑํ๋๋ฉด ์์ min์ ์ง์ ํด์ผ ํฉ๋๋ค. v2๋ ์ด ๋จ์ ์ํ์ ์ ์ ms๋ก ์๋์ง๋ง v3๋ Go duration ์ ๋ฐ๋๋ฅผ ์ ์งํฉ๋๋ค. v2์ ์๊ฐ ๊ธฐ๋ฐ ๋์ ๋ฐ gamma ๊ตฌํ ์ค๋ฅ๊น์ง ๋ณต์ ํ์ง๋ ์์ต๋๋ค.
scope: all์ ์ ์ด API ์๋ตยทbootstrap ์กฐํยทtelemetry๋ ์ง์ฐ์ํค๊ฑฐ๋ ์ ์ค์ํต๋๋ค. ํฐ ์์ค๋ฅ ์์ wait-ready๋ ๋ฐํ HTTP ์์ฒญ์ด ์คํจํ ์ ์๋ ๊ฒ๋ ์คํ ์กฐ๊ฑด์ ์ผ๋ถ์
๋๋ค. ์์ชฝ ๋ชจ๋ ์ก์ ๋ฐฉํฅ shaping์
๋๋ค. ๋ Peer์ delay๋ฅผ ์ค์ ํ๋ฉด ์๋ณต ๊ฒฝ๋ก์๋ ๋ ์ก์ ์ง์ฐ์ด ๋ํด์ง๋๋ค. ์ปค๋ offload, TCP ์ฌ์ ์ก, ํ ์ํ ๋๋ฌธ์ application ๋ฉ์์ง ์์ค๋ฅ ์ด packet loss ์ค์ ๊ฐ๊ณผ ๊ฐ์ง๋ ์์ต๋๋ค.
์ฐธ์ฌยท์ดํยท๋ฐํ ์ค์ผ์ค
| ์๋ฏธ | ๋์/์ฃผ์์ |
|---|---|
| ์์ฐจ interval | v2๋ ์๋ฃ ํ ๋๊ธฐ. v3๋ ์ฅ๊ธฐ churn์์ ์ ์ยท์์ฒญ ์ง์ฐ์ด ๋์ ๋์ง ์๋๋ก batch ์์ ๊ธฐ์ค ๋์ ์์ฝ ์๊ฐ์ ์ฌ์ฉ. ๋ฆ์ด์ง ์์ ์ ๋๋ฝ ์์ด ์์๋๋ก ๋ฐ๋ผ์ก์ผ๋ฉฐ ๋ง์ง๋ง ์์ ๋ค ๋๊ธฐ๋ ์์. |
| parallel join/leave | interval ๋ฌด์ |
| parallel publish | ๋ฐํ์๋ง๋ค ๋ ๋ฆฝ์ ์ธ ์์ ์ง์ฐ, interval ์๋ต ์ 1์ด |
| publish/leave replicas | ํ๋ณด ์๋ก ์ ํ, ์ค๋ณต ์ ํ ์์ |
| v2 ๊ธฐ๋ณธ await=false | YAML์์๋ await: false๋ฅผ ๋ช
์ (v3 ๊ธฐ๋ณธ true) |
| v2 async for-loop | ์๋ก ๋ค๋ฅธ job phase๋ก ํผ์นจ; repeat๋ ํ job์ ์์ฐจ ๋ฐ๋ณต |
| churn ์ค ๋ฐํ ๋์ ์๋ฉธ | onError: continue๋ก ํด๋น ์คํจ๋ง ๊ธฐ๋กํ๊ณ ๊ณ์ |
| ๋จ์ผ ์คํ์ ์ ์ ์๋ฃ ํ ์ ์ฒด Peer ์ ๋ฆฌ | ๋ง์ง๋ง stop-all์ ๋ช
์. ๋ฐ๋ณต ์คํ(repetitions > 1)์ ํ์ฐจ ์ฌ์ด์๋ ์๋ ์ ๋ฆฌ |
onError: continue๋ publish/leave์๋ง ์ ์ฉํ๋ฉฐ, ํ๋ณด 0๊ฐ๋ ํ์ฉํฉ๋๋ค. ์์
๋ณ ์คํจ๋ phase-operation-failed ์ด๋ฒคํธ์ ๋จ์ต๋๋ค. ์ฌ์ฉ์ ์ทจ์์ phase deadline์ ๊ณ์ ์ ํ๋๋ฉฐ, ๊ฐ๋ณ HTTP ์์ฒญ timeout์ ํด๋น ์์
์ ์คํจ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๊ธฐ๋ณธ fail์ ๊ธฐ์กด v3์ฒ๋ผ ์คํจ ์ ์คํ์ ์ค๋จํฉ๋๋ค.
Docker Peer lifetime์ v2์ ServiceCreate ๋ฐํ์ ๋์ํ๋ Docker create ์ฑ๊ณต ์์ ๋ถํฐ ์์ํฉ๋๋ค. config copy, ์ปจํ
์ด๋ ์์, bootstrap์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ lifetime์ ํฌํจ๋ฉ๋๋ค. ready๋ถํฐ์ ์จ๋ผ์ธ ์๋ช
์ด ์๋๋๋ค. ๋
ธ๋ metadata์ lifetime, lifetimeBasis, containerCreatedAt, containerStartedAt, readyAt, stopRequestedAt, stoppedAt์ผ๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค. ๊ฐ ์๊ฐ์ Agent๊ฐ ํด๋น ์ํ๋ฅผ ๊ด์ธกํ ์๊ฐ์ด๋ฉฐ startedAt์ ์์ฑ ์์ฒญ ์๋ฝ ์๊ฐ์
๋๋ค. ์ข
๋ฃ๋ ๊ฐ์ ์ดํ์ด๋ฉฐ, v2 Peer์๋ ์ ํ๋ฆฌ์ผ์ด์
์์ค์ ์ ์ ์ข
๋ฃ ์ ์ฐจ๊ฐ ์์์ต๋๋ค.
examples/v2-churn.yaml์ ๊ธฐ์กด churn ์๋๋ฆฌ์ค์ ๊ตฌ์กฐ๋ฅผ ์์ ๊ท๋ชจ๋ก ์ฎ๊ธฐ๊ณ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ถ๊ฐํ ์์ ์
๋๋ค. ์๋ 10,000๊ฐ join ์์ฒญ๊ณผ ์๋ฐฑ ๊ฐ ๋์ Peer ๊ท๋ชจ์ ์ฑ๋ฅ ์ฌํ ๊ฒฐ๊ณผ๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค.
์ด๊ธฐ ์ฐ๊ฒฐ๊ณผ ๋ฉ์์ง ํฌ๊ธฐ
Peer๋ v2์ฒ๋ผ TCP/Noise/Yamux๋ฅผ ๋ช
์์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. Worker๋ bootstrap ํ๋ณด๋ฅผ seed๋ก ์๊ณ ์ฒซ ์ฐ๊ฒฐ ์ฑ๊ณต์์ ์ด๊ธฐ ์ ์์ ๋๋
๋๋ค. bootstrap ์ ์ฒด timeout์ ๋ชฉ๋ก ์กฐํ์ dial์๋ ์ ์ฉ๋ฉ๋๋ค. PubSub ์์ ํ v3๋ Controller์ ๋์ผ runยท์ ํํ topic discovery registry๋ 3์ด ๊ฐ๊ฒฉ์ผ๋ก ์กฐํํ์ฌ transport ์ฐ๊ฒฐ์ ๋ณด์ถฉํฉ๋๋ค. ํ๋ณด ์์ยท์ฐ๊ฒฐ ์์ฐยท์คํจ ์ฌ์๋๋ internal/peer/discovery.go์ ๊ตฌํ๋์ด ์์ผ๋ฉฐ ์ค์ mesh๋ GossipSub๊ฐ ์ ํํฉ๋๋ค. ์ด ์ถ๊ฐ discovery ๊ฒฝ๋ก๋ v2์ ๋ค๋ฅด๋ฏ๋ก DHT/GossipSub ํ๋ผ๋ฏธํฐ๊ฐ ๊ฐ๋๋ผ๋ ์ฐ๊ฒฐ ๊ตฌ์กฐ์ churn ๋ณต๊ตฌ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
v2์ size๋ PubSub์ ์ ๋ฌ๋๋ ๋ฌด์์ ๋ฐ์ดํธ ๊ธธ์ด์
๋๋ค. v3์์ payloadEncoding: raw๋ฅผ ์ฌ์ฉํ๋ฉด payloadSize๊ฐ ์ ํํ ๊ทธ ๊ธธ์ด์
๋๋ค. libp2p framing, ์๋ช
, TCP/IP ํค๋๊น์ง ํฌํจํ ํจํท ํฌ๊ธฐ๋ฅผ ๋ปํ์ง๋ ์์ต๋๋ค. ๊ธฐ๋ณธ envelope๋ ์ ํ ์ง์ฐ ๊ณ์ธก์ ์ํ JSON๊ณผ base64 ๋๋ฌธ์ ๋ ํฝ๋๋ค. topic: '*'๋ ์ ํํ ๋
ธ๋๊ฐ ๊ฐ์ง ๋ชจ๋ ๋ฐํ ๊ฐ๋ฅํ topic์ ๊ฐ๊ฐ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
raw ๋ฐํยท์์ ยท์ค๋ณต ์ด๋ฒคํธ๋ pubsub- ๋ค์ native PubSub ๋ฉ์์ง ID๋ฅผ 16์ง์๋ก ๋ถ์ฌ ์ฐ๊ฒฐํฉ๋๋ค. ํ์ฌ ๊ธฐ๋ณธ ID๋ origin๊ณผ sequence๋ฅผ ๊ฒฐํฉํ๋ฏ๋ก raw ๋ฐ์ดํธ๊ฐ ๊ฐ์ ๋ ๋ฐํ๋ ๊ตฌ๋ถ๋ฉ๋๋ค. ๋ด์ฉ ๊ธฐ๋ฐ ๋ฉ์์ง ID๋ฅผ ๋ช
์ํ๋ฉด ๊ฐ์ ๋ด์ฉ์ด ํฉ์ณ์ง ์ ์์ผ๋ฏ๋ก ๋ฉ์์ง ID ์ค์ ์ ์ฐธ๊ณ ํ์ญ์์ค. ๋ฉ์์ง์ ์ ํ๋ฆฌ์ผ์ด์
์๊ฐ์ ์ถ๊ฐํ์ง ์์ผ๋ฏ๋ก raw ์์ ์๋ ์ง์ฐ๊ฐ์ ์ ๊ณตํ์ง ์์ผ๋ฉฐ ํ๊ท /P95 ๊ณ์ฐ์์ ์ ์ธํฉ๋๋ค. raw ํธ๋ํฝ์ ์ฌ์ฉํ๋ run์ ์ ์ฉ topic๊ณผ ๋คํธ์ํฌ๋ก ๋ถ๋ฆฌํ์ญ์์ค. envelope์ run ID ํํฐ๋ฅผ raw ๋ฐ์ดํธ์๋ ์ ์ฉํ ์ ์์ต๋๋ค. internal/peer/publish.go๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
๊ด์ธก๊ณผ ๋จ์ ์ฐจ์ด
wait-ready๋ ์ด๊ธฐํ/API ์ค๋น๋ฅผ ๋ปํ๋ฉฐ mesh ์๋ ด์ ๋ณด์ฅํ์ง ์์ต๋๋ค. ์์ ๋ ๋ณ๋์ ์์ ํ ๋๊ธฐ๋ฅผ ๋ก๋๋ค.- dashboard ํ ํด๋ก์ง๋ ํ์ฌ Peer ์ํ๋ฅผ ๋ฐํ์ผ๋ก transport, Kademlia ๋ผ์ฐํ
ํ
์ด๋ธ, topic๋ณ GossipSub mesh๋ฅผ ๋ณ๋๋ก ํ์ํฉ๋๋ค.
TopicPeers๋len(pubsub.ListPeers(topic))์ด๋ฉฐ ๋ก์ปฌ์์ ์๊ณ ์๋ topic peer ์์ ๋๋ค. mesh ์ฐจ์๋ ์๊ฒฉ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์ธ์ ์ ์ฆ๊ฑฐ๊ฐ ์๋๋๋ค. ๊ณผ๊ฑฐ ๋ถ์์๋ ์ ์ฅ๋graft/prune,add_peer/remove_peer,join/leave์ด๋ฒคํธ๋ฅผ ํจ๊ป ์ฌ์ฉํ๊ณ telemetry ๋๋ฝ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ ๊ฒฐ๊ณผ์observations.jsonl์๋ ๊ทธ๋ฃน๋ณ ์์ฝ๊ณผ ํ๋ณธ ๋ ธ๋ยท๊ฐ์ ๋ ์์ต๋๋ค. ์ ์ฅ ํ๋กํ ์ฝ ๊ทธ๋ํ๋ ์ฌ๋ฌ ํ ํฝ์ ๊ด๊ณ๋ฅผ ํฉ์น๋ฉฐ ๊ฐ๋ณ ์์ ์ ๋ชจ๋ routingยทmesh ์ ์ด๋ฅผ ๋ณด์กดํ์ง ์์ต๋๋ค. ์ ์ฅ ํ์์ ํ ํด๋ก์ง๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. - v3์ ํ์
๋ณ RPC ์๋ v2์ physical IHAVE/IWANT counter, ๋ฉ์์ง ID ์ฐธ์กฐ ์๋ logical counter์ ๋์ํฉ๋๋ค. v3๋ protobuf entry ์, IDONTWANT, ๋ก์ปฌ ์ก์ ์ drop, PRUNE peer-exchange record, ํผํฉ RPC ์์ ๋ชจ๋ ํ์
๋ ๋ณด์กดํฉ๋๋ค. v2๋ ์ด ๊ฒฝ์ฐ๋ค์ ๋๋ฝํ๊ณ IHAVE topic ์ ๋ณด๋ ๋ฒ๋ ธ์ต๋๋ค. ๊ธฐ์กด ๋จ์
graft/prune์ด๋ฒคํธ๋ ๋ก์ปฌ mesh ์ ์ด์ด๋ฏ๋ก wire traffic์ ๋ณ๋send_*,recv_*,drop_*์ ์ด ์ด๋ฒคํธ์ ๋น๊ตํ์ญ์์ค. ์ ์ด ํธ๋ํฝ ์ ์๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. - interval/lifetime/base delay ์ํ์ seed๋ก ์ฌํํ ์ ์์ผ๋ run ID๋ฅผ ํฌํจํ Peer ID, ๋คํธ์ํฌ ํ์ด๋ฐ, ์ปค๋ ํจํท ๋์๋ ๋์ผํ์ง ์์ต๋๋ค. ๋
ธ๋ metadata์
seed,networkRequested, ์ค์ network๋ฅผ ๋จ๊ธฐ๋ฉฐ Agent์ Peer config ํ์ผ์๋ ์คํจ ์ค์ ์ ์ ์ฅํฉ๋๋ค. - ์ถ๊ฐ ์ฐ๊ตฌ ๋ถ์์ v2 ๊ทธ๋ฆผ ๊ณ์ด์ ๋ณ๋ ์ ์๋ก ์ ๊ณตํฉ๋๋ค. ๋ฉ์ธ ์ธ์ ์งํ์ ๋ชจ์ง๋จยท๊ธฐ๊ฐยท์ง๊ณ๊ฐ ๋ค๋ฅด๊ณ Eager/Lazy๋ GRAFTยทIHAVEยทIWANTยท๋ฉ์์ง ID์ ์ถ์ ์ ๋๋ค. ์ค์ ๋ฐ์ ํ ์์ธ๊ณผ ๋๋ฝ๋ ๊ณผ๊ฑฐ ๊ฐ์ ์ ๋ง๋ค์ด ์์งํ์ง ์์ต๋๋ค. ์ง์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ธ์ค๊ธฐ ํ์์ v2 ๋ถ์ ๋์์ ์ฐธ๊ณ ํ์ญ์์ค.
- ๊ธฐ๋ณธ ์ฐ๊ฒฐ ์ํ 55์ ์ฃผ์ worker DHT/GossipSub ํ๋ผ๋ฏธํฐ๋ ์ผ์นํฉ๋๋ค. ๊ทธ๋ฌ๋ v2 custom PubSub fork ๊ฒฝ๋ก์ ์์ค๊ฐ ์ ๊ณต๋ ๋๋ ํฐ๋ฆฌ์ ์์ด fork ๋ด๋ถ๊น์ง ๋๋ฑ์ฑ์ ๊ฒ์ฆํ ์ ์์ต๋๋ค. v3๋ ๊ณต์ v0.13.1์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ๊ด์ธก๊ณผ ๋ณ๋๋ก ํ์ธํ ์ฐธ์กฐ ๋ฆฌ๋น์ ์ ์ ํ์ HopWave ํจ์น๋ฅผ ์ ์ฉํฉ๋๋ค. ๊ธฐ๋ก๋์ง ์์ v2 fork ๋ฆฌ๋น์ ๊ณผ์ ์ ์ฒด ๋๋ฑ์ฑ์ ์ ์ฆํ๋ ๊ฒ์ ์๋๋๋ค.
- dashboard ๋ฉ์์ง ์งํ๋ ์ต๊ทผ ์ด๋ฒคํธ ๋ฒํผ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ ๋์ง๋ง Controller ์ฌ์์ ์ ์ด๊ธฐํ๋๋ฉฐ telemetry ๋๋ฝ์ ์ํฅ์ ๋ฐ์ต๋๋ค. ์ ์ฅ ๊ฒฐ๊ณผ ๋ถ์๊ณผ ZIP ์งํ๋ ์ฌ์์ ํ์๋ ๊ธฐ๋ก๋ ์คํ์ ์ฌ๊ณ์ฐํฉ๋๋ค. churn ๋์ ์งํฉ ์ ์์ v2 ์ ์ฒด ๋ถ์ ๋์กฐํ๋ฅผ ํจ๊ป ํ์ธํ์ญ์์ค. ์๋๋ฆฌ์ค ์ค์ ์ด ๋์ํ๋๋ผ๋ ์์น๋ ์๊ฐํ ๋๋ฑ์ฑ์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
๊ฒํ ํ ํต์ฌ v2 ํ์ผ: kpl-controller/internal/handler/event.go, internal/docker/docker.go, internal/distribution/distribution.go, cmd/main.go, kpl-peer-app/internal/host/{host,tc}.go, internal/dht/dht.go, internal/api/publish.go.
๊ณผ๊ฑฐ ๊ฒ์ฆ ๊ธฐ๋ก
์๋ ๋ณด์กด๋ ๊ธฐ๋ก์ 2026-09-04 Docker Desktop Linux ๊ฒ์ฆ์ ๋ณด๊ณ ํฉ๋๋ค. ์๋ณธ ์คํ ์์นด์ด๋ธ๋ kpl-v3 ์์ค ์ ์ฅ์์ ํฌํจ๋์ด ์์ง ์์ผ๋ฏ๋ก ์์น๋ ํ์ฌ checkout์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ณผ๊ฑฐ ๊ด์ธก์ผ๋ก ๋ณด์ญ์์ค. ํ์ฌ ํ๊ท ๋ช
๋ น๊ณผ ํจํค์ง ํ
์คํธยท์ปค๋ ํตํฉ ๊ฒ์ฆ์ ๊ตฌ๋ถ์ ๊ฐ๋ฐ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
- ์ ์ฒด
go test -buildvcs=false ./... -timeout 60s๋ฐ ๋ชจ๋ ์์ YAML ๊ฒ์ฆ ํต๊ณผ. - ํตํฉ run
run-20260904T021417Z-581b: ์ปจํ ์ด๋ 4๊ฐ์ ์๋ก ๋ค๋ฅธ network namespace, host mount/port binding ์์ ํ์ธ. - P2P ์ ์ฉ netemโTBF์ ์ ์ฒด ์ก์ netemโTBF ๋ชจ๋ ์ค์ ์ปค๋์ ์ค์น. TBF
10Mbit, burst8KB(64kbit), latency100msํ์ธ. - ๋์ผ worker ํ๋กํ์ผ์ ํผ์ด๋ณ ๊ธฐ๋ณธ ์ง์ฐ์
57.008524ms,50.467284ms,47.92387ms๋ก ๊ฐ๊ฐ ์ถ์ถ. ์ค์ qdisc์์ loss1%, reorder2%, correlation25%๋ฐ packet drop ์นด์ดํฐ ํ์ธ. - Worker 3๊ฐ์์ topic ๋ ๊ฐ์ ์ด 6๊ฐ raw ๋ฉ์์ง ๋ฐํ. ๋ชจ๋ PubSub data๋ ์ ํํ 32๋ฐ์ดํธ, ์๊ธฐ ์์ ์ ํฌํจํ 24๊ฐ ์์ ์ด๋ฒคํธ์ ๋๋ฌ๋ฅ 1 ํ์ธ. raw ์ง์ฐ์ ์ ๋ถ ๋ฏธ์ธก์ ์ผ๋ก ๊ธฐ๋ก.
- ์ต์ข
churn run
run-20260904T022448Z-0f9d: ์ฝ 86์ด ๋์ 16๊ฐ Peer ์ฐธ์ฌ, ๋ฐํ 3๊ฑดยท์์ 8๊ฑด. ์ ํ๋ Peer์ ์ดํ๋ก ๋ฐํ 1๊ฑด์ด ์คํจํ์ง๋งphase-operation-failed๋ก ๊ธฐ๋กํ๊ณ ๊ณ์ ์งํํ์ฌ ์ ์ ์๋ฃ. ๋ชจ๋ Peer stopped ๋ฐ ์์ฌ ๊ด๋ฆฌ ์ปจํ ์ด๋ 0๊ฐ ํ์ธ.
์ด ๊ฒ์ฆ์ ์ค์ ์ ์ฉ๊ณผ ์์ ๊ท๋ชจ์ ์ค์ ํต์ ์ ํ์ธํ ๊ฒ์ ๋๋ค. TBF ์ต๋ ์ฒ๋ฆฌ๋, ๋ค์ค ๋ฌผ๋ฆฌ ํธ์คํธ overlay, ์๋ฐฑยท์์ฒ Peer์ churn ๋ถํ ์ฑ๋ฅ๊น์ง ์ธก์ ํ ๊ฒฐ๊ณผ๋ ์๋๋๋ค.