Churn Publish Example KO - k-p2p-lab/kpl-v3 GitHub Wiki
Swarm์์ Worker Churn ์ค ๋ฐ๋ณต ๋ฐํ
Wiki home โบ ํ๊ตญ์ด ๋ฌธ์ ยท ์์ด ์๋ฌธ
๋ฌธ์ ์๋ด ยท ์์ค ์ ์ฅ์
examples/swarm-churn-publish.yaml์ worker๊ฐ ๊ณ์ ๋ค์ด์ค๊ณ ๋๊ฐ๋ ๋์ ํ์ฌ ์ด์ ์๋ worker๋ฅผ ๋ฌด์์๋ก ๊ณจ๋ผ ๋ฐ๋ณต ๋ฐํํ๋ ์์ ์
๋๋ค. ์์ Swarm smoke ์คํ์ ์ง์์ ์ธ churn๊ณผ ๋ฐ๋ณต ๊ด์ธก์ ๋ํฉ๋๋ค. ์ค์ธก ์ฉ๋์ ๋ณด์ฅํ๊ฑฐ๋ v2 ์คํ์ ๊ทธ๋๋ก ์ฌ์ํ๋ ๊ตฌ์ฑ์ด ์๋ ์์์ฉ ์ค์ ์
๋๋ค.
์ค๋น์ ์คํ
๋จผ์ Swarm ๋ฐฐํฌ ์ ์ฐจ๋ฅผ ์๋ฃํ์ญ์์ค. online Agent ๋ ๊ฐ ์ด์๊ณผ ์ ์ฒด ์ฌ์ ์ฌ๋กฏ 40๊ฐ ์ด์์ผ๋ก ์์ํฉ๋๋ค. ๋ค๋ฅธ ์คํ์ด ์๋ capacity 20์ Agent ๋ ๊ฐ๊ฐ ํ ์์
๋๋ค. Agent status์์ online ํ๋ง ์ธ๊ณ Peers์ ์ ์ ๋ / ์ฉ๋์ ํ์ธํ์ญ์์ค. ์์ฝ์ Available slots์๋ offline Agent๋ ํฌํจ๋ ์ ์์ต๋๋ค. ๋น๊ต๊ฐ ์ฝ๋๋ก ๋ค๋ฅธ ์คํ์ ์ข
๋ฃํด ๋์ญ์์ค.
๋ฐฐํฌํ ๋์ ๊ฐ์ ์ฌ์ฉ์ยทDocker context๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ ๋ช ๋ น์ sudo๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ฐฐํฌ ๊ณ์ ์ ์ด๋ฏธ Docker ๊ถํ์ด ์๋ค๋ฉด ์ผ๊ด๋๊ฒ ์๋ตํฉ๋๋ค.
sudo sh scripts/swarm.sh status
sudo sh scripts/swarm.sh access
sudo sh scripts/swarm.sh credentials
sudo sh scripts/swarm.sh scenario examples/swarm-churn-publish.yaml
access์ Controller URL์ ์ฌ์ญ์์ค. Run experiment์์ YAML scenario ์ ์ฒด๋ฅผ ์ถ๋ ฅ๋ ๋ด์ฉ์ผ๋ก ๊ต์ฒดํ๊ณ , ๋์๋ณด๋์ ๋ก๊ทธ์ธํ ์ํ์์ Run์ ๋๋ฆ
๋๋ค. scenario๋ YAML๋ง ์ถ๋ ฅํ๋ฉฐ ์น ๋์์ด ์คํ์ ์์ํฉ๋๋ค. ์น ํผ์ ๊ธฐ๋ณธ๊ฐ๊ณผ helper์ ๊ธฐ๋ณธ scenario ์ถ๋ ฅ์ ๋ค๋ฅธ ์์ ์
๋๋ค.
์คํ ์ฐฝ Run ์ Runs๋ฅผ 1~100์ผ๋ก ์ค์ ํ๋ฉด ์ ์ฒด ์๋๋ฆฌ์ค๋ฅผ ์์ฐจ ๋ฐ๋ณตํ๊ณ ํ์ฐจ๋ณ ๊ฒฐ๊ณผ๋ฅผ ๋จ๊น๋๋ค. Stop batch ๋๋ ํ์ฐจ ์คํจ๋ ๋จ์ ๋ฐ๋ณต์ ์ทจ์ํ๋ฉฐ ๋ช ์๋ seed๋ ์ฌ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ณต ์คํ๊ณผ ์งํ ์ ์๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
worker๋ Linux NET_ADMIN๊ณผ ํธ์คํธ ์ปค๋์ netem ์ง์์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ Peer๋ ์์ ์ ์ต๋ 5์ด ๋์ Controller health ํ๋ณธ์ ์ต๋ 7๊ฐ ์์งํ๋ฉฐ ๋ชจ๋ ์คํจํด๋ Ready๊น์ง ์งํํฉ๋๋ค. ๋ฏธ๋๊ธฐํ Peer๋ 5์ด๋ง๋ค ๋ค์ ์๋ํ๊ณ ๋๊ธฐํ Peer๋ 30์ด๋ง๋ค ๊ฐฑ์ ํ๋ฉฐ, ๋ง์ง๋ง ์ฑ๊ณต ํ๋ณธ์ ๊ฐฑ์ ์์ด 2๋ถ์ด ์ง๋๋ฉด ์ ๋ขฐ ์ํ๋ฅผ ์์ต๋๋ค. ์ฅ์๊ฐ ์คํ ์ค์๋ chrony/NTP๋ฅผ ๊ณ์ ์ฌ์ฉํ์ญ์์ค. ์์ ์ ๋คํธ์ํฌ ์ค์ ์ ์ก์ P2P TCP ํธ๋ํฝ์ ์ ์ฉํ๋ฉฐ ์ ์ดยท์๊ณ ์ธก์ ยทdiscoveryยทtelemetry HTTP๋ ํด๋น ๋ฒ์์์ ์ ์ธํฉ๋๋ค.
์คํ ํ๋ฆ
| ๋จ๊ณ | ๋์ |
|---|---|
| Bootstrap | ์์ ์ ์ผ๋ก ์ ์งํ boot Peer ๋ ๊ฐ๋ฅผ ์์ฑํ๊ณ readiness๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. DHT bootstrap๋ง ์ ๊ณตํ๋ฉฐ GossipSub๋ ๊ณ ์ ๋ฐํ์๋ก ์ฐธ์ฌํ์ง ์์ต๋๋ค. |
| Churn | background job worker-churn์ ์์ํฉ๋๋ค. ์ต๋ 10,000๋ฒ์ worker join์ ๊ฐ์ฉ Agent์ balanced๋ก ์์ฐจ ๋ฐฐ์นํ๋ฉฐ ๊ฐ๊ฒฉ์ ํ๊ท 4์ด์ ์ง์๋ถํฌ์
๋๋ค. |
| Worker ์๋ช | Pareto xm: 60s, alpha: 2.5๋ฅผ ์ฌ์ฉํด ์ด๋ก ํ๊ท ์๋ช
์ด 100์ด์
๋๋ค. Docker ์์ฑ ์น์ธ ์์ ๋ถํฐ ์์ํ๋ฏ๋ก startup ์๊ฐ๋ ํฌํจํฉ๋๋ค. ๋ง๋ฃ๋ ์ ๊ฑฐ ์์ฒญ์ด๋ฉฐ ์ค์ ์ ๋ฆฌ๋ ์ดํ ์๋ฃ๋ ์ ์์ต๋๋ค. |
| Warm-up | churn์ ๊ณ์ํ๋ฉด์ 3๋ถ ๊ธฐ๋ค๋ฆฝ๋๋ค. |
| ๋ฐํ | ์์ฐจ์ ์ผ๋ก 30 round๋ฅผ ์คํํฉ๋๋ค. ๋งค round๋ง๋ค ์กฐ๊ฑด์ ๋ง๋ worker ์ต๋ 10๊ฐ๋ฅผ ์ค๋ณต ์์ด ๋ฌด์์ ์ ํํ๊ณ ํ๊ท 1์ด์ ์ง์๋ถํฌ ๊ฐ๊ฒฉ์ผ๋ก ์์ฐจ ๋ฐํํฉ๋๋ค. |
| Round ์ฌ์ด | ๊ฐ round ์ฌ์ด์ 10์ด์ฉ, ์ด 29๋ฒ ๊ธฐ๋ค๋ฆฝ๋๋ค. ํ๋ณด๊ฐ ์์ด๋ ์ด ๋ช ์์ ๋๊ธฐ ๋๋ถ์ ๋ชจ๋ round๊ฐ ์ฆ์ ์์ง๋์ง ์์ต๋๋ค. |
| ์์ง๊ณผ ์ ๋ฆฌ | ๋ง์ง๋ง round ๋ค์๋ churn์ ์ ์งํ๋ฉฐ 30์ด ๋ ์์งํฉ๋๋ค. ์ด์ด stop-all์ด ๋จ์ join job์ ์ทจ์ํ๊ณ Peer๋ฅผ ์ ๋ฆฌํฉ๋๋ค. |
์ด๋ก ์ ์ ์ ์ํ์ worker ์๋ 100s / 4s = 25์ด๋ฉฐ boot ๋ ๊ฐ๊ฐ ๋ณ๋์
๋๋ค. ์ด๋ ๊ธฐ๋๊ฐ์ด๊ณ ์ํ์ด ์๋๋๋ค. ์๋ช
์ ๋ณ๋ํ๊ณ Docker ์์ฑยท์์์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉฐ ๋ฐฐ์น ๊ฐ๋ฅํ Agent๊ฐ ๋ชจ๋ ๊ฐ๋ ์ฐจ๋ฉด join ์ ์๊ฐ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด ๋๋ฌธ์ ์ค์ ready ์์ ๋์ฐฉ๋ฅ ์ ๋ฌ๋ผ์ง๋๋ค. 40์ฌ๋กฏ ๊ถ์ฅ์ ์ฌ์ ๋ฅผ ๋ ์์์ ์ผ ๋ฟ ํน์ ์๋ฒ๊ฐ ์ด ๋ถํ๋ฅผ ๊ฐ๋นํ๋ค๋ ์ค์ธก ๊ทผ๊ฑฐ๋ ์๋๋๋ค.
count: 10000์ ์ด join ์์ฐ์ด๋ฉฐ ๋์ worker 10,000๊ฐ๊ฐ ์๋๋๋ค. ๋ณดํต ์ด ์์ฐ์ ๋ค ์ฐ๊ธฐ ์ ์ ๋ง์ง๋ง stop-all์ด producer๋ฅผ ์ทจ์ํฉ๋๋ค. ์ด ์์ ์๋ ๊ฐ๋ณ worker์ ๋ช
์์ leave phase๊ฐ ์๊ณ ์ํ๋งํ ์๋ช
์ด ํด์ฅ์ ๋ฐ์์ํต๋๋ค.
readiness barrier๋ ์์ ์ ์ธ boot ๊ทธ๋ฃน์๋ง ์ ์ฉํฉ๋๋ค. ๊ณ์ ์ปค์ง๋ churn ๊ทธ๋ฃน์ wait-ready๋ฅผ ์ ์ฉํ๋ฉด ํ์ฌ generation์์ ์ด๋ฏธ ์ข
๋ฃ๋ ๊ตฌ์ฑ์๋ ํฌํจ๋ฉ๋๋ค. 3๋ถ warm-up์ ์ด ๋ถ์ ์ ํ barrier๋ฅผ ํผํ๊ธฐ ์ํ ๋๊ธฐ์ด๋ฉฐ ํน์ worker ์๋ GossipSub mesh ์๋ ด์ ๋ณด์ฅํ์ง ์์ต๋๋ค. worker์ mesh ์ค์ ์ d: 9, dLow: 7, dHigh: 11์
๋๋ค.
๋ด์ฅ boot Peer๋ PubSub๊ฐ ๋นํ์ฑํ๋์ด ์์ผ๋ฏ๋ก DHT bootstrap๋ง์ผ๋ก worker๊ฐ GossipSub overlay์ ์ฐ๊ฒฐ๋์ง๋ ์์ต๋๋ค. Worker๊ฐ PubSub๋ฅผ ์์ํ๋ฉด ๋์ผ runยท์ ํํ topic์ Controller discovery registry๋ฅผ ์ฆ์ ์กฐํํ๊ณ ์ดํ 3์ด ๊ฐ๊ฒฉ์ผ๋ก ๋ค์ round๋ฅผ ์์ฝํฉ๋๋ค. internal/peer/discovery.go๋ subscriber๋ฅผ ์ฐ์ ํ๋ฉด์ rendezvous hash๋ก ready ํ๋ณด์ ์์๋ฅผ ์ ํฉ๋๋ค. dial ์์ฐ์ DHigh์์ ํ์ฌ topic peer ์๋ฅผ ๋บ ๋ถ์กฑ๋ถ์ด๋ฉฐ transport ์ฐ๊ฒฐ ์ํ์ผ๋ก ํ ๋ฒ ๋ ์ ํํฉ๋๋ค. dial ์คํจ ์ ๋ค์ ์์ ํ๋ณด๋ฅผ ์๋ํ๊ณ ์คํจ ํ๋ณด์๋ 15์ด ์ฌ์๋ ์ ์๋ฅผ ์ ์ฉํฉ๋๋ค. ๋๋ฆฐ round๋ ๋ค์ ์กฐํ๋ฅผ ๋ฆ์ถ ์ ์์ต๋๋ค. ์ค์ GRAFT mesh๋ ๊ณ์ GossipSub๊ฐ ์ ํํ๋ฏ๋ก registry ํ๋ณด๋ transport ์ฐ๊ฒฐ์ด ๊ณง mesh ๊ตฌ์ฑ์์ธ ๊ฒ์ ์๋๋๋ค.
10๊ฐ ๋
ธ๋๋ฅผ ๋ชจ๋ ์ ํํ round์๋ ํ๊ท ํฉ๊ณ 9์ด์ธ ๊ฐ๊ฒฉ ์ํ ๊ฐ๊ฐ ์์ผ๋ฉฐ ์ฒซ ์์ฒญ๋ถํฐ ๋ง์ง๋ง ์์ฒญ์ ์์ฝ ์๊ฐ๊น์ง ์ ์ฉ๋ฉ๋๋ค. ์์ฒญ ์ฒ๋ฆฌ ์๊ฐ์ ์ด ๊ฐ๊ฒฉ ์์ ํฌํจ๋๊ณ , ์ด๊ณผ ์ง์ฐ๊ณผ ๋ง์ง๋ง ์์ฒญ์ ์ฒ๋ฆฌ ์๊ฐ์ด round๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ๋๊ธฐ ์ค์ผ์ค์ 180 + 30ร9 + 29ร10 + 30 = 770์ด, ์ฆ ์ฝ 12๋ถ 50์ด์ด๋ฉฐ bootstrapยทAPIยท์ ๋ฆฌ ์๊ฐ์ด ์ถ๊ฐ๋ฉ๋๋ค. ๊ณ ์ ์ข
๋ฃ ์๊ฐ์ ์๋๋๋ค. ํ๋ณด๊ฐ ์ ๊ฑฐ๋ ์๋ round๋ ์งง์์ง๊ณ ๋๋ฆฐ ์์ฒญ์ ๊ธธ์ด์ง๋๋ค.
๋ฐํ ๋์๊ณผ ์ธก์ ์๋ฏธ
๊ฐ round ์์ ์ Controller๋ worker ๊ทธ๋ฃน์์ Agent๊ฐ online์ด๊ณ , ์ํ๊ฐ ready์ด๋ฉฐ, ๋ฐํ์ด ๊ฐ๋ฅํ full worker ์ค kpl/swarm-churn์ ์ฐธ์ฌํ ๋
ธ๋๋ฅผ ๋ค์ ์กฐํํฉ๋๋ค. ์ด ์งํฉ์ shuffleํ์ฌ ์ต๋ 10๊ฐ๋ฅผ ์ค๋ณต ์์ด ์ ํํฉ๋๋ค. ๊ฐ์ ๋
ธ๋๊ฐ ๋ค๋ฅธ round์์ ๋ค์ ์ ํ๋ ์ ์์ผ๋ฉฐ ๋์ค์ ๋ค์ด์จ worker๋ ์ดํ round์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
์ ํํ worker๊ฐ ์๊ธฐ ์ฐจ๋ก ์ ์ ์๋ช
์ ๋คํ ์ ์์ต๋๋ค. onError: continue๋ ๊ฐ๋ณ ์คํจ๋ฅผ phase-operation-failed๋ก ๊ธฐ๋กํ ๋ค ๊ณ์ ์งํํฉ๋๋ค. ํ๋ณด๊ฐ ์์ผ๋ฉด ๊ทธ round๋ no-op์
๋๋ค. ์ทจ์ยท์๋๋ฆฌ์ค deadlineยท์ ์ฅ ์ค๋ฅ ๋ฑ ์น๋ช
์ ์ธ ์คํจ๋ ์ฌ์ ํ ์คํ์ ๋๋ผ ์ ์์ต๋๋ค. ์ต๋์น๋ ์ ํ๋ ๋ฐํ ์์
300๊ฐ์ด๋ฉฐ ์ฑ๊ณต ๋ฉ์์ง 300๊ฐ๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค.
๊ฐ ๋ฐํ์ payloadSize: 32, payloadEncoding: envelope, deliveryWindow: 10s, topic kpl/swarm-churn์ ์ฌ์ฉํฉ๋๋ค. 32๋ฐ์ดํธ๋ ๋ฌด์์ payload์ ๊ธธ์ด์
๋๋ค. envelope๊ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฏ๋ก PubSub ๋ฐ์ดํฐ์ ๋คํธ์ํฌ ํธ๋ํฝ์ 32๋ฐ์ดํธ๋ณด๋ค ํฝ๋๋ค. envelope ๋๋ถ์ ์ ํ ์ง์ฐ์ ์ธก์ ํ ์ ์์ต๋๋ค.
worker network๋ scope: p2p, ์ง์ฐ 25ms, jitter 2ms, ์ค์ packet loss 0.5%์
๋๋ค. boot์๋ ์ถ๊ฐ ๋คํธ์ํฌ ์ ์ฝ์ด ์์ต๋๋ค. packet loss๋ ์ ํ๋ฆฌ์ผ์ด์
๋ฏธ๋๋ฌ๊ณผ ๋ค๋ฆ
๋๋ค. TCP๊ฐ ์ฌ์ ์กํ ์ ์๊ณ ๋ฉ์์ง ํ๋๊ฐ ์ฌ๋ฌ subscriber์๊ฒ ๋๋ฌํฉ๋๋ค. ์ ์ฒด ์์ ์ด๋ฒคํธ์๋ ๋ฐํ์ ๋ก์ปฌ ์์ ๋ ํฌํจ๋์ง๋ง ์ธ์
๊ธฐ๊ฐ ๋๋ฌ๋ฅ ์์๋ ์ ์ธํฉ๋๋ค.
๊ด์ธก๊ณผ ๊ฒฐ๊ณผ ์ ์ฅ
๋์๋ณด๋์์๋ ready Peer ์, Agent ์ ์ ๋, ์คํยทjob ์ํ์ ์ด๋ฒคํธ๋ฅผ ํ์ธํฉ๋๋ค. Grafana์ KP2PLab Experiment Analysis์์ Run์ ์คํํ swarm-churn-random-publish๋ฅผ ์ ํํ๊ณ Agent, Topic์ผ๋ก ํํฐ๋งํ์ญ์์ค. ์ข
๋ฃ ํ์๋ ์๊ฐ ๋ฒ์๋ฅผ ์คํ ๊ตฌ๊ฐ์ผ๋ก ๋ง์ถฅ๋๋ค.
| ๊ด์ธก ํญ๋ชฉ | ๋ฐ์ดํฐ |
|---|---|
| ๋ณํํ๋ ๋ ธ๋ ์์ ์ ์ ์ฉ๋ | ์ค์๊ฐ node inventory, kpl_nodes, kpl_agent_active_nodes |
| ๋ฐํยท์์ ยท์ค๋ณต ์ด๋ฒคํธ ์ | kpl_events_total. mesh ๋ณํ๋ graft/prune ์ด๋ฒคํธ๋ก ๊ด์ธก |
| ์์ ๋์ ์กฐ๊ฑด๋ถ ๋๋ฌ๋ฅ ยทํ์ธ๋ ๋ฐํ ์์ ๋์ ๋๋ฌ๋ฅ ยทcoverage ๋ฒ์ | kpl_window_delivery_ratio, kpl_window_initial_delivery_ratio, kpl_window_stable_coverage, kpl_window_stable_coverage_upper_bound. Run ํํฐ๋ง ์ ์ฉ |
| Pending๊ณผ ๊ด์ธก ๋ถ๋ช | kpl_window_pending_publications, kpl_window_unknown_pairs, kpl_window_publication_availability_unknown_pairs, kpl_window_continuity_unknown_pairs, kpl_window_measurement_incomplete |
| ์์ ๋์์ ์๊ฒฉ ์ฑ๊ณต ์์ ๋น ๊ด์ธก ์ถ๊ฐ ๋ณต์ฌ๋ณธ | kpl_window_duplicates_per_reached_pair. Run ํํฐ๋ง ์ ์ฉ |
| Envelope ์ง์ฐ๊ณผ PubSub ๋ฐ์ดํฐ ์ | kpl_window_propagation_latency_seconds, kpl_message_bytes_total |
| ์ค์ ํ ๋คํธ์ํฌ ์กฐ๊ฑด | kpl_network_configured_*. ์ค์ ์์ค๋ฅ ์ด๋ RTT๊ฐ ์๋ ์ค์ ๊ฐ |
| ์คํจ ์์ฒญ๊ณผ ๋ณด๊ณ ๋ telemetry drop | kpl_operation_failures_total, kpl_telemetry_dropped_events_total |
์ด ์์ ์ session-window-v1 ๋ฐํ์ ์ค์ ๋ฐํ ์๊ฐ๊ณผ ์ค์ ๋ 10์ด ๋ง๊ฐ์ ์ฌ์ฉํฉ๋๋ค. measurement_start๋ ๊ตฌ๋
์ ํ๋ฆฌ์ผ์ด์
์ธ์
์ ๊ธฐ๋กํ๊ณ ๋์ผ ์ธ์
์ 2์ด ์ฃผ๊ธฐ checkpoint ๋๋ stop์ผ๋ก ๊ด์ธก๋ ์ง์์ ํ์ธํฉ๋๋ค. ์ฃผ ๋๋ฌ๋ฅ ์ ๊ธฐ๊ฐ ์ ์ฒด์ ๊ฑธ์ณ ๊ตฌ๋
์ ์ฆ๋ช
ํ ์ธ์
๋ง ์ฌ์ฉํฉ๋๋ค. ๋ง๊ฐ ์ stop ์ธ์
์ ์ด๋ฏธ ์์ ํ์ด๋ ์ฃผ ์งํ์ ๋ถ์ยท๋ถ๋ชจ์์ ๋ชจ๋ ์ ์ธํ๊ณ , ๋ฆ์ join๋ ์ ์ธํฉ๋๋ค. ๋คํธ์ํฌ ๋จ์ ์ด๋ mesh ์ ๊ฑฐ๋ก ๊ตฌ๋
์๋ฅผ ์ ์ธํ์ง ์์ต๋๋ค.
ํ์ธ๋ ๋ฐํ ์์ ๋์ ๋๋ฌ๋ฅ ๊ณผ ์์ coverage๋ฅผ ํจ๊ป ๋ณด์ญ์์ค. ํ์ธ๋ ์ต์ด 10๋ช
์ค 2๋ช
์ด ์ดํํ๊ณ ๊ทธ์ค 1๋ช
์ ๋ฏธ๋ฆฌ ์์ ํ์ผ๋ฉฐ ์์ ๊ตฌ๋
์ 8๋ช
์ค 7๋ช
์ด ์ฑ๊ณตํ๋ฉด ์์ ๋๋ฌ๋ฅ ์ 7/8, ๋ฐํ ์์ ๋์ ๋๋ฌ๋ฅ ์ 8/10, coverage๋ **80%**์
๋๋ค. ๋ฐํ ์์ ๋์ ๋๋ฌ๋ฅ ์๋ ์ดํ์์ ์กฐ๊ธฐ ์ฑ๊ณต๋ ํฌํจํฉ๋๋ค. ํ์ธ๋ ๋ฐํ ์์ ์์ ์ดํ๊ณผ ๋ง๊ฐ๊น์ง ์ง์ ์ด๋ ์ชฝ๋ ์ฆ๋ช
ํ์ง ๋ชปํ๋ฉด coverage ๋ฒ์๋ ์์ /ํ์ธ๋ ๋ฐํ ์์ ๋์๋ถํฐ (์์ + ์ง์ ์ฌ๋ถ ๋ถ๋ช
)/ํ์ธ๋ ๋ฐํ ์์ ๋์๊น์ง ๋์ด์ง๋๋ค. ์๋ณธ sequence๊ฐ ๋๋ฝ๋ ๋ฏธ์์ ๋ ๋๋ฌ๋ฅ ๋ฒ์๋ฅผ ๋ํ๋๋ค. ์ด ๋ฒ์๋ ์ ๋ขฐ๊ตฌ๊ฐ์ด ์๋๋๋ค. 10์ด๊ฐ ์ง๋์ง ์์ ๋ฉ์์ง๋ pending์
๋๋ค. ๋ฐํ ์์ ๊ฐ์ฉ์ฑ ๋ถ๋ช
ํ๋ณด๋ ํ์ธ๋ ์ง๋จ ๋ฐ์ ๋๊ณ ๊ด์ธก ํ์ง๋ก ํ์ํฉ๋๋ค. ํ์ธ๋ ์ง๋จ์ด ๋น์์ ๋๋ง ๋ฐํ ์์ ๋๋ฌ๋ฅ ๊ณผ coverage๊ฐ N/A์ด๋ฉฐ incomplete/unknown ๊ฒฝ๊ณ ๋ง์ผ๋ก ์จ๊ธฐ์ง๋ ์์ต๋๋ค.
PubSub join/leave๋ Peer ์์ฑยท์ข
๋ฃ ๊ธฐ๋ก์ด ์๋๋๋ค. ์ธก์ ์ด๋ฒคํธ๋ ๊ณ์ธก๋ ๊ตฌ๋
์ธ์
์ด๋ฉฐ ์ ์ฒด Docker lifecycle์ด๋ ๋ฌผ๋ฆฌ์ uptime ์ด๋ ฅ์ด ์๋๋๋ค. ๊ฐ์ ์ข
๋ฃ๋ ๋ถ๋ช
๊ผฌ๋ฆฌ ๊ตฌ๊ฐ์ ๋จ๊ธธ ์ ์๊ณ ์์ ๋ณด์ด์ง ์์ telemetry๋ ์์ ๋ก๊ทธ๋ง์ผ๋ก ๊ฒ์ถํ์ง ๋ชปํฉ๋๋ค. ์ ๋ขฐ ์ํ์ ์๊ณ ์ถ์ ์ uncertainty๋ฅผ ๊ธฐ๋กํ๋ฉฐ, ๋ฒ์์ ๊ธฐํ ๋ด์ธ ์์ ์ถ์ ์ ์์ ์ฑ๊ณต์ผ๋ก ์ธ์ ํด๋ ์ง์ฐ ํต๊ณ์์๋ ์ ์ธํฉ๋๋ค. ๊ฐฑ์ ์คํจ๊ฐ 2๋ถ ์ ํจ ๊ธฐ๊ฐ์ ๋์ผ๋ฉด ์ ๋ขฐ metadata๋ฅผ ์ค๋จํ๊ณ ์ดํ ์ฑ๊ณตํ๋ฉด ๋ค์ ์ ๊ณตํฉ๋๋ค. chrony/NTP๋ ๊ณ์ ๊ถ์ฅํฉ๋๋ค. ZIP metrics.json์ ๊ฐ์ ์ด๋ฒคํธ ๊ฒฝ๊ณ์์ ์ฌ๊ณ์ฐํฉ๋๋ค. ๊ณผ๊ฑฐ dispatch ๋์์ legacy๋ก ๋จ๊ธฐ๋ฉฐ ์ง์ ๊ตฌ๋
์ฆ๊ฑฐ๋ฅผ ๋์ ํ์ง ๋ชปํฉ๋๋ค. ์งํ ์ ์์ ์์ง ํ๊ณ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์คํ ์ข
๋ฃ ํ Peer ์ ๋ฆฌ์, ๋ค๋ฅธ ์คํ์ด ์๋ค๋ฉด Agent ์ ์ ๋ 0์ ํ์ธํฉ๋๋ค. stop-all์ด ๋๋์ง ์์ join job์ ์๋์ ์ผ๋ก ์ทจ์ํ๋ฏ๋ก completed ์คํ์๋ canceledJobs: 1์ด ์์ ์ ์์ต๋๋ค. ์ด ๊ฐ๋ง์ผ๋ก ์คํจ๋ฅผ ๋ปํ์ง๋ ์์ต๋๋ค.
์คํ ํญ๋ชฉ ๋๋ Saved results์ Download results๋ฅผ ์ฌ์ฉํ์ญ์์ค. ZIP์๋ ์ต๊ทผ 300๊ฐ ๋ฒํผ์ ๋ณ๊ฐ๋ก ์ ์ถํ ์๋๋ฆฌ์คยท์คํ ๋ฉํ๋ฐ์ดํฐยท๋ด๋ณด๋ด๊ธฐ ๊ฒฝ๊ณ๊น์ง ์ ์ฅ๋ ์ ์ฒด ์ด๋ฒคํธ ๋ก๊ทธ๊ฐ ๋ค์ด๊ฐ๋๋ค. metrics.json๊ณผ ์์ง๋ ๊ตฌ๋
์ธ์
์ด๋ฒคํธ๋ ํฌํจํ์ง๋ง ๋ณ๋์ ์์ ํ Docker lifecycle snapshot, ๋ฉ์์ง payload dump, PCAP, Prometheus/Grafana ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํฌํจํ์ง ์์ต๋๋ค. ์คํ ์ค ๋ค์ด๋ก๋๋ snapshot์ด๋ฉฐ ๋ค์ด๋ก๋๋ก ๋๋ฝ๋ telemetry๋ฅผ ๋ณต๊ตฌํ ์๋ ์์ต๋๋ค. ํ์ผ ๊ตฌ์ฑ๊ณผ ๋ณด์กด ์ ์ฑ
sudo sh scripts/swarm.sh remove๋ก ์น ์๋น์ค๋ฅผ ๋ด๋ฆฌ๊ธฐ ์ ์ ๋ค์ด๋ก๋ํ์ญ์์ค. ๋ฐ์ดํฐ volume๊ณผ ์ธ๋ถ Peer network๋ ๋จ์ต๋๋ค. ์ฌ์์ ํ ๋ณด์ด๋ interrupted ๊ฒฐ๊ณผ๋ ์๋ ์ฌ๊ฐํ์ง ์์ผ๋ฉฐ Peer ์ ๋ฆฌ ์๋ฃ๋ฅผ ์ฆ๋ช
ํ์ง ์์ต๋๋ค.
์กฐ์ ํ ๊ฐ
| ์ค์ | ํจ๊ณผ |
|---|---|
Worker join์ count |
์ด ์์ฑ ์์ฐ์ ๋ฐ๊ฟ๋๋ค. ๋ง์ง๋ง ์์ง ๊ตฌ๊ฐ๊น์ง join์ด ์ด์ด์ง๋๋ก ์ถฉ๋ถํ ํฌ๊ฒ ์ ์งํฉ๋๋ค. |
Worker interval.mean |
์๊ฒ ํ๋ฉด ์์ฝ ๋์ฐฉ ๋น๋๊ฐ ๋์์ง๋๋ค. ๊ฐ๊ฒฉ์ ๋์ ์์ฝ ์๊ฐ์ ์ฌ์ฉํ๊ณ ๋ฆ์ด์ง ์ ์๋ ์์๋๋ก ๋ฐ๋ผ์ก์ง๋ง, ์ง์์ ์ธ Dockerยท์ฉ๋ ๋ณ๋ชฉ์ ์ค์ ๋์ฐฉ๋ฅ ์ ์ ํํฉ๋๋ค. |
Worker lifetime์ xm / alpha |
์๋ช
๊ณผ ๊ธฐ๋ ๋
ธ๋ ์๋ฅผ ๋ฐ๊ฟ๋๋ค. alpha > 1์ด๋ฉด ํ๊ท ์๋ช
์ alpha ร xm / (alpha - 1)์
๋๋ค. |
| Agent capacity | ์ ์ ํ๋์ด๋ฉฐ ์์ฝ CPU/RAM์ด ์๋๋๋ค. ๋์ด๊ธฐ ์ ์ ํธ์คํธ ๋ถํ๋ฅผ ์ธก์ ํฉ๋๋ค. |
Warm-up duration |
์ฒซ ๋ฐํ ์ churn ์๊ฐ์ ๋ฐ๊ฟ๋๋ค. ์๋ ด ๊ฒ์ฌ๊ฐ ์๋ ์๊ฐ ๋๊ธฐ์ ๋๋ค. |
Publish count / interval |
round๋น ์ต๋ ๋ฐํ ๋ ธ๋ ์์ ์์ฒญ ์ฌ์ด ๊ฐ๊ฒฉ์ ๋ฐ๊ฟ๋๋ค. |
Publish deliveryWindow |
๊ธฐ๋ณธ 10์ดยท์ต๋ 1์๊ฐ์ธ ๊ณ ์ ์์ ๊ธฐ๊ฐ์ ๋๋ค. ๋๊น์ง ๋จ๋ ๋์๋ ๋ฐ๋๋ฏ๋ก ๊ฐ์ ๊ฐ์ผ๋ก ๋น๊ตํ๊ณ ๋ง์ง๋ง ์์ง ๋๊ธฐ๋ ์ด๋ณด๋ค ๊ธธ๊ฒ ์ ์งํฉ๋๋ค. |
| Round ์ / 10์ด ๋๊ธฐ | ๊ด์ธก ๊ธฐ๊ฐ์ ๋ฐ๊ฟ๋๋ค. ํ๋ณด๊ฐ ์์ด๋ ์๊ฐ์ด ์ง๋๋๋ก ๋ช ์์ ๋๊ธฐ๋ฅผ ์ ์งํฉ๋๋ค. |
| Worker network profile | P2P ์ง์ฐยทjitterยทloss๋ฅผ ๋ฐ๊ฟ๋๋ค. ์ด ์คํ์์๋ bootstrap ๋ ๊ฐ๋ฅผ ์์ ์ ์ผ๋ก ์ ์งํฉ๋๋ค. |
payloadEncoding |
envelope๋ ์ง์ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. raw๋ ์ฌ๊ธฐ์ PubSub ๋ฐ์ดํฐ๋ฅผ ์ ํํ 32๋ฐ์ดํธ๋ก ๋ง๋ค์ง๋ง ์ ํ ์ง์ฐ ํ๋ณธ์ด ์์ต๋๋ค. |
YAML์ anchor๋ก ๋ฐํ phase์ ๋๊ธฐ phase๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค. ์ด๋ ํ์ฑ ์ ํผ์ณ์ง๋ ํ์ค YAML ์ฐธ์กฐ์ด๋ฉฐ ์๋๋ฆฌ์ค ์์ง์ ๋ฐ๋ณต๋ฌธ ๊ธฐ๋ฅ์ด ์๋๋๋ค. round ์๋ฅผ ๋ฐ๊พธ๋ ค๋ฉด ๋ฐ๋ณต๋ publish/wait ์์ ์กฐ์ ํ๊ณ , anchor๊ฐ ์๋ ๋ฐํ phase๋ฅผ ์์ ํ๋ฉด ์ด๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ alias์ ์ ์ฉ๋ฉ๋๋ค. ๋ง์ง๋ง 30์ด ์์ง ๋๊ธฐ์ stop-all์ ์ ์งํ์ญ์์ค.
๊ณ ์ seed๋ ํ๋ณด ์งํฉ๊ณผ ์คํ ์กฐ๊ฑด์ด ๊ฐ์ ๋ ๋์ ์ํ๋ง์ ์ฌํํฉ๋๋ค. Docker ์ฒ๋ฆฌ ์๊ฐ, ์์ฒญ ์ ๋ ธ๋ ํด์ฅ, ์๋ก ๋ค๋ฅธ ์คํยท์ฅ๋น์ ๊ฒฐ๊ณผ๊น์ง ๊ฐ๊ฒ ๋ง๋ค์ง๋ ์์ต๋๋ค.
v2 Churn ์คํ๊ณผ์ ๊ด๊ณ
๊ฒํ ํ v2 exp/exp-2603_churn-02.sh ์คํฌ๋ฆฝํธ๋ boot 10๊ฐ๋ฅผ ์ ์งํ๊ณ worker join์ ์ต๋ 10,000ํ ์์ฝํ ๋ค ๋๊ธฐํ์ผ๋ฉฐ, ๋ฌด์์ worker ์ต๋ 10๊ฐ์์ ์ ์ฒด topic์ผ๋ก 32๋ฐ์ดํธ raw ๋ฐ์ดํฐ๋ฅผ ํ batch ๋ฐํํ์ต๋๋ค. ์ดํ churn์ ์ ์งํ๋ฉฐ 30์ด ์์งํ์ต๋๋ค.
์ด ์์ ๋ ์๋์ ์ผ๋ก boot ๋ ๊ฐ, ๋ ์์ ๊ธฐ๋ worker ์, ๋งค๋ฒ ๋ค์ ์ ํํ๋ ๋ฐํ 30 round, ๋ช ์์ topic ํ๋, ์ถ๊ฐ P2P ๋คํธ์ํฌ ์กฐ๊ฑด, ์ง์ฐ ์ธก์ ์ฉ envelope๋ฅผ ์ฌ์ฉํฉ๋๋ค. balanced Agent ๋ฐฐ์น๋ v2์ join๋ง๋ค worker ์๋ฒ๋ฅผ ๋ฌด์์ ์ ํํ๋ ๋ฐฉ์๊ณผ ๋ค๋ฆ ๋๋ค. ์ธ์ ๊ธฐ๊ฐ ์งํ๋ v2 ์ฌํ ๊ณ์ฝ๊ณผ ๋ ๋ฆฝ์ ์ธ v3 ์คํ ์ค๊ณ์ ๋๋ค. churn ์ค ๊ด์ธก์ด๋ผ๋ ๋ชฉ์ ์ ์ ์งํ๋ฉด์ ์์ Swarm์์ ๋ฐ๋ณต ๊ด์ธกํ ์ ์๋๋ก ํ ๊ฒ์ด๋ฉฐ, ๊ฒฐ๊ณผ์ ๋๋ฑ์ฑ์ ๋ณด์ฅํ๊ฑฐ๋ ๋๋ฝ๋ v2 ์ค์ ํ์ผ์ ๋ณต์ํ์ง ์์ต๋๋ค. v2 ์ฌํ ์ฐธ๊ณ ์์ ํธํ ๋ฒ์๋ฅผ ํ์ธํ์ญ์์ค.