Architecture KO - k-p2p-lab/kpl-v3 GitHub Wiki
K-P2PLab v3 ๊ตฌํ ์ํคํ ์ฒ
Wiki home โบ ํ๊ตญ์ด ๋ฌธ์ ยท ์์ด ์๋ฌธ
๋ฌธ์ ์๋ด ยท ์์ค ์ ์ฅ์
์ด ๋ฌธ์๋ ๊ณตํต ๊ฐ๋
์ ํ๋ก์ ํธ ๊ณตํต ๊ฐ๋
์ ํ์ฌ v3 ๊ตฌํ์ ๋์์ํต๋๋ค. kpl-v3 ์์ค ์ ์ฅ์์ ๊ตฌํ๋ ์คํ ์ปดํฌ๋ํธ, Docker ๋ฐฐ์น, ํต์ ๊ฒฝ๋ก์ ๊ฒฉ๋ฆฌ ๋ณด์ฅ์ ์ค๋ช
ํฉ๋๋ค. ํ๋ก์ ํธ ๋ชฉํ, ๋ฒ์ ์ ๋
๋ฆฝ์ ์ธ ์ค๊ณ ์์น, ์ฐ๊ตฌ ๋ฐฐ๊ฒฝ๊ณผ ์ถํ๋ฌผ์ ์ด ์ํค์ ๋ณ๋ ํ์ด์ง์์ ๊ด๋ฆฌํฉ๋๋ค.
์ํคํ ์ฒ ๊ฐ์

