Getting Started KO - k-p2p-lab/kpl-v3 GitHub Wiki

K-P2PLab v3

Wiki home โ€บ ํ•œ๊ตญ์–ด ๋ฌธ์„œ ยท ์˜์–ด ์›๋ฌธ

์ด ์œ„ํ‚ค๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ v3 ๊ตฌํ˜„์ฒด์˜ ๋ฐฐํฌยท์„ค์ •ยท๋ฒ„์ „๋ณ„ ๋™์ž‘์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ณตํ†ต ๋ฐฐ๊ฒฝ์€ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

K-P2PLab v3๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ Linux ํ˜ธ์ŠคํŠธ์— ๊ตฌ์„ฑ๋œ Docker Swarm์—์„œ ์„ค์ • ๊ฐ€๋Šฅํ•œ libp2p Kademlia ๋ฐ PubSub ์‹คํ—˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Controller๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค ์Šค์ผ€์ค„๋ง๊ณผ ์›น Dashboard ์ œ๊ณต์„ ๋งก๊ณ , Agent๋Š” ๋กœ์ปฌ Docker daemon์œผ๋กœ Peer ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Docker Swarm์€ ์„ ํƒํ•œ ํ˜ธ์ŠคํŠธ๋งˆ๋‹ค Agent ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ๊ฐ Peer์— ๋…๋ฆฝ๋œ ์ปจํ…Œ์ด๋„ˆ์™€ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Prometheus/Grafana๋Š” ์ˆ˜์ง‘๋œ telemetry๋ฅผ ๋ณด์—ฌ ์ฃผ๊ณ , Controller๋Š” ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ, UI์™€ ๋ฌธ์„œ์˜ ๊ธฐ๋ณธ ์–ธ์–ด๋Š” ์˜์–ด์ด๋ฉฐ ํ•œ๊ตญ์–ด ์œ„ํ‚ค ํŽ˜์ด์ง€๋Š” ๋Œ€์‘ํ•˜๋Š” -KO ์ ‘๋ฏธ์‚ฌ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • join, leave, ์ค€๋น„ ์žฅ๋ฒฝ, publish, phase ๋ฐ˜๋ณต, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์žก๊ณผ seeded distribution์„ ์ง€์›ํ•˜๋Š” ๋ฒ„์ „ 1ยท2 YAML ์‹œ๋‚˜๋ฆฌ์˜ค
  • Kademlia ์„ค์ •๊ณผ GossipSub, FloodSub, RandomSub router ์„ ํƒ
  • Peer๋ณ„ delay, jitter, loss, duplication, corruption, reordering๊ณผ bandwidth ์„ค์ •์„ ์ ์šฉํ•˜๋Š” ๊ฒฉ๋ฆฌ ์ปจํ…Œ์ด๋„ˆ
  • ํ•˜๋‚˜ ์ด์ƒ์˜ ๋…ธ๋“œ์—์„œ Agent๋ณ„ ์šฉ๋Ÿ‰ ์˜ˆ์™ธ์™€ ๋น„๋ก€ Peer ๋ฐฐ์น˜๋ฅผ ์ง€์›ํ•˜๋Š” Docker Swarm ๋ฐฐํฌ
  • Agent ์˜์—ญ๊ณผ topic ํ•„ํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‹ค์‹œ๊ฐ„ Kademlia, GossipSub GRAFT ๋ฐ transport ํ† ํด๋กœ์ง€
  • churn์„ ๊ณ ๋ คํ•œ ๋„๋‹ฌ๋ฅ , ์ง€์—ฐ, ์ค‘๋ณต, coverage์™€ ๊ด€์ธก ํ’ˆ์งˆ ์ง€ํ‘œ
  • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ด์–ดํ•˜๊ธฐยท์žฌ์‹œ๋„๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐ˜๋ณต ์‹คํ–‰, ๊ฒฐ๊ณผ ๋ณด์กด, ZIP ๋‚ด๋ณด๋‚ด๊ธฐ์™€ ์‚ญ์ œ
  • ๊ฐœ๋ณ„ runยท๋ฐ˜๋ณต run ๋™์ผ ๊ฐ€์ค‘ ํ‰๊ท ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ถ„์„, v2 ์—ฐ๊ตฌ ๋น„๊ตยท๋Œ€์—ญํญ ์‹œ๊ฐํ™”์™€ PNG/CSV/ZIP ๋‹ค์šด๋กœ๋“œ
  • ํ”„๋กœํ† ์ฝœ๋ณ„ libp2p ์ŠคํŠธ๋ฆผ ์ „์†ก๋ฅ ยท๋ˆ„์  ๋ฐ”์ดํŠธ ์‹ค์ธก๊ณผ ์ˆ˜์ง‘ ํ’ˆ์งˆ ํ‘œ์‹œ

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • ํ™œ์„ฑ Swarm์— ์ฐธ์—ฌํ•œ rootful Docker Engine์ด ์„ค์น˜๋œ Linux. ๊ธฐ๋ณธ ๋ฐฐํฌ ๊ตฌ์„ฑ์€ userns-remap์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด์„ ์œ„ํ•œ NET_ADMIN๊ณผ ์ปค๋„ sch_prio, sch_netem, cls_u32 ๋ฐ ์„ ํƒ์ ์ธ sch_tbf ๋ชจ๋“ˆ
  • Docker ๋ฐ–์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ๋งŒ Go 1.25 ์ด์ƒ
  • ํ™œ์„ฑ Swarm manager์™€ ์„ ํƒํ•œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๊ณ  ์‹ ๋ขฐํ•˜๋Š” ์ด๋ฏธ์ง€ registry

