Topology KO - k-p2p-lab/kpl-v3 GitHub Wiki
Transport, Kademlia, GossipSub ํ ํด๋ก์ง ํ์ธ
Wiki home โบ ํ๊ตญ์ด ๋ฌธ์ ยท ์์ด ์๋ฌธ
๋ฌธ์ ์๋ด ยท ์์ค ์ ์ฅ์
ํ๋ฉด ์ฌ์ฉ๋ฒ
Overview๋ Network Overview ํญ์ด ์ ํ๋ ๊ฒฝ์ฐ์๋ ํ์ด์ง๋ฅผ ์ด ๋๋ง๋ค Off๋ก ์์ํฉ๋๋ค. On์ผ๋ก ๋ฐ๊พธ๋ฉด ํ์ฌ Peer์ ๊ด๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ ๊ทธ๋ํ๋ฅผ ๋ง๋ญ๋๋ค. Off ๋์ Controller๋ ๋์๋ณด๋ ๊ฐ์ ๊ณ์ฐ๊ณผ ์์ธ ๊ทธ๋ํ ์ ์ก์ ์๋ตํ๊ณ , ๋ธ๋ผ์ฐ์ ๋ ๊ทธ๋ํ ๋ฐฐ์น์ SVG ๋ ๋๋ง์ ์๋ตํฉ๋๋ค. ํผ์ด ์์ ์คํ ์งํ๋ ๊ณ์ ๊ฐฑ์ ํ๋ฉฐ, Transport links๋ ๊ทธ๋ํ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ ๊น์ง N/A ยท Overview off๋ก ํ์ํฉ๋๋ค. ์ด ์ค์์น๋ ์๊ฐํ๋ง ์ ์ดํ๋ฉฐ ์คํ ์คํ์ด๋ ์ ์ฅ ๊ด์ธก์น๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
Overview๋ฅผ Off๋ก ๋ฐ๊พธ๋ฉด ์ ๋๋ฉ์ด์ ์ ๋ฉ์ถ๊ณ ๊ทธ๋ํ ๋ฐ์ดํฐยท๋ฐฐ์นยท์ ํ์ ํด์ ํฉ๋๋ค. ๋ค์ On์ผ๋ก ๋ฐ๊พธ๋ฉด ์ต์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค. ํญ ์ ํ์ Overview๋ฅผ ์ผ๊ฑฐ๋ ์ต์ด ์์ฒญ์ ๋ฐ๋ณตํ์ง ์์ต๋๋ค. ๋ค์ ์ผ๋ ๋ ์ด์ด ํํฐ์ motion ์ค์ ์ ์ ์งํฉ๋๋ค.
Ready Peers ์นด๋๋ ๋ง์ง๋ง ๋ณด๊ณ ์ํ๊ฐ ready์ธ ๋
ธ๋๋ฅผ ์
๋๋ค. ํ ํด๋ก์ง๋ starting ๋
ธ๋๋ ํ์ํ๋ฏ๋ก join/churn ์ค์๋ ์ ์ฒด ์๊ฐ ๋ ํด ์ ์์ต๋๋ค. ํค๋์์ ์ ์ฒดยทreadyยทstarting ์๋ฅผ ๊ตฌ๋ถํ๋ฉฐ, ์ค์์ TOTAL๊ณผ Agent ๊ตฌ์ญ๋ณ ์๋ ํ๋ฉด์ ํ์๋๋ ์ ์ฒด Peer ์์
๋๋ค. ๋ฉํธ๋ฆญ ์นด๋๋ Ready ์ ์๋์ Topology(์ ์ฒด)์ Starting์ ํ์ํฉ๋๋ค. stoppingยทstoppedยทfailed๋ ์ ์ธํ๊ณ , ์ ์ ์๋ ํ์ ์ํ๊ฐ ์์ผ๋ฉด Other๋ก ๋ฐ๋ก ์ง๊ณํฉ๋๋ค. ๋ ํ๋ฉด์ ๋ค๋ฅธ run์์ ๋จ์ ์๋ Peer๊น์ง ํฌํจํ ๋์ผํ ํด๋ฌ์คํฐ snapshot์ ์ฌ์ฉํฉ๋๋ค. ์ ํํ run, ๊ด๊ณ ๋ ์ด์ด, topic ํํฐ๋ ์ด ํผ์ด ์๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค. ์ด ๊ฐ์ ๋ณด๊ณ ๋ ์๋ช
์ํ์ด๋ฉฐ ์ค์๊ฐ ํต์ ๊ฐ๋ฅ์ฑ์ ๋ณ๋๋ก ๊ฒ์ฌํ ๊ฒฐ๊ณผ๋ ์๋๋๋ค.
๋์๋ณด๋๋ ์ ์ฒด ํญ์ ๋ํํ ํ ํด๋ก์ง๋ฅผ ๊ฐ์ ํฌ๊ธฐ์ Agent๋ณ ๋ถ์ฑ๊ผด ์์ญ์ผ๋ก ํ์ํฉ๋๋ค. Agent ๋ฒํธ๋ **Agent status โ No.**์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ๊ฐ Peer์๋ Agent ๋ด๋ถ ํ์ ๋ฒํธ๊ฐ ๋ถ์ผ๋ฉฐ ์ ํํ๋ฉด ์ ์ฒด Node ID์ Peer ID๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ด ๋ฒํธ๋ ํ๋ฉด์์ Peer๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ฒ์ผ๋ก ์์น๋ฅผ ๊ณ ์ ํ์ง ์์ต๋๋ค. Peer ์ดํ ํ ํ์ ๋ฒํธ๋ ์ฌ์ฌ์ฉ๋ ์ ์์ผ๋ฏ๋ก ์๊ตฌ ์๋ณ์๋ ์ ์ฒด ID๋ฅผ ์ฌ์ฉํ์ญ์์ค.
Peer๋ ์์ Agent์ ๋ถ์ฑ๊ผด ์์์ ์์ํ ์๋ฆฌ๋ฅผ ์ก์ต๋๋ค. ํ์๋ ์ฐ๊ฒฐ์๋ ์คํ๋ง๊ณผ ๊ฐ์ ์ธ๋ ฅ์ด ์์ฉํ๊ณ , ๋ฐ๋ฐ๋ ฅ๊ณผ ์ถฉ๋ ์ฒ๋ฆฌ๊ฐ ๊ฐ๊น์ด Peer๋ค์ ๋ถ์ฐ์ํต๋๋ค. ์ด๋ ์ค์๋ ์์ ์์ญ ๋ฐ์ผ๋ก ๋๊ฐ์ง ์์ต๋๋ค. Peer๋ ํ์ ๊ด๊ณ๊ฐ ๋ฐ๋๋ฉด ๋ฐฐ์น ์กฐ์ ์ ๋ค์ ์์ํ๊ณ , ์์ ๋๋ฉด ๋ฉ์ถ๋ฏ๋ก ๋ฌด์์๋ก ๊ณ์ ์์ง์ด์ง ์์ต๋๋ค. ์ด ๋ฐฐ์น๋ ํ๋ฉด ํ์๋ฅผ ์ํ ๊ฒ์ผ๋ก ํ๋กํ ์ฝ ๋์์ด๋ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
์ธ ๋ ์ด์ด๋ ๋ชจ๋ ๋ ์ํ๋ก ์์ํฉ๋๋ค. ๊ทธ๋ํ ์ ์ฒดํฌ๋ฐ์ค๋ ๋ค์ ์์์ด๋ฉฐ ๊ฐ๊ฐ ์กฐ์ํ ์ ์์ต๋๋ค.
| ๋ ์ด์ด | ๊ธฐ๋ณธ๊ฐ | ์ | ์๋ฏธ |
|---|---|---|---|
| Transport | ๋ | ๊ฐ๋ ํ์ ์ | Peer๊ฐ ๋ณด๊ณ ํ ํ์ฑ libp2p transport ์ฐ๊ฒฐ |
| Kademlia | ๋ | ๊ฐ๋ ์ฒญ๋ก ์ ์ | ํ์ฌ DHT ๋ผ์ฐํ ํ ์ด๋ธ์ ์๋ Peer๊ฐ ํฌํจ๋ ๊ด๊ณ |
| GossipSub mesh | ๋ | ๊ตต์ ์ฃผํฉ ์ค์ | ์ ํํ topic์์ ์๋ฝ๋ GRAFT mesh ๊ด๊ณ |
์ฒดํฌ๋ฅผ ํด์ ํ๋ฉด ํด๋น ์ ์ ์จ๊ธฐ๊ณ ๋จ์ ํ์ ๊ด๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์น์ ํ์ ๋ค์ ๊ณ์ฐํฉ๋๋ค. ํ๋กํ ์ฝ์ด๋ ์คํ ์คํ์ ๋์ง๋ ์์ต๋๋ค. GossipSub topic ํํฐ๋ mesh์๋ง ์ ์ฉํ๋ฉฐ ๋ค๋ฅธ ๋ ์ด์ด๋ ์ ์งํฉ๋๋ค. ํํฐ๋ฅผ ๋ฐ๊พธ๋ฉด Peer๊ฐ ๊ฐ์์ ๋ถ์ฑ๊ผด ์์์ ์ฌ๋ฐฐ์น๋ ์ ์์ต๋๋ค. All topics์์๋ ๊ฐ์ ์์ ์ฌ๋ฌ topic ๊ด๊ณ๋ฅผ ํ ์ ์ผ๋ก ํฉ์น๋ ์ธ๋ถ ์ ๋ณด์ topic๋ณ ๊ทผ๊ฑฐ๋ฅผ ์ ์งํฉ๋๋ค. ์๋จ Transport links๋ ์ธ ๋ ์ด์ด์ ํฉ์ด ์๋ ๊ณ ์ transport ์ฐ๊ฒฐ ์ ์์ ๋๋ค.
Peer์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด ํ์ฌ ํ์ ์ค์ธ ์ด์ ์ฐ๊ฒฐ์ ๊ฐ์กฐํ๊ณ ๊ด๋ จ ์๋ ์ ์ ํ๋ฆฌ๊ฒ ํ์ํฉ๋๋ค. ์ ํํ๋ฉด AgentยทPeer ํ์ ๋ฒํธ, ์ ์ฒด ID, profile, ๋คํธ์ํฌ ์ค์ , ๋ณด๊ณ ํ endpoint ์ ๋ณด๋ฅผ ์ ์งํฉ๋๋ค. Clear selection ๋๋ Escape๋ก ์ ํ์ ํด์ ํฉ๋๋ค. + / โ, Ctrl/Command + ์คํฌ๋กค๋ก ํ๋ยท์ถ์ํ๊ณ , ๋ฐฐ๊ฒฝ์ ๋๋๊ทธํด ์ด๋ํ๋ฉฐ, Fit์ผ๋ก ์ ์ฒด ๋ฐฐ์น๋ฅผ ๋ง์ถฅ๋๋ค. ํค๋ณด๋ ์ด์ ์ด๋๊ณผ Enter/Space ์ ํ๋ ์ง์ํฉ๋๋ค.
Pause motion์ ๋๋ฅด๋ฉด ๊ธฐ์กด Peer์ ์์น๋ฅผ ์ ์งํ๋ฉด์ ํํฐ, ์ ํ, ํ๋ยท์ถ์์ ํ๋ฉด ์ด๋์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ Peer์ Agent ์์ญ ๋ณ๊ฒฝ์ ์ฆ์ ๋ฐ์ํฉ๋๋ค. Resume motion์ผ๋ก ๋ฐฐ์น ์กฐ์ ์ ์ฌ๊ฐํฉ๋๋ค.
Network Overview ํญ์ ํ ํด๋ก์ง์ ์กฐ์ ๋๊ตฌ๋ฅผ ํ์ํฉ๋๋ค. Overview๊ฐ On์ผ ๋ ๋ค๋ฅธ ํญ์์๋ ๋ฐฐ์น ์ ๋๋ฉ์ด์ ์ ๋ฉ์ถ๊ณ ์ค์๊ฐ ๊ทธ๋ํ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ๊ณ์ํฉ๋๋ค. ๋์์ค๋ฉด ์ต์ ํ ํด๋ก์ง๋ฅผ ํ์ํ๋ฉฐ ๊ธฐ์กด ๋์ ์ค์ ์ ์ ์งํฉ๋๋ค. Overview๊ฐ Off์ด๋ฉด ํญ ์ ํ ํ์๋ Off๋ฅผ ์ ์งํฉ๋๋ค. ํ์๊ณผ ํค๋ณด๋ ์กฐ์์ ์์ ํ๋ฉด ํญ์ ์ฐธ๊ณ ํ์ญ์์ค.
์ด์์ฒด์ ๋ ๋ธ๋ผ์ฐ์ ์ ๋์ ์ค์ด๊ธฐ ์ค์ ์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ํ ์ ๋๋ฉ์ด์ ์ ๋๋๋ค. ์ต์ด ๋ฐฐ์น์ ๊ด๊ณ ๋ณ๊ฒฝ์๋ ์ ํ๋ ์ ์ฐฉ ๊ณ์ฐ์ ์ ์ฉํ๊ณ ์ค๊ฐ ์ด๋ ๊ณผ์ ์์ด ๊ฒฐ๊ณผ๋ฅผ ํ์ํฉ๋๋ค. Resume motion์ ์ง์ ์ ํํ๋ฉด ์ ๋๋ฉ์ด์ ์ ์ผค ์ ์์ต๋๋ค.
Agent ์์ญ์ ๊ฐ๋๋ ๊ฐ์ผ๋ฉฐ ์ค์ ํ capacity๋งํผ ๋น Peer ์์น๋ฅผ ์์ฝํ์ง ์์ต๋๋ค. Peer๊ฐ ๋ง์ ์คํ์ ์ฌ์ ํ ์กฐ๋ฐํ๊ฒ ๋ณด์ผ ์ ์์ผ๋ฏ๋ก topic ํํฐ์ ๋ ์ด์ด ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฌ์ฉํ๊ณ ๊ด์ฌ AgentยทPeer๋ฅผ ํ๋ํด ํ์ธํ์ญ์์ค.
์ ์ ์ ํํ ์๋ฏธ
transport ์ฐ๊ฒฐ, DHT๊ฐ ์๋ Peer, ๋ก์ปฌ์์ ์๋ ค์ง PubSub topic Peer(TopicPeers / PubSub ListPeers), GRAFT mesh๋ ์๋ก ๋ค๋ฅธ ๊ด๊ณ์
๋๋ค. Topic Peer ํญ๋ชฉ๋ง์ผ๋ก ์๊ฒฉ application subscription์ ์
์ฆํ ์๋ ์์ผ๋ฉฐ publish-only๋ relay ์ฐธ๊ฐ์๋ ๊ฐ๋ฅํฉ๋๋ค. ํ์ฌ ๊ทธ๋ํ๋ ADD_PEER ์ด๋ฒคํธ๋ก ๊ด๊ณ๋ฅผ ์ฌ๊ตฌ์ฑํ์ง ์๊ณ ๊ฐ ๋ ์ด์ด์ ํด๋นํ๋ Peer ์ํ ํ๋์์ ๊ด๊ณ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- Kademlia๋
dht.RoutingTable().ListPeers()์์ ์ป์ต๋๋ค. ๋ผ์ฐํ ํ ์ด๋ธ ํฌํจ๋ง์ผ๋ก ํ์ฌ transport ์ฐ๊ฒฐ์ด๋ ํจํท ์ ์ก์ ์ ์ฆํ์ง๋ ์์ต๋๋ค. - GossipSub๋ ํ์์ Peer ๋ด๋ถ์ ๋๊ธฐ router callback์ผ๋ก ์ถ์ ํฉ๋๋ค. ์๋ฝ๋
Graft๋ ์ถ๊ฐํ๊ณPrune, topicLeave,RemovePeer๋ ์ ๊ฑฐํฉ๋๋ค. Mesh freeze ์ดํ์๋ PubSub ์ด๋ฒคํธ ๋ฃจํ์์ ๊ณ ์ ๊ตฌ์ฑ์ ์ค ํ์ฑ ๋ถ๋ถ๋ง ์ํ์ ๋ณด๊ณ ํฉ๋๋ค. ๋ก์ปฌ topic์ ์ฐธ์ฌํ๊ณ ์๋ PubSub stream์ด ๋ฉ์ ๋ผ์ฐํ ์ ์ง์ํ๋ฉฐ ์๋๊ฐ ๊ทธ topic์ ๊ด๊ณ ํ๋ ๊ตฌ์ฑ์์ ๋๋ค. ์ฐ๊ฒฐ์ด ๋๊ธด ๊ตฌ์ฑ์ ID๋ ๋ด๋ถ์ ๊ณ ์ ๋์ด ๋จ์ง๋ง ํ์ ์ ์ ์ฌ๋ผ์ง๋๋ค. ๊ฐ์ ๊ตฌ์ฑ์์ด ๋ค์ ์ฐ๊ฒฐ๋๋ฉด ์ GRAFT ์์ด ์ ์ด ๋ค์ ๋ํ๋ ์ ์์ผ๋ฉฐ ๊ฐ์์ GRAFT/PRUNE ์ด๋ฒคํธ๋ ๋ง๋ค์ง ์์ต๋๋ค. ๋ ๊ด์ธก ๋ฐฉ์ ๋ชจ๋ telemetry ์ ๋ฌ ์์์ ์ต๊ทผ 300๊ฐ ํ์ ํ๋์์ ๋ ๋ฆฝ์ ์ ๋๋ค.floodsub,randomsub, PubSub ๋นํ์ฑ์๋ GossipSub mesh๊ฐ ์์ต๋๋ค. GRAFT mesh ๋ฐ์ direct/fanout ์ ๋ฌ ๊ฒฝ๋ก๋ ํฌํจํ์ง ์์ต๋๋ค. - Transport๋ ํ์ฌ host ์ฐ๊ฒฐ ๋ชฉ๋ก์ ๋๋ค. ADD_PEER ์ด๋ฒคํธ๋ ๊ธฐ์กด ์ฐ๊ฒฐ๋ง์ผ๋ก KademliaยทGossipSub ์ ์ ๋ง๋ค์ง ์์ต๋๋ค.
์ ์ ํ์ชฝ ๋๋ ์์ชฝ endpoint์ ๋ณด๊ณ ๋ฅผ ๋ฌด๋ฐฉํฅ์ผ๋ก ํ์ํ ๊ฒ์
๋๋ค. reportedBy๊ฐ ์ค์ ๋ณด๊ณ ์๋ฅผ ๋ํ๋ด๋ฉฐ, Kademlia ํ
์ด๋ธ๊ณผ ๊ฐฑ์ ์ค mesh๋ ๋น๋์นญ์ผ ์ ์์ต๋๋ค. ํ์ชฝ์์ PRUNE๊ฐ ๊ด์ธก๋ผ๋ ์๋์ ๋ค์ ๋ณด๊ณ ๊ฐ ์ค๊ธฐ๊น์ง ๋ฐ๋์ชฝ ๊ด๊ณ๊ฐ ์ ์ ๋จ์ ์ ์์ต๋๋ค. DHTยทtransportยทmesh๋ฅผ ํด๋ฌ์คํฐ ์ ์ฒด์ ๋จ์ผ ์์์ ์์ ์ ์ฝ๋ ๊ฒ์ ์๋๋๋ค.
์๋๋ฆฌ์ค v3๋ ์ ํํ Peer ๋๋ฉ์ธ์ ๋ชจ๋ธ ๊ธฐ๋ฐ ๋ฉ์๋ฅผ ์์ฑํ๊ณ ๋๊ฒฐํ ์ ์์ต๋๋ค. ์์ฑํ ์ด์ ๋ชฉ๋ก์ ์คํ ๋ก๊ทธ์ ์ ์ฅํ๋ ์์ ๊ทธ๋ํ์ ๋๋ค. ์ด ํ๋ฉด์ ๊ณ์ ๋ฐํ์์ ํ์ฑ ๋ฉ์ ๋ฉค๋ฒ์ญ์ ํ์ํ๋ฏ๋ก ์ฐ๊ฒฐ ์คํจ๋ Peer ์ดํ ์ ๊ณํ๊ณผ ๋ค๋ฅผ ์ ์์ต๋๋ค. RGGยทWaxmanยทGridยท์ผ๊ฐ ๊ฒฉ์์ ์ขํ๋ Agent ๊ตฌ์ญ ๊ธฐ๋ฐ ํ๋ฉด ๋ฐฐ์น๋ ๋งํฌ ์ง์ฐ์ ์ค์ ํ์ง ์์ต๋๋ค.
Bootstrap๊ณผ topic discovery
Bootstrap transport ์ฐ๊ฒฐ๊ณผ GossipSub topic discovery๋ ์๋ก ๋ค๋ฅธ ์ ์ฐจ์
๋๋ค. ๊ฐ Peer๋ ๋จผ์ /api/v1/bootstrap์ผ๋ก ๋์ผ run์ ready boot Peer๋ฅผ ์กฐํํฉ๋๋ค. Worker๋ DHT๋ฅผ ๋นํ์ฑํํ๋๋ผ๋ seed ๊ธฐ๋ฐ์ผ๋ก ์์ ์์์์ ์ฒซ ์ฐ๊ฒฐ ์ฑ๊ณต๊น์ง ์๋ํฉ๋๋ค. Boot ๋
ธ๋๋ ์ ๊ณต๋ Peer์ ์ฐ๊ฒฐ์ ์๋ํ๋ฉฐ ๋น์ด ์๋ ๋คํธ์ํฌ๋ก ์์ํ ์๋ ์์ต๋๋ค. Kademlia bootstrap์ DHT๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ง ์ํํฉ๋๋ค. ๋ด์ฅ boot type์ PubSub๋ฅผ ์คํํ์ง ์์ผ๋ฏ๋ก ์ด ์ฐ๊ฒฐ๋ง์ผ๋ก GossipSub mesh๊ฐ ์๊ธฐ์ง๋ ์์ต๋๋ค.
PubSub๊ฐ ์์๋๋ฉด Peer๋ ์ค์ ํ ์ ํํ topic๋ง๋ค Controller์ /api/v1/discovery registry๋ฅผ ์ฆ์ ์กฐํํ๊ณ ์ดํ 3์ด polling loop๋ก ๋ค์ ์กฐํํฉ๋๋ค. Registry๋ ๋์ผ runยทtopic์์ ready ์ํ์ด๊ณ PubSub๊ฐ ํ์ฑํ๋์ด ์์ผ๋ฉฐ Agent๊ฐ online์ธ ๋ชจ๋ Peer๋ฅผ ๋ฐํํฉ๋๋ค. Peer๊ฐ rendezvous hash๋ก ์์๋ฅผ ์ ํ๊ณ publish-onlyยทrelay ํ๋ณด๋ณด๋ค ์ค์ subscriber๋ฅผ ์ฐ์ ํฉ๋๋ค. ํ์ฌ PubSub ListPeers(topic) ์๋ฅผ DHigh์์ ๋นผ๊ณ , ์ ์ฒด hard connection cap์ ์ฌ์ ๋ฒ์ ์์์ ๋ถ์กฑํ ์ฐ๊ฒฐ์ ์ฑ์๋๋ค. Dial์ด ์คํจํ๋ฉด ๋ค์ ์์ ํ๋ณด๋ฅผ ์๋ํ๊ณ ์คํจํ Peer ID์๋ 15์ด retry backoff๋ฅผ ์ ์ฉํฉ๋๋ค. Registry ์์ฒญ๊ณผ ๊ฐ dial round์ ์ ํ ์๊ฐ์ 5์ด์ด๋ฏ๋ก ๋๋ฆฐ round๋ ๋ค์ polling์ ๋ฆ์ถ ์ ์์ต๋๋ค. ์ด ๋ฐฉ์์ churn ์ค ํ๋ณด ์ฐ๊ฒฐ์ ๋ณด๊ฐํ๋ฉฐ ์๋์ ์ผ๋ก all-to-all graph๋ฅผ ๋ง๋ค์ง๋ ์์ต๋๋ค. ์์ ์ฐ๊ฒฐ์ด๋ ๋ค๋ฅธ ํ๋กํ ์ฝ ์ฐ๊ฒฐ๋ก topic๋ณ discovery ๋ชฉํ๋ณด๋ค ๋ง์ ์ฐ๊ฒฐ์ด ์๊ธธ ์๋ ์์ต๋๋ค.
Registry๋ ์ฃผ์์ ์ค์ ๋ topic ์ฐธ์ฌ ์ ๋ณด๋ง ์ ๊ณตํ๋ฉฐ ์ ๋ฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐํํ๊ฑฐ๋ ์ ํํ์ง ์์ต๋๋ค. ๋ฐ๊ฒฌํ ์ฐ๊ฒฐ์ libp2p ์ฐ๊ฒฐ์ด ์๋ฃ๋ ๋ค ํ์ transport ๋ ์ด์ด์ ๋ํ๋ฉ๋๋ค. GossipSub๋ ํด๋น Peer์ ๋ฉ์๋ฅผ ๋๊ฒฐํ๊ธฐ ์ ๊น์ง ์๋ฝ๋ GRAFT๋ก mesh์ ๋ค์ด๊ฐ topic Peer๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋๊ฒฐ๋ ๊ตฌ์ฑ์์ ์์ ์ค๋ช
์ฒ๋ผ ์ฌ์ฐ๊ฒฐ ์ ํ์ฑ ์ ์ ๋ณต์ํ ์ ์์ง๋ง ์ transport ํ๋ณด๋ ๋๊ฒฐ๋ mesh์ ๋ค์ด๊ฐ์ง ๋ชปํฉ๋๋ค. DHT routing-table entry๋ ๋ณ๋์ ์ฒญ๋ก ์ ์
๋๋ค. ๋ฐ๋ผ์ DHigh๋ discovery ๋ชฉํ์ด๋ฉฐ ํ๋ฉด์ ์ ํํ ๊ทธ ์์ transport ๋๋ mesh ์ด์์ด ํ์๋๋ค๋ ๋ณด์ฅ์ ์๋๋๋ค.
๊ฐฑ์ ๊ณผ ๋ ธ๋ ์๋ช
Peer๋ ์ฝ 2์ด๋ง๋ค ์ํ๋ฅผ ๋ณด๊ณ ํ๊ณ Agent๊ฐ ํ์ฌ snapshot์ ์ ๋ฌํฉ๋๋ค. ๋คํธ์ํฌยท์ค์ผ์ค๋งยท๋ณด๊ณ ์คํจ๋ก ์ง์ฐ์ด ์ถ๊ฐ๋ฉ๋๋ค. stoppingยทstoppedยทstartingยทfailed endpoint์๋ ๊ด๊ณ ์ ์ ํ์ํ์ง ์์ต๋๋ค. stoppingยทstoppedยทfailed ์๊ณผ ์ฐ๊ฒฐ์ ์ ์จ๊น๋๋ค. starting Peer๋ ํฉ์ Starting์ผ๋ก ํ์ํฉ๋๋ค. ์คํจ ํผ์ด์ ์ง๋จ ์ ๋ณด๋ ๋ ธ๋ ์กฐํ์ ์ ์ฅ ์คํ ๊ธฐ๋ก์ ์ ์งํฉ๋๋ค.
์ปจํ ์ด๋ ์ ๋ฆฌ๊ฐ ์ ์ ์๋ฃ๋๋ฉด Agent๋ Peer ์๋ณ์, ์ข ๋ฃ ์ํ, ์๋ช ์๊ฐ, ํ ํฝ ๋ ์ด๋ธ์ ์ถ์ฝ ๊ธฐ๋ก์ผ๋ก ๋ณด์กดํ๊ณ ๊ณผ๊ฑฐ ์ฐ๊ฒฐยทrouting/meshยท์ค์ฝ์ด์ ํฐ ์ค์ ๋ฉํ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํฉ๋๋ค. Agent ์ ์ฒด ์ํ์ ๋ ธ๋ ์กฐํ์๋ ์ด ์ถ์ฝ ์ข ๋ฃ ๊ธฐ๋ก์ด ๊ณ์ ํฌํจ๋๋ฉฐ, ์คํ ์ค์ธ Peer์ ์คํจํ ํ๋ก์ธ์ค๋ ์์ธ ์ ๋ณด๋ฅผ ์ ์งํฉ๋๋ค.
์ ๊ธฐ heartbeat๋ ์คํ ์ค์ด๊ฑฐ๋ ์คํจํ Peer์ Controller๊ฐ ์์ง ์์ ํ์ธํ์ง ์์ ์ ์ ์ข ๋ฃ ๊ธฐ๋ก์ ์ ์กํ๋ฉฐ, ํฐ ๋ณด๊ณ ๋ ์ ํ๋ ํฌ๊ธฐ์ JSON batch๋ก ๋๋๋๋ค. ์ ์ ์ข ๋ฃ ๊ธฐ๋ก์ ์์ ํ์ธ ๋ค ์ ๊ธฐ ๋ณด๊ณ ์์ ์๋ตํ์ง๋ง ์ ์ฒด ์ธ๋ฒคํ ๋ฆฌ์๋ ๋จ์ต๋๋ค. ์ฌ๋ฑ๋ก์ ์ด ์์ ํ์ธ์ ์ด๊ธฐํํ๋ฏ๋ก Controller ์ฌ์์ ํ ๋ณด์กด ์ด๋ ฅ์ ๋ค์ ์ ์กํฉ๋๋ค. Controller๋ ๋ถ๋ถ heartbeat์์ ๋น ์ง ๋ ธ๋๋ฅผ ์ข ๋ฃ๋ก ํด์ํ์ง ์์ต๋๋ค. Heartbeat ๊ณ์ฝ์ ์ฐธ๊ณ ํ์ญ์์ค.
Dashboard๊ฐ ์ฐ๊ฒฐ๋์ง ์์๋ Controller snapshot์ ์ข ๋ฃ ์ํ๊ฐ ๋ฐ์๋ฉ๋๋ค. ๋ฆ์ heartbeat๋ ์์ฑ ์๋ต์ stopped ๋๋ failed Peer๋ฅผ ๋ค์ ํ์ฑ ์ํ๋ก ๋๋๋ฆฌ์ง ๋ชปํฉ๋๋ค. failed Peer์ ์ ๋ฆฌ ์งํ๊ณผ stopped ์ ํ์ ๊ณ์ ๋ฐ์ํ๋ฉฐ, Dashboard๋ฅผ ๋ค์ ์ด๋ฉด ํ์ฌ snapshot์ผ๋ก ๊ทธ๋ํ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์คํ๋ผ์ธ Agent์ 10์ด ์ด์ ์ค๋๋ Peer ๋ณด๊ณ ๋ ์ ์์ ์ ์ธํฉ๋๋ค. ์๋ก ๋ค๋ฅธ ์๋ฒ ์๊ณ๋ฅผ ์ง์ ๋นผ์ง ์๋๋ก, Controller๋ ๋์ผ Agent๊ฐ ๊ธฐ๋กํ ๋ ์๊ฐ์ผ๋ก Peer ๋ณด๊ณ ๋์ด๋ฅผ ๊ณ์ฐํ ๋ค ์์ ํ ๊ฒฝ๊ณผ ์๊ฐ์ ์๊ธฐ ์๊ณ๋ก ๋ํฉ๋๋ค. ์ด๋ Agent๊ฐ ๋ณด๊ณ ํ ๋์ด์ ์์ ํ ์๊ฐ์ด๋ฉฐ ๋คํธ์ํฌ ์ ์ก ์ค ์๊ฐ์ ์ํ์ ๋ปํ์ง ์์ต๋๋ค. ๊ณผ๊ฑฐ ํ์์ ์๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์ด ๋์ด๋ฅผ ํ์ ํ ์ ์์ต๋๋ค. OverlayObservedAt์ overlay ๋ณด๊ณ ์ง์ ์ฌ๋ถ๋ฅผ ์๋ณํ๋ Peer ์๊ฐ์ผ๋ก, ๋ธ๋ผ์ฐ์ ยทController ํ์ฌ ์๊ฐ๊ณผ ์ง์ ๋น๊ตํด stale์ ํ์ ํ์ง ์์ต๋๋ค.
์ ๋น snapshot์ ์ด์ routingยทmesh ๊ด๊ณ๋ฅผ ์ง์๋๋ค. Agent๋ ์์๊ฐ ๋ค์งํ ์ค๋๋ ๋ณด๊ณ ๋ฅผ ๊ฑฐ๋ถํ๊ณ slice/map์ ๋ณต์ฌํด ์ ๋ฌํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒคํธ ์ผ๋ถ๊ฐ ์ ์ค๋ผ๋ ์ ์ํ ๋ณด๊ณ ๋ก ๊ทธ๋ํ๋ฅผ ๋ณต๊ตฌํฉ๋๋ค. ์ด ๊ท์น์ด ๋ชจ๋ ํ์ ๊ด๊ณ์ ํ์ฌ ํต์ ๊ฐ๋ฅ์ฑ์ด๋ ์ ์ก ์ค ์ฌ๋ถ๋ฅผ ๋ณด์ฆํ๋ ๊ฒ์ ์๋๋๋ค.
overlay ๋ณด๊ณ ๊ฐ ์๋ ์ด์ Peer๋ Transport ์ ๋ง ์ ๊ณตํฉ๋๋ค. ํ๋ฉด์์ overlay ์ ๋ณด๋ฅผ ๋ณด๊ณ ํ Peer ์๋ฅผ ์๋ดํ๋ฉฐ, ๊ณผ๊ฑฐ transport ์ ์ Kademlia๋ก ๋ฐ๊พธ์ด ํ์ํ์ง ์์ต๋๋ค. ๊ฐฑ์ ํ ์ด๋ฏธ์ง๋ฅผ ControllerยทAgent์ ๋ฐฐํฌํ๊ณ ์ Peer๋ฅผ ์คํํด์ผ ๋ชจ๋ ๋ ์ด์ด๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
API์ ๋ณด์กด ๋ฐ์ดํฐ
GET /api/v1/snapshot, GET /api/v1/network, ๊ทธ๋ํ๋ฅผ ํฌํจํ๋ SSE snapshot์ ๋์ผํ typed edge๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋์๋ณด๋์ Off ์คํธ๋ฆผ์ ์์ธ ๋
ธ๋ยท๊ฐ์ ๋์ ํผ์ด ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ํ ๊ฐ๊ณผ ๋ณ๊ฒฝ๋ถ ๊ณ์ฝ์ Dashboard SSE๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. Node์ ๊ด๋ จ ํ๋๋ routingPeers(Peer ID ๋ชฉ๋ก), meshPeers(topic โ Peer ID ๋ชฉ๋ก), overlayObservedAt์
๋๋ค. /api/v1/discovery๋ ํ์ฌ transport ํ๋ณด registry์ด๋ฉฐ ํ ํด๋ก์ง ์ด๋ ฅ endpoint๊ฐ ์๋๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{"source":"node-a","target":"node-b","protocol":"gossipsub","topic":"kpl/demo","reportedBy":["node-a"]}
protocol์ transport, kademlia, gossipsub ์ค ํ๋์
๋๋ค. API๋ GossipSub edge๋ฅผ topic๋ณ๋ก ๊ตฌ๋ถํฉ๋๋ค. ์ค๋ณต ๋ณด๊ณ ๋ ์ผ๊ด๋ ์์๋ก ํฉ์น๊ณ ์ ์ ์๋ endpoint, ๊ฐ์ run ์์ ๋ชจํธํ ์ค๋ณต Peer ID, ๋ค๋ฅธ run ๊ด๊ณ๋ ์ ์ธํฉ๋๋ค. ๊ทธ๋ํ/API edge endpoint๋ Node ID์ด๊ณ Node ๋ด๋ถ ์ด์ ๋ชฉ๋ก์ libp2p Peer ID์
๋๋ค.
Controller๋ ์คํ ์ค ์ฝ 5์ด๋ง๋ค observations.jsonl์ ๊ทธ๋ฃน ์ํยท์ฐจ์ยทclusteringยท์ ์ ์์ฝ๊ณผ ํ๋กํ ์ฝ๋ณ ๊ทธ๋ํ ํ๋ณธ์ ์ ์ฅํฉ๋๋ค. graphs์ ๊ฐ ํญ๋ชฉ์ protocol, ์ ๋ ฌ๋ Node ID ๋ฐฐ์ด nodes, ๊ฐ์ ์ธ๋ฑ์ค์ groups, ๋
ธ๋ ์ธ๋ฑ์ค ์ edges์
๋๋ค. ๊ณ ์ ๋ฌด๋ฐฉํฅ ๊ฐ์ ์ ์ ์ฅํ๋ฉฐ GossipSub๋ ์ฌ๋ฌ ํ ํฝ์ ๊ฐ์ Peer ์์ ํฉ์นฉ๋๋ค. ์ค์๊ฐ ๊ฐ์ ์ topic๊ณผ reportedBy๋ ์ด ์ ์ฅ ํ์์ ํฌํจ๋์ง ์์ต๋๋ค. ํ๋ณธ ์ฌ์ด ๋ณํ ์ ๋ถ๋ ํ๊ฐ์๋ณ ๊ฐ๋ณ ์ ์๋ ๋ณด์กดํ์ง ์์ต๋๋ค.
events.jsonl์๋ ์์งํ GRAFT/PRUNE ๋ฑ์ ์ ์ด์ ์์ธ RPC ๋ฉํ์ ๋ณด๊ฐ ๋จ์ง๋ง telemetry ์ ์ค์ ์ํฅ์ ๋ฐ์ต๋๋ค. ๊ฐ์ ์ด ์๋ ๊ณผ๊ฑฐ ์์ฝ์ ์ ๊ทธ๋ํ ์งํ๋ฅผ ๋ณต์ํ ์ ์์ต๋๋ค. ์๋ณธ์ ๊ฒฐ๊ณผ ZIP, ํ๋ณธ ์ถ์ยท๊ทธ๋ํ ๊ณ์ฐ์ ์ฐ๊ตฌ ์งํ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. ๋ ์ด์ด ํ์์ ๋ฐฐ์น๋ ๋ฉ์ธ ๋๋ฌ ์งํ์ ์ ์๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
๊ฐ๋ฐ ๊ฒ์ฆ
์ด๋ฏธ ์ฌ์ฉ ๊ฐ๋ฅํ Linux Docker engine์์ make test-linux ๋๋ docker build --target test -t kpl-v3:test .๋ก Peer meshยทDHT snapshot, Agent ์์ยท๋ณต์ฌ, Controller edgeยท์ ์ ๋, ๋ด์ฅ HTML์ ๊ฒ์ฌํฉ๋๋ค. ๋ค์ดํฐ๋ธ go test ./...๋ Linux์์๋ง ์คํํ๋ฉฐ Windows์์๋ Go ํ
์คํธ๋ ํ
์คํธ binary๋ฅผ ์คํํ์ง ๋ง์ญ์์ค. ์ต์ Node.js ํ๊ฒฝ์์ node --test internal/webui/topology_test.cjs internal/webui/topology-layout_test.cjs๋ก ๋ ์ด์ดยทtopic ํํฐ, ๋ถ์ฑ๊ผด ๋ฐฐ์น์ ์์ ํ, churn, ์นด๋ฉ๋ผ์ DOM ์กฐ์ ํ๊ท๋ฅผ ๊ฒ์ฌํฉ๋๋ค. JavaScript ํ
์คํธ๋ Node.js ๋ด์ฅ ๋ชจ๋๋ง ์ฌ์ฉํ๋ฉฐ npm ํจํค์ง ์ค์น๊ฐ ํ์ ์์ต๋๋ค. ์ด ๊ฒ์ฌ๋ ๋ธ๋ผ์ฐ์ ํ๋ฉด ๊ฒํ ๋ ์ค์ ๋ค์ค ์๋ฒ ์คํ์ ๋์ ํ์ง ์์ต๋๋ค. ์ ์ฒด ๊ฒ์ฆ ๋ฒ์๋ ๊ฐ๋ฐ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.