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, ์ํคํ ์ฒ, ๊ฐ๋ฐ |