ํ˜ธ์ŠคํŠธ ์ค€๋น„, ๊ถŒํ•œ, ์›๊ฒฉ ์ ‘์†, ์ €์žฅ์†Œ์™€ ์•ˆ์ „ํ•œ ์ข…๋ฃŒ ๋ฐฉ๋ฒ•์€ Swarm ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

๋™์ผํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค seed๋Š” distribution ์ž…๋ ฅ์„ ๋ฐ˜๋ณตํ•˜์ง€๋งŒ ์‹คํ–‰ ํƒ€์ด๋ฐ, ์ƒ์„ฑ payload, Peer identity์™€ ํ”„๋กœํ† ์ฝœ ๊ฒฐ๊ณผ๊นŒ์ง€ ๊ฒฐ์ •์ ์œผ๋กœ ๋งŒ๋“ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

Swarm ๋น ๋ฅธ ์‹œ์ž‘

ํ™œ์„ฑ manager์˜ ์ €์žฅ์†Œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์ฃผ์†Œ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” registry๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.

sh scripts/swarm.sh init KPL_IMAGE=registry.example.com/kpl-v3:v3 KPL_AGENT_CAPACITY=20 KPL_MIN_AGENTS=2
sh scripts/swarm.sh publish
sh scripts/swarm.sh deploy --workers
sh scripts/swarm.sh status
sh scripts/swarm.sh access
sh scripts/swarm.sh credentials
sh scripts/swarm.sh scenario