์์ญ์ ์ ์ดยท๊ด์ธกยทPeer ์คํ์ ์ฑ ์์ ์์ฝํฉ๋๋ค. ๊ทธ๋ฆผ์ Control/P2P network ๊ตฌ๋ถ์ ๊ฐ์์ด๋ฉฐ, ์ค์ overlay ์ฐ๊ฒฐ๊ณผ ํธ๋ํฝ ๊ฒฝ๋ก๋ Docker ๋คํธ์ํฌ์ ์ธ๋ถ ๊ณต๊ฐ endpoint๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ธํ์ญ์์ค. ์๋ณธ PNG๋ ์ด ์ํค์ ๋ณด๊ดํฉ๋๋ค.
๊ตฌ์ฑ ์์์ ํต์ ๋์
flowchart TB
operator["์ด์์ ๋ธ๋ผ์ฐ์ ๋๋ REST client"]
subgraph controllerContainer["Controller ์ปจํ
์ด๋"]
dashboard["๋ด์ฅ Dashboard ์ ์ ํ์ผ"]
controller["Controller HTTP API, scenario scheduler์ ๋ถ์ worker"]
end
subgraph agentHost["๊ฐ Agent ํธ์คํธ: ๋
ธ๋ ๋ก์ปฌ Docker Engine"]
agent["Agent ์ปจํ
์ด๋"]
docker["Docker socket"]
peer["Standalone Peer ์ปจํ
์ด๋: libp2p์ ์ ํ์ tc"]
end
subgraph networkHost["Control manager: ๋คํธ์ํฌ ์ปดํฌ๋ํธ"]
manager["Network manager ์๋น์ค"]
managerDocker["Manager Docker socket"]
gateway["Standalone HTTP gateway"]
end
remote["๋ค๋ฅธ Agent ํธ์คํธ์ Peer ์ปจํ
์ด๋"]
prometheus["Prometheus ์ปจํ
์ด๋"]
grafana["Grafana ์ปจํ
์ด๋"]
records[("Controller ๋ฐ์ดํฐ: ์๋๋ฆฌ์ค์ ์คํ ๊ธฐ๋ก")]
series[("Prometheus ์๊ณ์ด ๋ณผ๋ฅจ")]
operator -->|"UI ๋ถ๋ฌ์ค๊ธฐ"| dashboard
operator -->|"REST ์์ฒญ๊ณผ SSE ๊ตฌ๋
"| controller
controller -->|"์์ฑ, ์ข
๋ฃ, publish"| agent
agent -->|"๋ฑ๋ก, heartbeat, event batch"| controller
agent -->|"์ปจํ
์ด๋ ์์ฑ๊ณผ ์ญ์ "| docker
docker -->|"์์๊ณผ ์ข
๋ฃ"| peer
controller -->|"๋คํธ์ํฌ ์ค๋น"| manager
manager -->|"๋น Peer overlay์ gateway ๊ต์ฒด"| managerDocker
agent -->|"Peer ๋ช
๋ น"| gateway
gateway -->|"HTTP ์ ์ด"| peer
peer -->|"์ํ, telemetry, discovery, clock"| gateway
gateway -->|"์ํ์ telemetry"| agent
gateway -->|"bootstrap, discovery, clock"| controller
peer <-->|"์ง์ libp2p TCP"| remote
controller -->|"๋ณด์กด"| records
prometheus -->|"metric scrape์ Agent target ์กฐํ"| controller
prometheus -->|"metric scrape"| agent
prometheus -->|"sample ๋ณด์กด"| series
grafana -->|"์กฐํ"| prometheus
operator -->|"๋ชจ๋ํฐ๋ง ๋ณด๊ธฐ"| grafana
ํ์ดํ๋ ์์ฒญ ๋๋ ๋ช ๋ น ๋ฐฉํฅ์ด๋ฉฐ ์๋ต์ ์๋ตํ์ต๋๋ค. libp2p ์ฐ๊ฒฐ์ ์๋ฐฉํฅ์ ๋๋ค. ์์๋ ์คํ ๋ฐฐ์น์ ์ ์ฅ์๋ฅผ ๋ํ๋ด๋ฉฐ ๋ณ๋์ Docker ๋คํธ์ํฌ๋ฅผ ๋ปํ์ง ์์ต๋๋ค. ์ค์ ์ฐ๊ฒฐ ๊ด๊ณ๋ ์๋ ๋คํธ์ํฌ ํ์์ ์ ์ํฉ๋๋ค. ๋จ์ผ ๋ ธ๋ Swarm์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ํ ํธ์คํธ์์ ์คํํ๋ฉฐ, ์ฌ๋ฌ Agent ๋ ธ๋๋ฅผ ์ ํํ๋ฉด Peer๋ฅผ ํธ์คํธ ์ฌ์ด์ ๋ถ์ฐํฉ๋๋ค.
์ปดํฌ๋ํธ
| ์ปดํฌ๋ํธ | v3 ๋ฐฐ์น | ์ญํ |
|---|---|---|
| Dashboard | Controller์ ๋ด์ฅ๋์ด Controller๊ฐ ์ ๊ณตํ๋ ์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ | ์คํ ์์๊ณผ ์ค์ง, ์ ์ฅ ์๋๋ฆฌ์ค์ ๊ฒฐ๊ณผ ๊ด๋ฆฌ, ์ค์๊ฐ AgentยทPeerยทํ ํด๋ก์งยท์ด๋ฒคํธยท์์ฝ ํ์, ๊ฒฐ๊ณผ๋ณ ๊ทธ๋ํ ์ด๋ฏธ์ง์ PNG ๋ค์ด๋ก๋๋ฅผ ๋ด๋นํฉ๋๋ค. |
| Controller | ์ปจํ ์ด๋ ํ๋. Swarm์์๋ ์ค์ ๋ control ๋ ธ๋์ ๊ณ ์ | ์๋๋ฆฌ์ค ํด์๊ณผ ์ค์ผ์ค๋ง, Agent ์ฉ๋ ์์ฝ, Peer ์๋ช ์ฃผ๊ธฐ ๋ฐ publish ๋ช ๋ น, bootstrap๊ณผ topic discovery registry, ํ ํด๋ก์ง์ telemetry ์ง๊ณ, ์คํ ๊ธฐ๋ก ๋ณด์กด, REST API์ Dashboard ์ ๊ณต, Controller metric ๋ ธ์ถ์ ๋ด๋นํฉ๋๋ค. |
| Agent | ์ ํํ Swarm ๋ ธ๋๋ง๋ค global-service task ํ๋ | Controller ๋ฑ๋ก๊ณผ heartbeat, ๋ก์ปฌ ์์ฉ ์ฉ๋ ์ ์ฉ, ๋ ธ๋ ๋ก์ปฌ Docker socket์ ํตํ Peer ์ปจํ ์ด๋ ์์ฑยท์ญ์ , publish ์์ฒญ ์ค๊ณ, Peer telemetry ์ ๋ฌ, ํธ์คํธ ๋ก์ปฌ Agent metric ๋ ธ์ถ์ ๋ด๋นํฉ๋๋ค. |
| Peer | ์คํ Peer๋ง๋ค ๋ ๋ฆฝ๋ standalone Docker ์ปจํ ์ด๋ ํ๋ | Kademlia์ GossipSub์ ํฌํจํ ์ค์ libp2p ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ , topic ์ฐธ์ฌ์ ๋ฉ์์ง ์ก์์ , ํ๋กํ ์ฝยท์ ๋ฌ ์ด๋ฒคํธ์ libp2p ์คํธ๋ฆผ ๋์ ๋ฐ์ดํธ ๋ณด๊ณ , ์ค์ ๋ Linux traffic-control ๊ท์น ์ ์ฉ์ ๋ด๋นํฉ๋๋ค. |
| Network manager / gateway | Control manager์ Manager ์๋น์ค์ standalone gateway | ๋งค Run ์ ์ ๋น Peer overlay๋ฅผ ๊ต์ฒดํ๊ณ ํ์ฉ๋ Peer HTTP ์์ฒญ์ ๊ณ ์ ์ ์ด ์๋น์ค๋ก ์ ๋ฌํฉ๋๋ค. |
| Prometheus | ์ค์ ๋ Swarm control ๋ ธ๋์ ์ปจํ ์ด๋ ํ๋ | Controller metric๊ณผ ์กฐ๊ฑด์ ๋ง๋ Agent๊ฐ ์๋ฆฐ metrics endpoint๋ฅผ ์์งํ๋ฉฐ ์ ์ฅ๋ ์คํ ๊ฒฐ๊ณผ์ ๋ณ๋๋ก ์๊ณ์ด์ ๋ณด์กดํฉ๋๋ค. |
| Grafana | ์ค์ ๋ Swarm control ๋ ธ๋์ ์ปจํ ์ด๋ ํ๋ | ์ฌ์ ๊ตฌ์ฑ๋ data source๋ก Prometheus๋ฅผ ์กฐํํ๊ณ ๊ธฐ๋ณธ ์คํ ๋ถ์ dashboard๋ฅผ ์ ๊ณตํฉ๋๋ค. |
Controller, Agent์ Peer ๋ชจ๋๋ ๋์ผํ kpl ์ด๋ฏธ์ง์ ํ์ ๋ช
๋ น์
๋๋ค. Swarm Agent๋ ํ์ฌ ์คํ ์ค์ธ task์ ์ ํํ ๋ก์ปฌ image ID๋ฅผ ํ์ธํด Peer๋ฅผ ์์ฑํ๋ฏ๋ก, mutable tag ๋๋ฌธ์ ํ ๋ฐฐํฌ ์์์ ์๋ก ๋ค๋ฅธ binary๊ฐ ์์ด์ง ์์ต๋๋ค.
์ ์ด ๋ฐ ์คํ ํ๋ฆ
- ์ด์์๊ฐ Dashboard ๋๋ REST API๋ก ์๋๋ฆฌ์ค๋ฅผ ์ ์ถํฉ๋๋ค. Controller๋ ์คํ์ ๋ง๋ค๊ณ distribution์ ํ์ ํ๋ฉฐ action์ ์ค์ผ์ค๋งํ๊ณ , ์ฌ์ ์ฉ๋์ด ์๋ Agent์ ์ Peer๋ฅผ ๋ฐฐ์ ํฉ๋๋ค.
- Controller๊ฐ ์ ํํ Agent์ ๋น๊ณต๊ฐ HTTP API๋ฅผ ํธ์ถํฉ๋๋ค. Agent๋ ๋ก์ปฌ Docker daemon์ Peer ์ปจํ ์ด๋ ํ๋๋ฅผ ๋ง๋ค๊ณ , ํด๋น Peer์ฉ์ผ๋ก ์์ฑํ ์ค์ ์ ๋ณต์ฌํด ์์ํ ๋ค ์๋ช ์ฃผ๊ธฐ ์ํ๋ฅผ Controller์ ๋ณด๊ณ ํฉ๋๋ค.
- Peer๋ Controller์์ bootstrap Peer, topic discovery ํ๋ณด์ Controller clock sample์ ์กฐํํฉ๋๋ค. ์ดํ Kademlia์ GossipSub ํธ๋ํฝ์ Peer ์ปจํ
์ด๋ ์ฃผ์ ์ฌ์ด์์ ์ง์ ์ด๋ํฉ๋๋ค. ์์ฝ๋ publish๋ Peer๊ฐ P2P ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ธฐ ์ ์
Controller -> Agent -> ๋์ Peer๊ฒฝ๋ก๋ฅผ ๊ฑฐ์นฉ๋๋ค. - ๊ฐ Peer๋ ์ํ์ batch telemetry๋ฅผ ์์ ์ Agent์ ๋ณด๋ ๋๋ค. Agent๋ ๊ฐ source์ session ๋ฐ sequence identity๋ฅผ ์ ์งํ๊ณ ์คํจํ batch๋ฅผ ์์๋๋ก ์ฌ์๋ํ๋ฉฐ ์ฃผ๊ธฐ์ ์ธ heartbeat๋ฅผ Controller์ ๋ณด๋ ๋๋ค. ์๋ก ๋ค๋ฅธ Peer์ event๋ ์์ผ ์ ์์ต๋๋ค. Controller๋ ์ด ๋ณด๊ณ ๋ฅผ ๋ฐํ์ผ๋ก ์ค์๊ฐ ํ ํด๋ก์ง, ์คํ metric, event stream๊ณผ ๋ณด์กด ๊ฒฐ๊ณผ ํ์ผ์ ๋ง๋ญ๋๋ค.
- Prometheus๋ Controller๋ฅผ scrapeํ๊ณ ์จ๋ผ์ธ์ผ๋ก ๋ฑ๋ก๋์ด ์ ํจํ metrics URL์ ์๋ฆฐ Agent๋ฅผ ์กฐํํฉ๋๋ค. Grafana๋ Prometheus๋ฅผ ์กฐํํ๊ณ , ๋ด์ฅ Dashboard๋ Controller API์ live stream์ ์ฝ์ต๋๋ค. ์ ์ฅ ๊ฒฐ๊ณผ ZIP์ Controller ๋ณด์กด ๋ฐ์ดํฐ์์ ์์ฑ๋๋ฉฐ Prometheus ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํฌํจํ์ง ์์ต๋๋ค.
Phase ์คํ ์ network manager๊ฐ ์ ๋ฆฌ๋ Peer overlay๋ฅผ ๊ต์ฒดํ๊ณ Agent๊ฐ ํ์ฑํ๋ฅผ ํ์ธํฉ๋๋ค. Peer์ ์ ์ด ์๋น์ค ์ฌ์ด์ HTTP๋ network gateway๋ฅผ ๊ฑฐ์น๋ฉฐ ์คํ P2P ๋ฉ์์ง๋ Peer ์ฌ์ด์์ ์ง์ ์ ๋ฌํฉ๋๋ค. ์๋ ๋คํธ์ํฌ ์ด๊ธฐํ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
Docker ๋คํธ์ํฌ์ ์ธ๋ถ ๊ณต๊ฐ endpoint
์ ๊ณต๋๋ v3 stack์ ์ธ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ก ๋ค๋ฅธ Docker ๋คํธ์ํฌ์ด์ง๋ง ๋ชจ๋ ์ ์ด ํธ๋ํฝ๊ณผ ๋ฐ์ดํฐ ํธ๋ํฝ์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์ ํ ๋ถ๋ฆฌ๋ ๊ฒ์ผ๋ก ํด์ํด์๋ ์ ๋ฉ๋๋ค.
| ๋คํธ์ํฌ ๋๋ endpoint ์์ญ | ์ฐ๊ฒฐ ์ปดํฌ๋ํธ | ํธ๋ํฝ๊ณผ ๊ณต๊ฐ ๋ฒ์ |
|---|---|---|
Peer ๋คํธ์ํฌ (peers) |
๋ชจ๋ Peer์ standalone network gateway | ๋งค Run ์ ์ ์ฌ์์ฑํ๋ ์ธ๋ถ attachable Swarm overlay(KPL_PEER_NETWORK)์
๋๋ค. ์ปจํ
์ด๋ ํฌํธ 20000์ผ๋ก libp2p TCP๋ฅผ ์ง์ ์ ๋ฌํฉ๋๋ค. Peer HTTP ์ ์ดยทtelemetryยทbootstrapยท์๊ฐ ์์ฒญ์ gateway๋ฅผ ํตํด ์ ์ด ์๋น์ค๋ก ์ ๋ฌํฉ๋๋ค. Peer ํฌํธ๋ ํธ์คํธ์ ๊ณต๊ฐํ์ง ์์ต๋๋ค. |
์ ์ด ๋คํธ์ํฌ (control) |
Controller, Agent, network-manager์ network gateway | Peer overlay๋ฅผ ๊ต์ฒดํ๋ ๋์ ์ ์งํ๋ stack ๋ฒ์์ attachable overlay์ ๋๋ค. ControllerโAgent ๋ช ๋ น๊ณผ ์ค๋น ์์ฒญ์ ์ ๋ฌํ๋ฉฐ gateway๋ ํ์ฉํ Peer HTTP ์์ฒญ๋ง ๋ overlay ์ฌ์ด์์ ์ ๋ฌํฉ๋๋ค. |
๋ชจ๋ํฐ๋ง ๋คํธ์ํฌ (monitoring) |
Controller, Agent, resource monitor, Prometheus์ Grafana. Peer๋ ์ฐ๊ฒฐํ์ง ์์ | stack ๋ฒ์์ Swarm overlay์ ๋๋ค. Prometheus๋ ์ฌ๊ธฐ์ Controller service DNS๋ก HTTP service discovery๋ฅผ ์์ฒญํ ๋ค, ์๋ต์ผ๋ก ๋ฐ์ control ๋ ธ๋์ Agent ๋ ธ๋์ ๊ณต๊ฐ metrics ์ฃผ์๋ฅผ scrapeํฉ๋๋ค. ๋ฐ๋ผ์ ์ค์ ์์ง์๋ ํด๋น ํธ์คํธ ํฌํธ ์ ๊ทผ๋ ํ์ํฉ๋๋ค. Grafana๋ ์ด overlay๋ฅผ ํตํด Prometheus์ ์ ๊ทผํฉ๋๋ค. |
| ์ด์์ endpoint | ๋ธ๋ผ์ฐ์ ๋๋ API client์์ control ํธ์คํธ๋ก ์ฐ๊ฒฐ | Controller/Dashboard 8080, Prometheus 9090๊ณผ Grafana 3000์ด ์ด์์์ฉ endpoint์ ๋๋ค. Swarm์ ์ค์ ๋ control ๋ ธ๋์ host mode๋ก publishํฉ๋๋ค. Swarm์์ Agent metric์ ๊ธฐ๋ณธ์ ์ผ๋ก host port 9091์ ์ฌ์ฉํ๋ฉฐ Agent ์ ์ด API๋ ๋น๊ณต๊ฐ๋ก ์ ์งํฉ๋๋ค. |
Docker Swarm ์์ฒด์ manager ๋ฐ node ์ ์ด ์์ญ์ ์๋น์ค๋ฅผ ๋ฐฐํฌํ๋ ์ธํ๋ผ์ ๋๋ค. v3๋ ๊ฐ ์คํ Peer๋ฅผ Swarm service๋ก ์์ฑํ์ง ์์ผ๋ฉฐ, Agent๊ฐ ์์ ์ ๋ ธ๋์ standalone ์ปจํ ์ด๋๋ก ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ Swarm์ ์คํ ์ค์ธ Peer๋ฅผ ๋ค๋ฅธ ํธ์คํธ๋ก ์ฎ๊ธฐ๊ฑฐ๋ ์๋์ผ๋ก ์ฌ์ค์ผ์ค๋งํ์ง ์์ต๋๋ค.
Peer๋ณ ๊ฒฉ๋ฆฌ์ ๋คํธ์ํฌ ๋์
๊ฐ Peer๋ ๋
๋ฆฝ๋ ์ปจํ
์ด๋์ Linux network namespace๋ฅผ ๊ฐ์ต๋๋ค. Agent๋ ํ์ฑ Swarm ๋
ธ๋๋ฅผ ์๊ตฌํ๋ฉฐ ๋ช
์์ ์ผ๋ก ์ค์ ํ attachable Swarm overlay์๋ง Peer๋ฅผ ์์ฑํฉ๋๋ค. host network, bridge network์ attach ๋ถ๊ฐ๋ฅํ overlay๋ ๊ฑฐ๋ถํฉ๋๋ค. Peer ์ปจํ
์ด๋์๋ Docker socket, host bind mount ๋๋ published host port๊ฐ ์ ๊ณต๋์ง ์์ต๋๋ค. ๋ชจ๋ Linux capability๋ฅผ ์ ๊ฑฐํ๊ณ no-new-privileges๋ฅผ ํ์ฑํํ๋ฉฐ, ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ค์นํ Peer์๋ง NET_ADMIN์ ์ถ๊ฐํฉ๋๋ค. Peer๋ privileged ์ปจํ
์ด๋๊ฐ ์๋๋๋ค.
Peer๋ P2P ์ฐ๊ฒฐ์ ์ด๊ธฐ ์ ์ ์๊ธฐ namespace ์์์ tc ๊ท์น์ ์ ์ฉํฉ๋๋ค. ์ง์ํ๋ ์ก์ ์กฐ๊ฑด์ delay, jitter, loss, duplication, corruption, reordering, netem rate ์ ํ๊ณผ ์ ํ์ ์ธ TBF shaping์
๋๋ค. ๊ธฐ๋ณธ scope: p2p์์๋ TCP 20000๋ง ๋์์ผ๋ก ์ผ์ผ๋ฏ๋ก Peer HTTP ์ ์ด ๋ฐ telemetry ๊ฒฝ๋ก๋ impairment๋ฅผ ์ฐํํฉ๋๋ค. scope: all์์๋ loopback์ ์ ์ธํ interface ์ ์ฒด์ ์ ์ฉ๋์ด ์คํ์ ์ผ๋ถ๋ก ์ ์ด์ telemetry๋ ์ง์ฐํ๊ฑฐ๋ ์์ค์ํฌ ์ ์์ต๋๋ค.
์ด ๊ฒฝ๊ณ ๋๋ถ์ ํ Peer์ traffic-control ๊ท์น์ด ๋ค๋ฅธ Peer๋ ํธ์คํธ interface๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. ๋ค๋ง ์ด๋ process ๋ฐ network ๊ฒฉ๋ฆฌ์ด๋ฉฐ ์ ์ฉ hardware ๋๋ multi-tenant ๋ณด์ ๊ฒฝ๊ณ๋ ์๋๋๋ค. ๊ฐ์ ์๋ฒ์ Peer๋ host kernel, CPU, memory, storage, Docker daemon๊ณผ underlay ๊ฒฝ๋ก๋ฅผ ๊ณต์ ํฉ๋๋ค. ๊ธฐ๋ณธ ๊ตฌ์ฑ์ Peer๋ง๋ค ์ ์ฉ CPU๋ memory ์ ํ์ ์ค์ ํ์ง ์์ต๋๋ค. Docker socket ์ ๊ทผ์ ๋์ ๋ ธ๋ ์ ์ด ๊ถํ์ ์ฃผ๋ฏ๋ก Agent, network-manager, resource monitor๋ ์ ๋ขฐํ๋ ๊ด๋ฆฌ ์ปดํฌ๋ํธ์ ๋๋ค. Controller, Peer์ network gateway์๋ Docker socket์ด ์์ต๋๋ค.
Swarm ๋ฐฐ์น
๋จ์ผ ๋
ธ๋ Swarm๋ ๋ค์ค ํธ์คํธ ๋ฐฐํฌ์ ๊ฐ์ stack๊ณผ overlay๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๊ตฌ์ฑ์์๋ deploy --all๋ก manager๋ฅผ Agent ๋
ธ๋๋ก ์ ํํ๊ณ KPL_MIN_AGENTS=1์ ์ค์ ํฉ๋๋ค.
stack.swarm.yaml์ Controller, network-manager, Prometheus์ Grafana replica๋ฅผ ๊ฐ๊ฐ ํ๋์ฉ KPL_CONTROL_NODE_ID๊ฐ ๊ฐ๋ฆฌํค๋ control manager์ ๋ฐฐ์นํฉ๋๋ค. Agent๋ scripts/swarm.sh์์ ์ ํํ ๋
ธ๋๋ก ์ ํํ global service์
๋๋ค. ๊ฐ Agent๋ ์๊ธฐ ๋
ธ๋์ Docker daemon๋ง ์ ์ดํ๊ณ , Controller๋ ๋ฑ๋ก๋ Agent์ ๊ฐ์ฉ ์์ฉ ์ฉ๋์ ๋ฐ๋ผ ์ Peer๋ฅผ ๋ถ์ฐํฉ๋๋ค. Agent๋ฅผ ์ถ๊ฐํด๋ ๊ธฐ์กด Peer๋ฅผ ์ฌ๋ฐฐ์นํ์ง ์์ต๋๋ค. Agent ๋
ธ๋๋ฅผ ์ ๊ฑฐํ๋ฉด ๊ทธ Agent์ Peer๋ ์ค์ง๋๋ฏ๋ก Swarm ๋ฐฐํฌ ๊ฐ์ด๋์ cleanup ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
์คํ overlay๋ ํธ์คํธ ์ฌ์ด์ Peer ์ฃผ์ ์ฐ๊ฒฐ์ฑ์ ์ ๊ณตํ์ง๋ง ์ค์ ์ง์ฐ๊ณผ ์์ค์๋ ์๋ฒ์ ๋ฌผ๋ฆฌ ๋คํธ์ํฌ์ Swarm VXLAN ๊ฒฝ๋ก๋ ํฌํจ๋ฉ๋๋ค. ํธ์คํธ ์๊ฐ ๋๊ธฐํ์ underlay ์ฉ๋์ ๋ณ๋์ ๋ฐฐํฌ ์ฑ ์์ ๋๋ค.
๊ด์ธก ๋ฐ ๋ณด์กด ๊ฒฝ๊ณ
Dashboard๋ Controller์ ์ต์ ์ํ์ ์ด๋ฒคํธ๋ฅผ ํ์ํฉ๋๋ค. Controller๋ ๊ฐ ์คํ์ scenario.yaml, experiment.json๊ณผ ์๋ฝํ ์ ์ฒด events.jsonl์ ์์ ์ data volume์ ์ ์ฅํฉ๋๋ค. ๋ค์ด๋ก๋ ์์ ์๋ snapshot ๊ฒฝ๊ณ๋ฅผ ๊ณ ์ ํ๊ณ ๊ทธ ๋ณด์กด prefix์์ ZIP์ฉ metrics.json๊ณผ export.json์ ๊ณ์ฐํฉ๋๋ค. Prometheus๋ ๋ณ๋ volume์ scrape ๊ธฐ๋ฐ ์๊ณ์ด์ ์ ์ฅํ๊ณ Grafana๋ ์ค์ ๊ณผ dashboard ์ํ๋ฅผ ๋ณ๋๋ก ์ ์ฅํฉ๋๋ค. Prometheus๋ Peer๋ณ exporter๋ฅผ scrapeํ์ง ์์ผ๋ฉฐ ํ์ฌ Agent collector๋ Peer๋ณ CPU ๋๋ memory ์ฌ์ฉ๋์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๊ฒฐ๊ณผ ZIP์ ์ด์ ๊ฐ๋ฅํ ์คํ ๊ธฐ๋ก์ด๋ฉฐ Prometheus ๋๋ Grafana์ backup์ ์๋๋๋ค.
Metric๊ณผ ํ ํด๋ก์ง๋ ์์ ๋ ๋ณด๊ณ ๋ฅผ ๋ฐํ์ผ๋ก ํ ๊ด์ธก ๊ฒฐ๊ณผ์
๋๋ค. ์ค๋๋๊ฑฐ๋ ์ฐ๊ฒฐํ ์ ์๋ Agent, telemetry queue ์์ค, scope: all impairment, scrape ์์ ๋๋ ๊ฐ์ ์ข
๋ฃ ๋๋ฌธ์ P2P ํธ๋ํฝ์ด ์ผ๋ถ ๋ฐ์ํ๋๋ผ๋ control plane์ ๊ด์ธก๋์ด ์ค์ด๋ค ์ ์์ต๋๋ค. Metric ์ ์๋ ์คํ ์งํ, ์์ง ํ๊ณ๋ ๋ชจ๋ํฐ๋ง๊ณผ ์ ์ฅ ๊ฒฐ๊ณผ, ๊ทธ๋ํ ์๋ฏธ๋ ํ ํด๋ก์ง๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
Controller๋ ์คํ ์ค ๊ทธ๋ฃน๋ณ ํ ํด๋ก์งยท์ ์ ์์ฝ์ observations.jsonl๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ์ ์ฅํฉ๋๋ค. ์ ์ ํ Peer ๋ณด๊ณ ์์ ํ์ธํ transportยทKademliaยทGossipSub ๊ฐ์ ๊ณผ ๋
ธ๋๋ ํจ๊ป ์ ์ฅํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ถ์์์ ๊ทธ๋ํ ์งํ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ํ๊ฐ์๋ณ ๊ฐ๋ณ ์ ์๋ ๋ณด์กดํ์ง ์์ต๋๋ค. ๋์ญํญ ํ๋ณธ์ ์ด๋ฒคํธ๋ก ์ ์ฅํ๋ฉฐ ์์ ๊ธฐ๊ฐ์ ๋์ ์ ์ ๊ณผ ๋
๋ฆฝ์ ์ผ๋ก ์ฌ๊ณ์ฐํฉ๋๋ค. Bandwidth ์ธก์ ์ ์ฐธ๊ณ ํ์ญ์์ค. ๋ด์ฅ Dashboard์ ์ ์ฅ ๊ฒฐ๊ณผ ์๊ฐํ๋ ์ ์ฅ๋ ์ด๋ฒคํธยท๊ด์ธก์น๋ฅผ ๋ถ์ API๋ก ์กฐํํด ์คํ๋ณ ๋ถํฌ์ ์๊ณ์ด์ ํ์ํ๊ณ ์ฌ๋ฌ ์คํ์ ๋น๊ตํฉ๋๋ค. Prometheus ๋ณด์กด ์๊ณ์ด๊ณผ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํฉ๋๋ค.
Controller์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ถ์์ ์ ์ฅํ ์ด๋ฒคํธยท๊ด์ธก ํ์ผ์ ๊ฒฝ๊ณ๋ฅผ ์ก์ ๊ณ์ฐํ๊ณ ์์ ์ํยท์๋ฃ ๋ถ์ยท๋น๊ต์ฉ ์์ฝ์ ๊ฐ์ ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ์ ๋ณด์กดํฉ๋๋ค. ์ฌ์์์ ์๋ฃ ๋ถ์์ ์ ์งํ์ง๋ง ์คํ ์คํ์ด๋ ๋ฏธ์๋ฃ ๊ณ์ฐ์ ์๋ ์ฌ๊ฐํ์ง ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์๋ฃ JSON์์ PNGยทCSV์ ๋น๊ต ๊ทธ๋ฆผ์ ์์ฑํ๋ฉฐ ์ฐฝ์ ๋ซ์๋ ์ ์๋ ์๋ฒ ๊ณ์ฐ์ ๊ณ์๋ฉ๋๋ค. API, ๋ณด์กด ํ์ผ, ์๊ฐํ ์ฌ์ฉ๋ฒ์์ ๊ฐ๊ฐ์ ๊ณ์ฝ์ ์ค๋ช ํฉ๋๋ค.
์ง์ ๋ฐฐํฌ ๊ฒฝ๊ณ
์ด์ ๋์์ Linux์ rootful Docker Engine์
๋๋ค. Peer๋ณ ๋คํธ์ํฌ ์กฐ๊ฑด์ Linux network namespace, tc, NET_ADMIN๊ณผ ํ์ํ qdisc module์ ์์กดํฉ๋๋ค. ํธ์คํธ ์ค๋น, ๋ฐฐ์น์ overlay ์๊ตฌ์ฌํญ, Agent metric ์ ๊ทผ, ์ ์ฅ์ ๋ฐ cleanup์ Swarm ๋ฐฐํฌ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
๊ตฌํ ๋์ํ
| ๋์ | ๊ตฌํ ๊ทผ๊ฑฐ |
|---|---|
| ์ปดํฌ๋ํธ ์ง์ ์ ๊ณผ Swarm ๋ฐฐ์น | cmd/kpl/main.go, stack.swarm.yaml |
| API, scenario scheduling, admission, run cleanup | internal/controller/api.go, internal/controller/runner.go, internal/controller/repeat.go |
| Agent lifecycle๊ณผ Docker ๊ฒฉ๋ฆฌ | internal/agent/agent.go, internal/agent/docker.go |
| Peer ํ๋กํ ์ฝ, transport discovery, traffic control | internal/peer/peer.go, internal/peer/discovery.go, internal/netem/netem.go |
| Dashboard์ ๋ณด์กด ๊ธฐ๋ก | internal/webui/static, internal/controller/scenarios.go, internal/controller/results.go |