manager์—๋„ Agent๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋ฉด --workers ๋Œ€์‹  --all์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๋…ธ๋“œ Swarm์—์„œ๋Š” init ์‹œ KPL_MIN_AGENTS=1์„ ์„ค์ •ํ•˜๊ณ  --all๋กœ ๋ฐฐํฌํ•˜์‹ญ์‹œ์˜ค. access๊ฐ€ ์ถœ๋ ฅํ•œ Controller ์ฃผ์†Œ๋ฅผ ์—ด๊ณ  credentials์˜ KPL_USERยทKPL_PASSWORD๋กœ ๋กœ๊ทธ์ธํ•œ ๋’ค scenario ์ถœ๋ ฅ์„ ๋ถ™์—ฌ ๋„ฃ์œผ์‹ญ์‹œ์˜ค. access๋Š” ์„ ํƒ๋œ ๊ฐ Agent ๋…ธ๋“œ์˜ metrics URL๋„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. TCP KPL_AGENT_METRICS_PORT(๊ธฐ๋ณธ 9091)๋Š” control ๋…ธ๋“œ์—์„œ ํ—ˆ์šฉํ•˜๊ณ , ์šด์˜์ž๊ฐ€ ํ•ด๋‹น ๋งํฌ๋ฅผ ์ง์ ‘ ์—ด ๋•Œ์—๋Š” ์šด์˜์ž ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์†ํ•œ ์‹ ๋ขฐ ๊ด€๋ฆฌ๋ง์—์„œ๋„ ํ—ˆ์šฉํ•˜์‹ญ์‹œ์˜ค. helper๋Š” ๋ฐฐํฌ ์‹œ์ ์˜ ์ด๋ฏธ์ง€ digest๋ฅผ ํ™•์ธํ•ด ๊ณ ์ •ํ•˜๋ฏ€๋กœ tag๋ฅผ ๊ฐฑ์‹ ํ•  ๋•Œ SHA๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šด์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ฒ ๊ฑฐํ•˜๊ธฐ ์ „์— ์ „์ฒด Swarm ์ ˆ์ฐจ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋‹ˆํ„ฐ๋ง ์˜ˆ์ œ๋Š” examples/monitoring.yaml์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ €์žฅ ๊ฒฐ๊ณผ์—์„œ Grafana์˜ run ์„ ํƒ๊ณผ ์ด๋ฒคํŠธ ๋กœ๊ทธยทํŒŒ์ƒ ์ง€ํ‘œ ๋‹ค์šด๋กœ๋“œ ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Controller ์žฌ์‹œ์ž‘ ํ›„์—๋„ ๊ฒฐ๊ณผ ZIP์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ํŒŒ์ผ์—์„œ ์‹คํ–‰์ด๋‚˜ ์‹ค์‹œ๊ฐ„ counter๋ฅผ ๋ณต์›ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋น„์ •์ƒ task๊ฐ€ ์žˆ์–ด๋„ sh scripts/swarm.sh remove๋กœ ์„œ๋น„์Šค๋ฅผ ์ง์ ‘ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. standalone Peer ์ •๋ฆฌ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ณ„ํš๋œ ์ข…๋ฃŒ์—์„œ๋Š” ๋จผ์ € ์‹คํ—˜์„ ์™„๋ฃŒยท์ทจ์†Œํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค.

๋ฌธ์„œ

์ž‘์—…๋ณ„ ์ฝ๋Š” ์ˆœ์„œ์™€ ์ „์ฒด ๋ฌธ์„œ๋Š” **๋ฌธ์„œ ์•ˆ๋‚ด**์—์„œ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ํ”„๋กœ์ ํŠธ ๊ณตํ†ต ๊ฐœ๋…ยท์—ฐ๊ตฌ ์„ค๊ณ„ยท์ถœํŒ๋ฌผ๋„ ์ด ์œ„ํ‚ค์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•  ์ž‘์—… ๋ฌธ์„œ
๋ฐฐํฌ์™€ ์„ค์ • Swarm, Agent ์šฉ๋Ÿ‰
์‹คํ–‰๊ณผ ๋ณต๊ตฌ ์‹œ๋‚˜๋ฆฌ์˜ค, ์‹คํ–‰ยท์ •์ง€ยท๋ณต๊ตฌ
๊ด€์ธก๊ณผ ๋ณด์กด ๋Œ€์‹œ๋ณด๋“œ, ๋ชจ๋‹ˆํ„ฐ๋ง, ๊ฒฐ๊ณผ
๋ถ„์„ ์ง€ํ‘œ, ๊ทธ๋ฆผ๊ณผ ๋น„๊ต
์—ฐ๋™๊ณผ ๊ฐœ๋ฐœ API, ์•„ํ‚คํ…์ฒ˜, ๊ฐœ๋ฐœ