Scenario Reference KO - k-p2p-lab/kpl-v3 GitHub Wiki
Wiki home โบ ํ๊ตญ์ด ๋ฌธ์ ยท ์์ด ์๋ฌธ
๋ฌธ์ ์๋ด ยท ์์ค ์ ์ฅ์
์ด ๋ฌธ์๋ ๋ฒ์ 3 YAML ํ์, ํผ์ด ํ๋กํ์ผ, ํ๋กํ ์ฝ ์ค์ , ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ก์ ์ค๋ช ํฉ๋๋ค. ๋์๋ณด๋์์ ์ฌ์ฌ์ฉํ YAML์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๋๋ฆฌ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์๋๋ฆฌ์ค ํ์ ๋ฒ์ ์ K-P2PLab release ๋ฒ์ ๊ณผ ๋
๋ฆฝ์ ์
๋๋ค. ์ ์๋๋ฆฌ์ค์๋ version: 3์ ์ฌ์ฉํ์ญ์์ค. ์ด ๋ฒ์ ์ mesh-freeze, ๋ชจ๋ธ ๊ธฐ๋ฐ topology ํ์ฑ๊ณผ ๊ทธ๋ฃน/ID ์ ํ์๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๊ธฐ์กด ์๋๋ฆฌ์ค์ ๋ฒ์ 1๊ณผ 2๋ ๊ณ์ ํ์ฉํ๋ฉฐ version์ ์๋ตํ๊ฑฐ๋ 0์ผ๋ก ์ค์ ํ๋ฉด 1๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๊ธฐ์กด action์ ๋์์ ์ ์งํ๊ณ ๋ ๋ฉ์ ์ ์ด action์๋ ๋ฒ์ 3์ด ํ์ํฉ๋๋ค. ์ ์ ์๋ YAML ํ๋ ์ด๋ฆ์ ๊ฑฐ๋ถํฉ๋๋ค.
| ํ๋ | ํ์ ์ฌ๋ถ ๋๋ ๊ธฐ๋ณธ๊ฐ | ์๋ฏธ |
|---|---|---|
version |
๊ถ์ฅ: 3
|
์ ํ๋ฆฌ์ผ์ด์
release๊ฐ ์๋ scenario schema ๋ฒ์ ์
๋๋ค. ๋ฒ์ 1๊ณผ 2๋ ๊ณ์ ์ง์ํฉ๋๋ค. |
name |
ํ์, ๊ณต๋ฐฑ๋ง์ผ๋ก ๊ตฌ์ฑ ๋ถ๊ฐ | Run ์ด๋ฆ์ด๋ฉฐ ์ ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํญ๋ชฉ ์ด๋ฆ๊ณผ ๋ ๋ฆฝ์ ์ ๋๋ค. |
seed |
0 |
0์ด ์๋ seed๋ ์ ํ๋ฆฌ์ผ์ด์ sampling์ ์ ์ดํ๊ณ 0์ ์๊ฐ ๊ธฐ๋ฐ seed๋ฅผ ์ ํํฉ๋๋ค. |
onExit |
cancel |
์์ฐ ์๋ฃ ์ background job์ ์ ์ฉํ๋ cancel ๋๋ drain ์ ์ฑ
์
๋๋ค. |
jobShutdownTimeout |
3m, ์์ |
Job ์ข ๋ฃ ์ ํ๊ณผ ๋ณ๋๋ก Peer cleanup ์ ํ์ ์ ์ฉํ๋ฉฐ ์ ์ฒด run timeout์ ์๋๋๋ค. |
profiles |
๋น map | ์ฌ์ฌ์ฉํ ๋ ธ๋๋ณ configuration overlay์ ๋๋ค. |
phases |
์ต์ ํ๋ | ์์๋๋ก ์คํํ๋ action์ด๋ฉฐ ์ถ์ ๋๋ background ์์ ์ ์์ํ ์ ์์ต๋๋ค. |
์คํ schema์ ๊ฒ์ฆ์ internal/scenario/scenario.go, scheduling์ internal/controller/runner.go์ ์์ต๋๋ค.
role์ Kademlia bootstrap discovery๋ฅผ ์ ์ดํฉ๋๋ค. boot ๋
ธ๋๋ Controller๊ฐ bootstrap peer๋ก ์ ๊ณตํ์ง๋ง worker ๋
ธ๋๋ ์ ๊ณตํ์ง ์์ต๋๋ค. Topic transport discovery๋ ๋ณ๋์ด๋ฉฐ ๋์ผ runยท์ ํํ topic์ ready PubSub ์ฐธ๊ฐ์๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. type์ ๋
ธ๋์ libp2p, Kademlia, PubSub ๋์์ ์ ์ดํฉ๋๋ค. ์ด ๊ฐ๋
๋ค์ ์๋ก ๋
๋ฆฝ์ ์ด๋ฏ๋ก bootstrap ์ญํ ์ ์ค์ฉํ์ง ์๊ณ ์ฌ๋ฌ ์ข
๋ฅ์ worker๋ฅผ ํ ์คํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. type๊ณผ profile์ ๋ชจ๋ ์๋ตํ๋ฉด role: boot๋ boot preset์, ๊ทธ ๋ฐ์ role์ full์ ์ ํํฉ๋๋ค.
| ๋ด์ฅ type | ๋์ |
|---|---|
boot |
v2์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ๋ณธ ์ํ์์๋ Kademlia๋ง ์คํํ๋ bootstrap ๋ ธ๋์ ๋๋ค. |
full / worker
|
Kademlia server์ ํ์ค GossipSub์ ๋ชจ๋ ์ฐธ์ฌํ๋ฉฐ v2์ hard connection cap 55๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
light |
Kademlia client์ด๋ฉฐ ๊ธฐ๋ณธ ์ฐ๊ฒฐ ์ ํ์ด ๋ ์์ต๋๋ค. |
publisher |
ํ ํฝ์ ๊ตฌ๋ ํ์ง ์๊ณ ๋ฐํ๋ง ์ํํฉ๋๋ค. |
subscriber / observer
|
๊ตฌ๋ ์ ์ฉ์ด๋ฉฐ ๋ฐํ ์์ฒญ์ ๊ฑฐ๋ถํฉ๋๋ค. |
relay |
Topic.Relay()๋ก application subscription์ด๋ application publish ์์ด topic ํธ๋ํฝ์ ์ ๋ฌํฉ๋๋ค. |
flood |
FloodSub๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
random |
์ต์ degree์ ์ถ์ ๋คํธ์ํฌ ํฌ๊ธฐ๋ฅผ ๋ณ๋๋ก ์กฐ์ ํ๋ RandomSub๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
dht-only |
PubSub ์์ด Kademlia๋ง ์คํํฉ๋๋ค. |
gossip-only |
Kademlia ์์ด PubSub๋ง ์คํํฉ๋๋ค. |
non-gossip / mesh-only
|
lazy gossip์ ๋ GossipSub mesh๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
์ฌ์ฌ์ฉํ ๋
ธ๋ ์ค์ ์ ์ต์์ profiles ๋งต์ ์ ์ํฉ๋๋ค. join phase์ ์ค์ ๊ฒฐํฉ ์์๋ ๋ด์ฅ type, ์ด๋ฆ์ด ์ง์ ๋ profile, phase ์์ node override ์์์
๋๋ค. Phase์ type์ ์๋ตํ๋ฉด ์ง์ profile์ type์ผ๋ก preset์ ์ ํํ๊ณ , ์ด๊ฒ๋ ์์ผ๋ฉด role์ ๋ฐ๋ฅธ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. profile์ ์ ์๋ ํ๋กํ์ด๋ ๋ด์ฅ preset์ ์ด๋ฆ์ด์ด์ผ ํ๋ฉฐ, type์ ๋ช
์ํด๋ ์ ์ ์๋ ์ด๋ฆ์ ๊ฒ์ฆ์ ์คํจํฉ๋๋ค. Pointer ๊ธฐ๋ฐ boolean๊ณผ ์ซ์ ์ ์ด๊ฐ์ ๋ช
์์ ์ธ false์ 0๋ ๋ณด์กดํ๋ฏ๋ก historyGossip: 0์ฒ๋ผ lazy gossip์ ๋๋ ์คํ๋ ํํํ ์ ์์ต๋๋ค. Legacy flat ์ซ์ ํ๋์์๋ 0์ด ์๋ต์ ๋ปํ๋ฏ๋ก ๋ช
์์ ์ผ๋ก 0์ผ๋ก overrideํ๋ ค๋ฉด ์ค์ฒฉ ์ ์ด๊ฐ์ ์ฌ์ฉํ์ญ์์ค.
๋ด์ฅ boot type์ gossipsub.enabled: false๋ฅผ ์ค์ ํฉ๋๋ค. bootstrap ๋
ธ๋๋ PubSub์ ์ฐธ์ฌ์ํฌ ๋๋ profile์ด๋ phase์ node ๋ธ๋ก์์ ์ด๋ฅผ ๋ช
์์ ์ผ๋ก true๋ก ์ค์ ํ์ญ์์ค. ํ์ฑํํ boot ๋
ธ๋์๋ ์๋์์ ์ค๋ช
ํ๋ ํด๋น router์ ๋ง๋ parameter, scoring, inspection ์ต์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค. examples/mixed-workers.yaml์ด ์ด opt-in ๊ตฌ์ฑ์ ๋ณด์ฌ ์ค๋๋ค. PubSub๊ฐ ํ์ฑํ๋ Peer๋ ์์ ์งํ ๋์ผ runยท์ ํํ topic์ Controller registry๋ฅผ ์กฐํํ๊ณ ์ดํ 3์ด loop๋ก pollingํฉ๋๋ค. ๊ฐ Peer๊ฐ ์กฐ๊ฑด์ ๋ง๋ ์ ์ฒด ํ๋ณด๋ฅผ rendezvous hash๋ก ์ ๋ ฌํ๊ณ ์ ์ฒด connection budget๊ณผ retry backoff ๋ฒ์์์ ํ์ฌ topic Peer ์์ DHigh์ ์ฐจ์ด๋ฅผ ์ฑ์๋๋ค. ์ฃผ๊ธฐ์ ๋์ฒด ํ๋ณด ๋์์ bootstrap๊ณผ topic discovery๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. ์ค์ GRAFT mesh๋ GossipSub๊ฐ ๊ตฌ์ฑํ๋ฏ๋ก DHT bootstrap, transport ํ๋ณด, mesh ๊ตฌ์ฑ์์ ์๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
version: 2
name: mixed-workers
seed: 42
onExit: cancel
jobShutdownTimeout: 3m
profiles:
tuned-mesh:
type: full
libp2p:
connectionLimit: 128
connectionManager:
lowWater: 64
highWater: 96
gracePeriod: 30s
kademlia:
mode: server
protocolPrefix: /k-p2p-lab/v3
bucketSize: 20
concurrency: 10
gossipsub:
router: gossipsub
topics: [kpl/default]
floodPublish: false
peerExchange: true
params:
d: 8
dLow: 6
dHigh: 12
dOut: 3
dLazy: 8
heartbeatInterval: 500ms
phases:
- action: join
group: tuned
role: worker
profile: tuned-mesh
count: 100
parallel: true
parallelism: 16์ค์ฒฉ๋ node ์ค์ ์์ ํ์ฌ ๊ณ ์ ๋ ๋ฒ์ ์ libp2p ํจํค์ง๊ฐ ์ง์ํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ชจ๋ duration ํ๋๋ 250ms, 30s, 5m ๊ฐ์ Go duration ๋ฌธ์์ด์ ์ฌ์ฉํฉ๋๋ค. ์ ์ฒด ํ๋กํ ์ฝ ๋ ํผ๋ฐ์ค์ meshยทscoreยทPeerGaterยทfilterยทvalidationยทdiscoveryยทpublicationยทKademlia์ ๋ชจ๋ ํ๋๋ฅผ ์ ๋ฆฌํ์ต๋๋ค. ํ๋กํ ์ฝ ์์ ๋ ์ฐธ๊ณ ํ์ญ์์ค.
| ์์ญ | ์กฐ์ ๊ฐ๋ฅํ ํ๋ |
|---|---|
libp2p |
userAgent, natPortMap, relay, relayService, connectionLimit, connectionManager.lowWater, connectionManager.highWater, connectionManager.gracePeriod, dialTimeout
|
kademlia |
enabled, mode, protocolPrefix, protocolId, protocolExtension, bucketSize, concurrency, resiliency, lookupCheckConcurrency, routing-table latency/refresh duration, maxRecordAge, provider/value/auto-refresh switch, optimistic-provide ์ค์ , bootstrap timeout/retry interval, filterยทdiversityยทdatastoreยทvalidatorยทproviderStoreยทbootstrapSourceยทrequestHook ์ ์ฑ
|
gossipsub |
enabled, router, hopwave, meshFreeze, topicMode, randomDegree, randomNetworkSize, subscribe, allowPublish, topics, floodPublish, peerExchange, message/queue/validation limit, signaturePolicy, seenMessagesTTL, subscriptionBufferSize, scoreInspectInterval, message IDยทtopicOptionsยทfilterยทprotocolยทPeerGaterยทvalidatorยทRPC inspectorยทdiscoveryยทauthorยทpublish ์ ์ฑ
|
gossipsub.params |
๊ณ ์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ GossipSubParams ํ๋: mesh degree, history, gossip factor/retransmission, heartbeat, fanout, prune/backoff, connector, connection timeout, direct-connect ๋ฐ opportunistic-graft ์ ์ด๊ฐ, IHAVE ์ ํ, IDONTWANT ์ ํ, IWANT follow-up time |
gossipsub.score |
๋ช
์์ enabled switch, ์ ์ธํ P5๋ฅผ ํฌํจํ ์ ์ฒด PeerScore weight์ decay ์ค์ , score threshold, IP-colocation whitelist, meshยท์ต์ด ์ ๋ฌยท์คํจยท์๋ชป๋ ๋ฉ์์ง ํญ๋ชฉ์ ๋ชจ๋ ํฌํจํ topics.<topic> score block |
GossipSub ์ ์ฉ ์ค์ (params, hopwave, meshFreeze, ํ์ฑ score/inspection, floodPublish, peerExchange, directPeers, peerGater)์ gossipsub router์์๋ง ์ ์ฉ๋ฉ๋๋ค. FloodSub์ RandomSub์์๋ ํ์ฑ scoring์ ๊ฑฐ๋ถํ์ง๋ง ๋นํ์ฑ tuning ๋ธ๋ก์ ๋ณด์กดํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ mesh ์ค์ ์ D=6, DLow=5, DHigh=12, DScore=4, DOut=2, DLazy=6, history 5/3, gossip factor 0.25, heartbeat 1s์
๋๋ค. PubSub๋ฅผ ํ์ฑํํ boot preset์ DScore=3์ ์ฌ์ฉํฉ๋๋ค. full/worker์ ์ญํ ๋ณ GossipSub worker preset์ v2์์ ๊ฐ์ ธ์จ DLow=5, DScore=3, maxIHaveLength=5500, ์ด๊ธฐ heartbeat 1s๋ฅผ ์์ํฉ๋๋ค. ๋๋ถ๋ถ์ worker preset์ v2์ hard connection limit 55๋ ์ฌ์ฉํ๋ฉฐ light๋ 32๋ฅผ ์ฌ์ฉํฉ๋๋ค. Kademlia์ ๊ธฐ๋ณธ bucket size๋ 20, protocol prefix๋ /k-p2p-lab/v3์
๋๋ค. ์ ์ฉ๋๋ ๊ธฐ๋ณธ๊ฐ์ internal/model/config.go, ๋ถ๋ฆฌ๋ typed schema๋ ํ๋กํ ์ฝ ์ค์ ๊ตฌํ ์์น๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
libp2p.connectionLimit๋ ์ ์ฒด ์ฐ๊ฒฐ ์์ ์ ์ฉ๋๋ resource manager hard cap์ผ ๋ฟ์ด๋ฉฐ soft connection manager๋ฅผ ์๋ฌต์ ์ผ๋ก ์์ฑํ์ง ์์ต๋๋ค. soft low-water/high-water ์ ๋ฆฌ๋ libp2p.connectionManager ๋ธ๋ก์ ๋ช
์ํ์ ๋๋ง ์ค์น๋๋ฉฐ ๊ทธ ๋ธ๋ก์ lowWater, highWater, gracePeriod๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ profile๋ง๋ค hard cap, soft manager ๋๋ ๋ ๋ค๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค.
v2 ์ค์ ์ ์ด์ํ ๋๋ ์ด๋ฆ๊ณผ ๋ฌ๋ฆฌ prefix๋ก ์ฌ์ฉ๋๋ v2 protocol_id๋ฅผ v3 kademlia.protocolPrefix๋ก ์ฎ๊ธฐ์ญ์์ค. v3์ kademlia.protocolId๋ Kademlia V1 wire protocol ID ์ ์ฒด๋ฅผ ์ ํํ overrideํ๋ฉฐ protocolPrefix, protocolExtension๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก v2 prefix ๊ฐ์ ์ด ํ๋์ ๋ณต์ฌํ๋ฉด ์ ๋ฉ๋๋ค. ๊ธฐ๋ณธ prefix /k-p2p-lab/v3๋ ์๋์ ์ผ๋ก ์๋ก ๋ถ๋ฆฌํ protocol namespace์
๋๋ค. v2 namespace ํธํ์ด ํ์ํ ์คํ์์๋ง protocolPrefix: /k-p2p-lab/kad-dht๋ฅผ ์ฌ์ฉํ์ญ์์ค.
RandomSub์์ randomDegree๋ libp2p์ process-global RandomSubD๋ฅผ ํตํด ์ต์ ์ฐ๊ฒฐ/degree ๋ชฉํ๋ฅผ ์ค์ ํฉ๋๋ค. KPL์ Peer๋ง๋ค ๋ณ๋ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ด global ๊ฐ์ Peer ํ๋์๋ง ์ ์ฉ๋ฉ๋๋ค. randomNetworkSize๋ NewRandomSub์ ๋ณ๋๋ก ์ ๋ฌ๋๋ ์ถ์ ์ ์ฒด ๋คํธ์ํฌ ํฌ๊ธฐ์
๋๋ค.
์ค์ฝ์ด๋ง์ ๊ธฐ๋ณธ ๋นํ์ฑ์
๋๋ค. gossipsub.score.enabled: true๋ก๋ง ํ์ฑํํ๋ฉฐ score ๋ธ๋ก์ด๋ ๊ด์ธก ์ฃผ๊ธฐ๋ง์ผ๋ก ์ผ์ง์ง ์์ต๋๋ค. ๋ช
์์ ์ผ๋ก ์ผ๋ฉด scoreInspectInterval์ ๊ธฐ๋ณธ๊ฐ์ 1s์ด๋ฉฐ 0s๋ ๊ด์ธก์ ๋๋๋ค. inspection์ด ์คํ๋ ๋๋ง๋ค ๋
ธ๋์ peerScores ๋งต์ด ๊ฐฑ์ ๋ฉ๋๋ค. ์ด ๊ฐ์ /api/v1/nodes, /api/v1/network, /api/v1/snapshot, SSE snapshot stream์์ ์ ๊ณต๋๋ฉฐ topology์ ๋
ธ๋๋ฅผ ์ ํํ๋ฉด ์ธ๋ถ ์ ๋ณด์ ๊ด์ธกํ score ์์ ํ๊ท ์ด ํ์๋ฉ๋๋ค.
appSpecificScore๋ ๊ณ ์ default์ ์ ํ์ ์ธ libp2p Peer ID๋ณ peers map์ผ๋ก P5๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ช
์์ Peer ๊ฐ์ 0์ ํฌํจํ์ฌ ๊ธฐ๋ณธ๊ฐ๋ณด๋ค ์ฐ์ ํฉ๋๋ค. ํ์ฑ appSpecificWeight๊ฐ 0์ด ์๋๋ฉด ์ด ์ ์ฑ
์ด ํ์ํ๋ฉฐ ๋ชจ๋ ๊ฐ๊ณผ ๊ฐ์ค์น๋ฅผ ์ ์ฉํ P5 ๊ฒฐ๊ณผ๋ ์ ํํด์ผ ํฉ๋๋ค. ํ์ฑ selective validation์ ์๋ตํ decay group์ 1s/0.01, ์๋ตํ ๋นํ์ฑ P1 quantum์ 1s๋ฅผ ์ ์ฉํ๊ณ ๋ช
์์ 0 tickerยท์ ์ duration์ ๊ฑฐ๋ถํฉ๋๋ค. Profile์์ inline์ผ๋ก score๋ฅผ ๋ฎ์ด์ฐ๋ฉด ์ ์ฒด ๋ธ๋ก์ ๊ต์ฒดํ์ฌ ๋ช
์์ 0ยทfalse๋ฅผ ๋ณด์กดํฉ๋๋ค. ์ ์ ์ค์ ์ ์ฐธ๊ณ ํ์ญ์์ค.
Profile ๋๋ join ๋จ๊ณ์ node ๋ธ๋ก์ network๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ scope: p2p๋ ๊ฐ Peer ์ปจํ
์ด๋ ์์์ ํฌํธ 20000์ ์ก์ P2P TCP์๋ง ์ ์ฉํฉ๋๋ค. v2์ฒ๋ผ ์ ์ด APIยทtelemetry๊น์ง ํฌํจํ ์ ์ฒด ์ก์ ์ ์ ํํ๋ ค๋ฉด scope: all์ ์ง์ ํ์ญ์์ค. delay๋ ํธ๋ egress ์ถ๊ฐ ์ง์ฐ์ด๋ฉฐ ์๋ณต ์ง์ฐ์ ๋ชฉํ๊ฐ์ด ์๋๋๋ค. rateMbps์ tbf.rateMbps๋ ์ก์ ์ ํ์ ์ค์ ํ๊ณ Bandwidth ์ธก์ ์ ์ค์ libp2p ์คํธ๋ฆผ ์ฌ์ฉ๋์ ๋ณ๋๋ก ๊ธฐ๋กํฉ๋๋ค.
node:
network:
delay: 100ms
jitter: 10ms
lossPercent: 1
duplicatePercent: 0.1
corruptPercent: 0.1
reorderPercent: 1
rateMbps: 10
queueLimit: 1000| ํ๋ | ์๋ฏธ |
|---|---|
delay, jitter
|
์ถ๊ฐ ์ง์ฐ๊ณผ ๋ณ๋ ํญ์ ์์๊ฐ ์๋ Go duration์ผ๋ก ์ง์ ํฉ๋๋ค. jitter์๋ ์์ delay๊ฐ ํ์ํ๋ฉฐ Linux netem์ ๋ฐ๋ผ ์ต๋ 2147483647ns์
๋๋ค. |
lossPercent, duplicatePercent, corruptPercent, reorderPercent
|
0~100 ๋ฒ์์ ํจํท ๋น์จ์
๋๋ค. ์ฌ์ ๋ ฌ์๋ ์์ delay๊ฐ ํ์ํฉ๋๋ค. |
rateMbps |
์์๊ฐ ์๋ ์ก์ ์๋ ์ ํ(Mbps)์
๋๋ค. 0์ ์๋ ์ ํ์ ํด์ ํฉ๋๋ค. |
queueLimit |
netem ํ์ ์ต๋ ํจํท ์์ด๋ฉฐ 1~4294967295์
๋๋ค. ์ด ํ๋๋ง ์ง์ ํด๋ netem์ ํ์ฑํํฉ๋๋ค. |
scope |
p2p(๊ธฐ๋ณธ) ๋๋ all ์ก์ ํธ๋ํฝ์
๋๋ค. |
delayDistribution |
interval๊ณผ ๊ฐ์ ๋ถํฌ ํ์์ผ๋ก ํผ์ด๋ณ ๊ธฐ๋ณธ ์ง์ฐ์ ํ ๋ฒ ์ถ์ถํฉ๋๋ค. delay์ ๋ฐฐํ์ ์ด๋ฉฐ jitter๋ ์ฌ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด ์์ min์ด ํ์ํฉ๋๋ค. |
jitterDistribution |
normal(๊ธฐ๋ณธ), uniform(v2 ๋ฐฉ์), pareto, paretonormal์
๋๋ค. |
reorderCorrelationPercent |
0~100์ ์ฌ์ ๋ ฌ ์๊ด๊ณ์์ด๋ฉฐ v2์ reorder.chance์ ๋์ํฉ๋๋ค. ์์๋ก ์ค์ ํ๋ ค๋ฉด ์์ reorderPercent๊ฐ ํ์ํฉ๋๋ค. |
tbf |
์์ ์ ํ๊ฐ์ธ rateMbps, burstKbit(kilobit)์ 1us~4294967295us์ latency๋ก token bucket์ ์ค์ ํฉ๋๋ค. ์์ netem rateMbps์ ๋ฐฐํ์ ์
๋๋ค. |
schedule |
์๊ฐ ๊ธฐ์ค์ ๋ฐ๋ฅธ ๋์ ์กฐ๊ฑด ๋ณ๊ฒฝ์ ๋๋ค. ์์ฝ ๋คํธ์ํฌ ๋ณ๊ฒฝ์ ์ฐธ๊ณ ํ์ญ์์ค. |
v2 ์คํ์ ์ฎ๊ธฐ์ค ๋๋ ์ฌํ ๊ฒํ ์ ์ค์ ๋์ํ, churn ์์ ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. ์ฌ๊ธฐ์๋ ๋ฐฐ์น(balanced, ๋
ธ๋๋ณ random, batch๋ณ single-agent, ๋ช
์์ agentId), churn์ ์ํ onError: continue, ์ ํํ PubSub ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ํ payloadEncoding: raw, ์ ์ฒด topic ๋ฐํ์ ์ํ topic: '*'๋ฅผ ์ค๋ช
ํฉ๋๋ค. Network scope์ payload encoding์ ๊ธฐ์กด ๊ธฐ๋ณธ๊ฐ์ ์ ์งํฉ๋๋ค. Worker bootstrap์ seed ๊ธฐ๋ฐ ์ฒซ ์ฐ๊ฒฐ ์ฑ๊ณต ์ ํ์ ์ฌ์ฉํ๋ฉฐ transport stack์ TCP/Noise/Yamux๋ก ๋ช
์ํฉ๋๋ค.
๋คํธ์ํฌ ์กฐ๊ฑด์ ์ ์ฉํ๋ Peer์๋ Linux NET_ADMIN๊ณผ ํธ์คํธ ์ปค๋์ sch_netem ์ง์์ด ํ์ํฉ๋๋ค. Docker ๋ฐํ์์ version 3 schedule๋ก ๋คํธ์ํฌ ๋ณ๊ฒฝ์ ๋ฐ์ join์๋ ์ฒซ ์ ํ ์ ์ฉ ์ ๋ถํฐ NET_ADMIN์ ๋ถ์ฌํฉ๋๋ค. ์ปค๋ ์ง์์ด ์๊ฑฐ๋ tc ๋ช
๋ น์ด ์คํจํ๋ฉด ๋
ธ๋ ์์๋ ๋ช
์์ ์ธ ์ค๋ฅ๋ก ์คํจํฉ๋๋ค.
examples/network-conditions.yaml์ bootstrap ๋
ธ๋ ๋ ๊ฐ์ ๋คํธ์ํฌ ์กฐ๊ฑด์ด ์ ์ฉ๋ worker ๋ค ๊ฐ๋ฅผ ์์ฑํ๊ณ , ์ด๊ธฐํ ๋๊ธฐ์ ๋ฉ์์ง ๋ฐํ ํ ๋ชจ๋ ๋
ธ๋๋ฅผ ์ข
๋ฃํฉ๋๋ค. ๋์๋ณด๋์์ ์คํํ๊ฑฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ถํ ์ ์์ต๋๋ค.
control-node:8080์ access๊ฐ ํ์ํ Controller ์ฃผ์๋ก ๋ฐ๊พธ๊ณ , ๋จผ์ API ์ธ์ฆ์ผ๋ก KPL_COOKIE_JAR๋ฅผ ์์ฑํ์ญ์์ค.
curl -X POST http://control-node:8080/api/v1/experiments \
-H 'Content-Type: application/yaml' \
-b "${KPL_COOKIE_JAR:?Log in first}" -H 'X-KPL-Request: dashboard' \
--data-binary @examples/network-conditions.yamlversion 2์ version 3 ๋ชจ๋ profile๊ณผ inline node ์ค์ ์์ network.schedule์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ธฐ์กด ์ ์ ์ค์ ์ ์ด๊ธฐ ์กฐ๊ฑด์ผ๋ก ์ ์งํฉ๋๋ค. ํ์ฌ ์คํ์ด ์์๋ ์ง 10๋ถ ํ delay๋ฅผ 10 ms์์ 100 ms๋ก ๋ฐ๊พธ๊ณ , 15๋ถ ํ ๋ณต์ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
network:
delay: 10ms
schedule:
reference: experiment-start
changes:
- after: 10m
set:
delay: 100ms
- after: 15m
set:
delay: 10ms๊ฐ Peer๋ง๋ค ๋ณ๋์ ์๊ฐ์ ์ ์ฉํ๋ ค๋ฉด reference๋ฅผ peer-join์ผ๋ก ๋ฐ๊ฟ๋๋ค(์๋ต ์ ๊ธฐ๋ณธ๊ฐ). ๋ค์ ์์ ๋ ๊ฐ Peer๊ฐ ์ด๊ธฐํ๋ฅผ ์์ํ ๋ 10 ms๋ก ์์ํ๊ณ , 3๋ถ ํ 100 ms๋ก ๋ณ๊ฒฝํฉ๋๋ค.
network:
delay: 10ms
schedule:
reference: peer-join
changes:
- after: 3m
set:
delay: 100ms| ์ค์ | ๋์ |
|---|---|
reference: experiment-start |
ํ์ฌ Run์ ์คํ์ด ์์๋ startedAt ๊ธฐ์ค์ด๋ฉฐ ์์ phase์ ์์๋ ์๊ฐ๋ ํฌํจํฉ๋๋ค. ๋ฐ๋ณต ๋ฐ ์ฌ์๋๋ง๋ค ์ ์์ ์๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ๋ณ๊ฒฝ ์์ ์ด ์ง๋ ํ ์
์ฅํ Peer๋ ์ด๋ฏธ ๋๋ฌํ ์ต์ ์กฐ๊ฑด์ผ๋ก ์์ํฉ๋๋ค. |
reference: peer-join |
๊ฐ Peer ํ๋ก์ธ์ค๊ฐ Agent ๋ฐฉํฅ ์ฃผ์ ํ์์ ๋ง์น ๋ค ์ด๊ธฐ ๋คํธ์ํฌ ์กฐ๊ฑด ์ ์ฉ๊ณผ P2P host ์์ฑ์ ๋ค์ด๊ฐ๋ ์๊ฐ ๊ธฐ์ค์ ๋๋ค. Controller์ join ์์ฒญ ์๊ฐ์ด๋ ์ดํ ready ๋ณด๊ณ ์๊ฐ๊ณผ ๊ตฌ๋ถํฉ๋๋ค. ์๋ก ์์ฑ๋ Peer๋ ์ฒ์๋ถํฐ ์๊ฐ์ ์ ๋๋ค. |
changes[].after |
์ ํํ ๊ธฐ์ค๋ถํฐ์ ๊ฒฝ๊ณผ ์๊ฐ์ด๋ฉฐ 0s, 3m, 1h ๋ฑ ์์๊ฐ ์๋ Go duration์ด ํ์์
๋๋ค. ์๊ฒฉํ ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ฉฐ schedule๋น ์ต๋ 128๊ฐ์
๋๋ค. |
changes[].set |
delay, jitter, loss, rate, scope, ๋ถํฌ ๋ฑ์ ๋์ ํด์ ๋ฎ์ด์ฐ๋ network ํ๋์ ๋๋ค. ์๋ตํ ํ๋๋ ์ด์ ๊ฐ์ ์ ์งํฉ๋๋ค. schedule ์ค์ฒฉ์ ํ์ฉํ์ง ์์ผ๋ฉฐ ๊ฐ ๋จ๊ณ์ ์ต์ข ์ค์ ์ด ์ ํจํด์ผ ํฉ๋๋ค. |
delay: 0s, lossPercent: 0, rateMbps: 0์ฒ๋ผ ๋ช
์์ ์ธ ๊ฐ์ผ๋ก ์์ํ ์กฐ๊ฑด์ ํด์ ํฉ๋๋ค. ๊ธฐ์กด delay์ jitter๋ ์ฌ์ ๋ ฌ์ด ์์๋ค๋ฉด delay๋ฅผ ์์ ๋ ๊ฐ์ ๋จ๊ณ์์ ํด๋น ์ข
์ ์ค์ ๋ ํด์ ํด์ผ ํฉ๋๋ค. ์ delay๋ ๊ธฐ์กด delayDistribution์ ๋์ฒดํ๋ฉฐ ๋ฐ๋๋ ๋์ผํฉ๋๋ค. ๋ถํฌ๋ Agent๊ฐ Peer๋ณ seed๋ก ํ์ ํฉ๋๋ค. ๋ณ๊ฒฝ ๋จ๊ณ์์ ์๋ก ๋ช
์ํ ๋ถํฌ๋ง ํ ๋ฒ ์ถ์ถํ๋ฉฐ, ์ด๋ฏธ ์ถ์ถํ delay๋ฅผ ์์ํ ๋๋ ๋ค์ ๋ฝ์ง ์์ต๋๋ค.
Profile์ ๋ฎ์ด์ฐ๋ฉด schedule ์ ์ฒด๋ฅผ ๊ต์ฒดํ๋ฉฐ ๋ณ๊ฒฝ ๋ชฉ๋ก์ ์ด์ด ๋ถ์ด์ง ์์ต๋๋ค. ์ด๊ธฐ network ์ค์ ์ ์ ์งํ๋ฉด์ ์์ํ ์์ฝ๋ง ์์ ๋ ค๋ฉด schedule: {changes: []}๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๊ธฐ ์กฐ๊ฑด์ ๋ชจ๋ ์๋ตํ์ฌ ์ ํ ์์ด ์์ํ๊ณ ์์ฝ ์์ ๋ถํฐ ์กฐ๊ฑด์ ์ ์ฉํ ์๋ ์์ผ๋ฉฐ, ์ด Peer์๋ NET_ADMIN์ ๋ถ์ฌํฉ๋๋ค.
์คํ ๊ธฐ์ค ์์ฝ์ ์ด๊ธฐ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ ์ฉํ๊ธฐ ์ ์ Controller์ ์๊ณ๋ฅผ ๋๊ธฐํํฉ๋๋ค. ์์ ์๊ฐ์ด ์๊ฑฐ๋ ๋๊ธฐํ์ ์คํจํ๋ฉด Peer ์์์ ์คํจ ์ฒ๋ฆฌํฉ๋๋ค. ์ดํ ๊ฐ Peer ๋ด๋ถ์์ ๋จ์กฐ ์๊ณ ๊ธฐ์ค ํ์ด๋จธ๋ฅผ ์คํํ๋ฏ๋ก Controller polling์ด๋ ํ์ ์๊ณ ๋ณด์ ์ผ๋ก ์นด์ดํธ๋ค์ด์ด ๋ฐ๋ฆฌ์ง ์์ต๋๋ค. OS ์ค์ผ์ค๋ง๊ณผ tc ์คํ์ ๋ฐ๋ฅธ ์ง์ฐ์ ์๊ธธ ์ ์์ผ๋ฉฐ, ์ฌ๋ฌ ์์ ์ ์ง๋์ ํ์ด๋จธ๊ฐ ์คํ๋๋ฉด ํ์ฌ ์์ ์ ์ต์ ๋์ ์กฐ๊ฑด์ ์ ์ฉํฉ๋๋ค. scope: all๋ก telemetry ์ ๋ฌ์ด ์ง์ฐ๋ผ๋ ์ด ๋ก์ปฌ ํ์ด๋จธ๋ ๊ณ์ ๋์ํฉ๋๋ค.
Delay๋ง ๋ฐ๊พธ๋ฉด ๊ธฐ์กด netem qdisc๋ฅผ ๊ทธ๋๋ก ๊ฐฑ์ ํฉ๋๋ค. ๋ค๋ฅธ ์ค์ ์ ๋ฐ๊พธ๋ฉด ์ด์ ์ ํ์ด ๋จ์ง ์๋๋ก KPL qdisc ๊ตฌ์ฑ์ ๋ค์ ๋ง๋ค๋ฉฐ, ์ด๋ ๋๊ธฐ ํจํท์ด ๋น์์ง๊ฑฐ๋ shaping์ด ์ ์ ๋๊ธธ ์ ์์ต๋๋ค. ์ฑ๊ณต ์ network_config_applied์ ์ ์ฉ ์กฐ๊ฑดยทrevisionยท์ง์ฐ ์๊ฐ์ ๊ธฐ๋กํ๊ณ , ์คํ ์ค tc ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด network_config_failed๋ฅผ ๊ธฐ๋กํ ๋ค ํด๋น Peer๋ฅผ ์คํจ ์ฒ๋ฆฌํฉ๋๋ค. ์ ์ฉ ์กฐ๊ฑด๊ณผ ์ค์ ํธ๋ํฝ ์ธก์ ๊ฐ์ ์ฐจ์ด๋ ๋ชจ๋ํฐ๋ง์ ์ฐธ๊ณ ํ์ญ์์ค.
ํ์ด๋จธ๋ Peer ์ข
๋ฃ ์ ํจ๊ป ๋๋๋ฉฐ ์ทจ์ยท๋ฐ๋ณต ์คํ ์ ๋ฆฌ์๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ์์ฐ์ค๋ฝ๊ฒ ์๋ฃ๋ ๋จ์ผ Run์ Peer๋ฅผ ์ ์งํ ์ ์์ผ๋ฏ๋ก ํด๋น Peer๋ฅผ ์ข
๋ฃํ ๋๊น์ง ์์ฝ๋ ๊ณ์๋ฉ๋๋ค. ์ํ๋ ๊ด์ธก ๊ตฌ๊ฐ๊น์ง ์๋๋ฆฌ์ค๋ฅผ ์คํํ๊ณ stop-all๋ก ๋ช
์์ ์ผ๋ก ์ข
๋ฃํ์ญ์์ค. ์ ์ฒด examples/network-schedule.yaml์ ๋ ๊ธฐ์ค, ์กฐ๊ฑด ๋ณต์, ์๊ฐ์ฐจ ์
์ฅ๊ณผ ์ข
๋ฃ๋ฅผ ๋ณด์ฌ ์ค๋๋ค. ์ด ๋ฌธ๋ฒ์ ์ฌ์ฉํ๊ธฐ ์ ์ ControllerยทAgentยทPeer ์ด๋ฏธ์ง๋ฅผ ํจ๊ป ์
๋ฐ์ดํธํ์ญ์์ค.
๊ถ์ฅ ์๋๋ฆฌ์ค ํ์์ version 3 YAML์
๋๋ค. version 2์ ์คํ ์ ์ด, job ์ถ์ ๊ณผ readiness barrier๋ฅผ ์ ์งํ๋ฉฐ ๋ฉ์ ๋๊ฒฐยท๊ทธ๋ํ ํ์ฑยท๋ฐํ์ profile schedule์ ์ถ๊ฐํฉ๋๋ค. ๊ธฐ์กด ์ค ๋จ์ .kpl DSL ์์ฒด๋ฅผ ์ง์ ์ฝ์ง๋ ์์ผ๋ฏ๋ก ํด๋น ๋ช
๋ น์ phase๋ก ๋ณํํด์ผ ํฉ๋๋ค.
| Action | ์ญํ |
|---|---|
join |
Agent ์ฉ๋์ ๊ณ ๋ คํ์ฌ ๋ ธ๋๋ฅผ ์์ฑํฉ๋๋ค. |
wait-ready |
ํ์ํ๋ฉด ์ง์ job ์๋ฃ ๋๋ minCount ํํ์ ๋จผ์ ํ์ธํ ๋ค ๊ทธ๋ฃน/type์ ๋ชฉํ ์ค๋น์จ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. |
publish |
์ค๋น๋ ๋
ธ๋๋ฅผ ๊ทธ๋ฃน์์ ์ ํํด ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค. deliveryWindow๋ ๋ฉ์์ง๋ณ ์์ ๊ธฐํ์
๋๋ค(๊ธฐ๋ณธ 10s, ์์, ์ต๋ 1h). |
mesh-freeze |
Version 3 ์ ์ฉ์ ๋๋ค. ๊ทธ๋ฃน, KPL node ID ๋๋ libp2p Peer ID๋ก ์ ํํ Peer์ GossipSub ๋ฉ์๋ฅผ ๋๊ฒฐํ๊ณ ์ ์ฉ ์๋ต์ ๊ธฐ๋ค๋ฆฝ๋๋ค. |
schedule |
Version 3 ์ ์ฉ์ ๋๋ค. ์ง์ ํ ์๊ฐ์ ์ ํํ ๊ธฐ์กดยท์ดํ ์ ์ฅ Peer์ ๋ฐํ์ profile ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค. |
topology |
Version 3 ์ ์ฉ์ ๋๋ค. ์ ํํ Peer์ ๊ทธ๋ํ๋ฅผ ์์ฑํ๊ณ ์ฐ๊ฒฐ์ ์ค๋นํ ๋ค ์ง์ ํ ํฝ์ ๋ฉ์๋ฅผ ์ค์นํ๊ณ ๋๊ฒฐํฉ๋๋ค. |
leave |
์ง์ ๊ทธ๋ฃน์์ ๋ ธ๋๋ฅผ ์ ํํด ์ข ๋ฃํฉ๋๋ค. |
wait / sleep
|
์ง์ ์๊ฐ ๋์ ๊ธฐ๋ค๋ฆฝ๋๋ค. sleep์ v2 ํธํ alias์
๋๋ค. |
wait-jobs |
jobs์ ์ง์ ํ background job์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ, ๋ชฉ๋ก์ด ๋น์ด ์์ผ๋ฉด ๋ชจ๋ job์ ๊ธฐ๋ค๋ฆฝ๋๋ค. |
log |
Controller ๋ก๊ทธ์ ์๋๋ฆฌ์ค ๋ฉ์์ง๋ฅผ ๊ธฐ๋กํฉ๋๋ค. |
stop-all / reset
|
๋ชจ๋ background job์ ์ทจ์ํ๊ณ ์ข
๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค run generation fence๋ฅผ ์ฌ์ฉํด ํด๋น ์คํ์ ํ์ฌ ๋ฐ ์ด์ Peer generation์ ์ข
๋ฃํฉ๋๋ค. reset์ alias์
๋๋ค. |
join์์ count๋ ์ ํํ ์์ฑ ์์
์์
๋๋ค. publish์ leave์์๋ ์กฐ๊ฑด์ ๋ง๋ ํ๋ณด ๋
ธ๋ ์๋ก ์ ํ๋๋ ์ต๋๊ฐ์ด๋ฉฐ, publish ํ๋ณด๋ PubSub์ ๋ฐํ์ด ํ์ฑํ๋์ด ์๊ณ ์์ฒญํ topic์ ์ฐธ์ฌํด์ผ ํฉ๋๋ค. repeat๋ phase ์ ์ฒด๋ฅผ ๋ฐ๋ณตํฉ๋๋ค. ์ด ์ธ action์์ parallel์ replica์ ์์ฐจ ๋๋ ๋์ ์คํ์ ์ ํํ๋ฉฐ parallelism์ผ๋ก ์ต๋ ๋์ ์์
์๋ฅผ ์ ํํ ์ ์์ต๋๋ค. await์ ๊ธฐ๋ณธ๊ฐ์ true์
๋๋ค. false๋ก ์ค์ ํ๋ฉด job ์ด๋ฆ์ผ๋ก ์ถ์ ๋๋ background job์ด ์์๋์ด churn์ด๋ publish๊ฐ ์งํ๋๋ ๋์ ๋ค์ phase๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ดํ wait-jobs์์ ์ด๋ฆ์ผ๋ก ์ ํํด ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.
Version 3์ schedule์ ์ ํํ Peer์ ๊ฐ์ Run ์ธ๋์์ ์ดํ ์
์ฅํ๋ Peer์ ์ ํจ profile ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค. group, profile, type, role, nodeIds, peerIds๋ ๊ต์งํฉ์ผ๋ก ์ ์ฉํ๋ฉฐ groupยทprofileยทID ๋ชฉ๋ก ์ค ํ๋ ์ด์์ด ํ์ํฉ๋๋ค. Profile ์ ํ์ ์ฌ๋ฌ ๊ทธ๋ฃน์ ์ ํํ ์ ์๊ณ , group ์ ํ์ ๊ฐ์ profile์ ์ฐ๋ ๋ค๋ฅธ ๊ทธ๋ฃน์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. Profile ์๋ณธ๊ณผ ์ ์ฅ ์๋๋ฆฌ์ค YAML์ ์ ์งํฉ๋๋ค. ๋ช
์์ ID๋ ํ์ฑ Peer์ ๋์ํด์ผ ํ๋ฉฐ, group/profile์ ํ์ฌ Peer๊ฐ ์์ด๋ ์ดํ ์
์ฅ ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค. ์ด๋ฏธ ์ ์๋์ด ์์ ์ค์ธ ์ปจํ
์ด๋๋ ์ค๋น ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
- action: schedule
group: workers
profile: baseline
job: conditions
await: false
timeout: 2m
schedule:
reference: phase-start
changes:
- after: 10s
set:
gossipsub: {params: {d: 8}}
network: {delay: 100ms}
- after: 30s
set:
gossipsub: {params: {d: 6}}
network: {delay: 10ms}| Schedule ํ๋ | ๊ณ์ฝ |
|---|---|
reference |
๊ธฐ๋ณธ phase-start, ์ ํ์ ์ผ๋ก ํ์ฌ Run์ ์ค์ ์์ ๊ธฐ์ค experiment-start์
๋๋ค. ๊ฐ ๊ธฐํ์ Controller์ monotonic clock์ ํ ๋ฒ ๊ณ ์ ํฉ๋๋ค. |
changes |
1โ128๊ฐ์ ๋์ ํจ์น์
๋๋ค. after๋ ํ์์ธ 0 ์ด์ Go duration์ด๋ฉฐ ์๊ฒฉํ ์ฆ๊ฐํด์ผ ํฉ๋๋ค. 0s๋ ์ฆ์ ์ ์ฉํฉ๋๋ค. ์ง์ฐ๋ ๋ณ๊ฒฝ์ ์์๋๋ก ์คํํ๊ณ ์ด์ ์์ฒญ ์์ ์๊ฐ์ ๋ค์ ๊ธฐํ์ ๋ํ์ง ์์ต๋๋ค. |
set.gossipsub.params |
d, dLow, dHigh, dScore, dOut, dLazy, gossipFactor, hopwaveFactor, hopwaveInterval์
๋๋ค. ์๋ตํ ๊ฐ์ ์ ์งํ๊ณ ์ ํจํ ๋ช
์์ 0์ ๋ณด์กดํฉ๋๋ค. ํฉ์ฑํ degree ๋ฒ์๊ฐ ์ ํจํด์ผ ํฉ๋๋ค. |
set.network |
Delay, jitter, loss, rate, scope, queue/TBF ๋ฑ์ ๊ตฌ์ฒด์ ๋คํธ์ํฌ ์กฐ๊ฑด์
๋๋ค. ์ด ์์น์ ์ค์ฒฉ scheduleยทdelayDistribution์ ์ง์ํ์ง ์์ต๋๋ค. |
Phase timeout
|
๊ฐ ๋ณ๊ฒฝ ์์ ๋ถํฐ ๊ธฐ๋ณธ 2m์ด๋ฉฐ ์
์ฅ ์กฐ์ ยทready ๋๊ธฐยท์ค๋นยท์ ์ฉ์ ํฌํจํฉ๋๋ค. after๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ ์ ์ธํฉ๋๋ค. |
Phase await, job
|
๊ธฐ์กด ์ถ์ ์ก๊ณผ ๊ฐ์ต๋๋ค. ๊ธฐ๋ณธ await: true๋ ์ ์ฒด ๋ณ๊ฒฝ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ฐํยทchurn๊ณผ ๋ณํํ๋ ค๋ฉด await: false์ wait-jobs ๋๋ onExit: drain์ ์ฌ์ฉํฉ๋๋ค. |
๋์ดํ ๋ฐํ์ ์ค์ ์ ์ง์ํ๋ฉฐ routerยทtopicsยทheartbeat timerยทqueue ํฌ๊ธฐยทscoring ๋ฑ์ ์์ฑ ์ค์ ์ ์ด ์ก์ ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. GossipSub ๋ณ๊ฒฝ์๋ ํ์ฑ GossipSub๊ฐ ํ์ํฉ๋๋ค. Degree ์กฐ์ ์ ์ผ๋ฐ heartbeat๋ฅผ ๋ฐ๋ฅด๋ฉฐ ์ด๋ฏธ ๋๊ฒฐ๋ ๋ฉ์ ๋ฉค๋ฒ์ญ์ ์ ์งํฉ๋๋ค. ์ค์ ๋ณ๊ฒฝ์ด ์ฆ์ ๋ชฉํ degree ๋ฌ์ฑ์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. HopWave factor/interval ๋ณ๊ฒฝ์ ๊ธฐ์กด ํ์ฑํ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
Group/profile ์ ํ์ validation์์ ํ์ฌ ์ธ๋์ ์ดํ join์ ํฌํจํ ๋ชจ๋ ํด๋น join๊ณผ ์ด schedule์ ๋์ ์ค์ ์ ๊ฒ์ฌํฉ๋๋ค. ID ์ ํ์ ์ค์ ๋์์ runtime์์ ๊ฒ์ฌํฉ๋๋ค. ๋คํธ์ํฌ ๋ณ๊ฒฝ ๋์์ด ๋ ์ ์๋ join์๋ ์ด๊ธฐ ์ ํ์ด ์์ด๋ NET_ADMIN์ ์๋ ์ค๋นํฉ๋๋ค. ํ์ฑ network.schedule์ด ์๋ Peer์๋ schedule์ ๋คํธ์ํฌ ํจ์น๋ฅผ ํจ๊ป ์ ์ฉํ ์ ์์ผ๋ฉฐ GossipSub๋ง ๋ฐ๊พธ๋ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด ๋ก์ปฌ ๋คํธ์ํฌ ํ์ด๋จธ์ ๋ณํํ ์ ์์ต๋๋ค. Delay๋ง ๋ฐ๊พธ๋ฉด qdisc ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ณ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ ๊ธฐ์กด netem ๊ต์ฒด ๋์์ ๋ฐ๋ฆ
๋๋ค.
Controller๋ ๊ธฐ์กด ๋์ ์ ์ฒด๋ฅผ ๊ฒ์ฌํ๊ณ ๋ชจ๋ prepare ์๋ต์ ๋ฐ์ ๋ค์ ๊ฐ์ ์ค๋น ๊ฐ์ ์ ์ฉํฉ๋๋ค. ๋์ ์์ฒญ์ ์ต๋ 16๊ฐ์ ๋๋ค. ์ด ์์ ๊ณผ ์ ๊ท ์ ์ฅ์ ์กฐ์ ํ์ฌ ์ด๋ฏธ ์ ์ํ Peer๋ ๋์์ ํฌํจํ๊ณ ์ดํ ์ ์ฅ Peer์๋ ์ฑ๊ณตํ ํจ์น๋ฅผ ์ ์ฉํฉ๋๋ค. ๊ฐ๋ณ ์์ฒญ ํ๋๋ Peer 8์ดยทAgent 10์ดยทController 12์ด์ ๋๋ค. HTTPยทOS ์ค์ผ์ค๋ง๊ณผ ๋คํธ์ํฌ ์กฐ๊ฑด์ผ๋ก ์ ์ฉ์ด ๋ฆ์ด์ง ์ ์์ผ๋ฉฐ ํด๋ฌ์คํฐ ์ ์ฒด์ ๋์ ์ ์ฉ์ ๋ณด์ฅํ์ง ์์ต๋๋ค. Apply๊ฐ ์์๋ ํ ์คํจํ๊ฑฐ๋ ์๋ต์ด ๋๋ฝ๋๋ฉด ์ผ๋ถ๋ง ์ ์ฉ๋์ ์ ์์ต๋๋ค. ์ก์ ๊ณผ Run์ ์คํจํ๋ฉฐ ์๋ apply ์ฌ์๋๋ ๋ถ์ฐ ๋กค๋ฐฑ์ ์ํํ์ง ์์ต๋๋ค. ์ ์ฉ ์คํจ Peer๋ ํ์ profile ๋ณ๊ฒฝ์ ๊ฑฐ๋ถํฉ๋๋ค. Agent๊ฐ ๋คํธ์ํฌ ์ ์ฉ์ ํ์ธํ์ง ๋ชปํ๋ฉด ๋ค์ ๊ด์ธก๋ ๋๊น์ง ํ์ฌ ์กฐ๊ฑด์ pending์ผ๋ก ํ์ํฉ๋๋ค.
stop-all/reset์ schedule ์ก์ ์ทจ์ํ๊ณ ์ข
๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฐ ๋ค ๋ค์ ์ธ๋์ ์์ ํจ์น๋ฅผ ๋น์๋๋ค. ์ค์งยท์คํจยท์์ฐ ์ข
๋ฃ์ onExit: cancel์ ๋จ์ ํ์ด๋จธ๋ฅผ ์ทจ์ํฉ๋๋ค. ์์ฐ ์๋ฃ ํ ์ ์ง๋๋ Peer๋ ๋ง์ง๋ง ์ ์ฉ ์ค์ ์ ์ ์งํ๊ณ Controller ์์ฝ ์ก์ ๋จ์ง ์์ต๋๋ค. ์ฌ์๋ยท์ด์ดํ๊ธฐยท๋ฐ๋ณต Run์ ์๋ profile๊ณผ ์ ์์ฝ ์ํ๋ก ์์ํฉ๋๋ค. ์ฌ๋ฌ schedule์ ์ ์ฉ ์ ์ง๋ ฌํํ๋ฉฐ ๊ฐ์ ๊ธฐํ์ ๊ฒน์น๋ ์ ํ์์ ์์๋ฅผ seed๋ก ๊ณ ์ ํ์ง ์์ต๋๋ค. ์์๊ฐ ์ค์ํ๋ฉด ํ๋์ ๋ณ๊ฒฝ ๋ชฉ๋ก์ด๋ ๋ช
์์ ์ก ์ฅ๋ฒฝ์ ์ฌ์ฉํฉ๋๋ค.
Controller schedule_change๋ ์์ฒญ ํจ์นยทrevisionยท๋จ๊ณยท์๋ต ์ยท์ง์ฐ์ ๋ณด์กดํฉ๋๋ค. Peer profile_config_applied๋ ํ์ธํ ์ ํจ ์ค์ ์, profile_config_failed๋ ๋ถ์์ ์ ์ฉ์ ๊ธฐ๋กํฉ๋๋ค. ์ด๋ ์ค์ ๊ด์ธก์ด๋ฉฐ ์ธก์ ์ง์ฐ์ด๋ ๋ฉ์ ์๋ ด์ ์๋ฏธํ์ง ์์ต๋๋ค. ๋ด๋ถ ๋ช
๋ น API์ ์ ์ฒด ์์ ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. ControllerยทAgentยทPeer ์ด๋ฏธ์ง๋ฅผ ํจ๊ป ์ฌ๋น๋ยท๋ฐฐํฌํด์ผ ํฉ๋๋ค.
๋์ Peer๋ฅผ ์์ฑํ ๋ gossipsub.meshFreeze: true๋ฅผ ์ผ๊ณ ์ค๋น ํ์ธ๊ณผ ์ ์ ํ ์์ ํ ๋๊ธฐ ๋ค์ mesh-freeze๋ฅผ ์คํํ์ญ์์ค. ์ค๋น ํ์ธ๋ง์ผ๋ก ๋ฉ์ ์๋ ด์ ๋ณด์ฅํ์ง ์์ต๋๋ค. ๊ณ ์ ๊ตฌ์ฑ์, ์ฐ๊ฒฐ ๋๊น, topic ๋ณ๊ฒฝ๊ณผ ๊ณ์๋๋ ๋ฉ์์ง ํธ๋ํฝ์ ์๋ฏธ๋ ํ๋กํ ์ฝ ๋ ํผ๋ฐ์ค์์ ์ ์ํฉ๋๋ค.
version: 3
name: fixed-mesh
profiles:
fixed:
type: full
gossipsub:
meshFreeze: true
phases:
- action: join
group: workers
profile: fixed
count: 8
parallel: true
- action: wait-ready
group: workers
- action: wait
duration: 15s
- action: mesh-freeze
group: workers
timeout: 30s
- action: stop-all๋ค์ ์ค ํ๋ ์ด์์ ์ ํ์๊ฐ ํ์ํฉ๋๋ค.
| ์ ํ์ | ์๋ฏธ |
|---|---|
group |
ํ์ฌ Runยทgeneration์ผ๋ก ์ ํํ ํด๋น ์๋๋ฆฌ์ค ๊ทธ๋ฃน์ ๋น์ข ๋ฃ Peer ์ ์ฒด์ ๋๋ค. |
nodeIds |
/api/v1/nodes์์ ๋ฐํํ ์ ํํ KPL node id ๋ชฉ๋ก์
๋๋ค. ์คํ๋ณ๋ก ์์ฑ๋๋ฉฐ libp2p ID์ ๋ค๋ฆ
๋๋ค. |
peerIds |
/api/v1/nodes์์ ๋ฐํํ ์ ํํ libp2p peerId ๋ชฉ๋ก์
๋๋ค. ๊ฐ๊ฐ ์์ ํ๊ณ ์ ํจํ libp2p Peer ID์ฌ์ผ ํฉ๋๋ค. |
type, role
|
์ถ๊ฐ ํํฐ์ด๋ฉฐ role์ boot ๋๋ worker์
๋๋ค. ํ์ ๊ทธ๋ฃน/ID ์ ํ์๋ฅผ ๋์ ํ์ง ์์ต๋๋ค. |
ํ ๋ชฉ๋ก์ ID๋ OR ์กฐ๊ฑด์ด๊ณ ์๋ก ๋ค๋ฅธ ํ๋๋ ๊ต์งํฉ์
๋๋ค. ๋ช
์ํ ๋ชจ๋ ID๊ฐ ํ์ฌ Runยทgeneration์ ๊ต์งํฉ ์์์ ํ์ธ๋์ด์ผ ํฉ๋๋ค. ์ ์ ์๋ ID, group/type/role ํํฐ ๋ถ์ผ์น, ์ค๋ณต๋๊ฑฐ๋ ๋น ID, ๋น ์ ํ ๊ฒฐ๊ณผ๋ ์ค๋ฅ์
๋๋ค. ๊ทธ๋ฃน ์ ํ์์๋ ์ข
๋ฃ๋๊ฑฐ๋ ์คํจํ ๋
ธ๋๋ฅผ ์ ์ธํฉ๋๋ค. ์ ํ๋ ๋ชจ๋ Peer๊ฐ ready ์ํ์ด๊ณ meshFreeze: true๋ฅผ ์ผ GossipSub๋ฅผ ์ฌ์ฉํ๋ฉฐ ํด๋น Agent๊ฐ online์ด์ด์ผ ํฉ๋๋ค. ์ฌ์ ๊ฒ์ฌ๊ฐ ์คํจํ๋ฉด ์ ์ฒด ์ ํ ๋์์ ๋ช
๋ น์ ๋ณด๋ด์ง ์์ต๋๋ค. ๋์ค์ ์
์ฅํ Peer๋ ํ์ ๋ช
๋ น์ผ๋ก ๋๊ฒฐํ์ญ์์ค. ์์ ๊ทธ๋ฃน ๋ช
๋ น์ด ๋ฏธ๋ ๊ตฌ์ฑ์์๊ฒ ์ ์ฉ๋์ง๋ ์์ต๋๋ค.
Phase๋ ์ ํํ ๋ชจ๋ Peer์ ์ ์ฉ ์๋ต์ ๊ธฐ๋ค๋ฆฝ๋๋ค. timeout์ ์ ์ฒด ์ ํ ๋์์ ์ ์ก๊ณผ ์ ์ฉ ์๋ต์ ํจ๊ป ์ ํํ๋ฉฐ ๊ธฐ๋ณธ 30s, ์์์ฌ์ผ ํฉ๋๋ค. ๊ฐ AgentโPeer ์์ฒญ๊ณผ Peer handler์ ์ ํ์ ๊ณ์ 10์ด์ด๋ฏ๋ก phase timeout์ ๋๋ ค๋ ๊ฐ๋ณ ์์ฒญ์ ์ ํ์๊ฐ์ ๋์ด๋์ง ์์ต๋๋ค. ๋ฐ๋ณต ๋๊ฒฐ์ ๋ฉฑ๋ฑ์ด๋ฏ๋ก repeat๋ฅผ ํ์ฉํฉ๋๋ค. ์ด action์๋ await: false, parallel: true, parallelism, count, interval, lifetime, topic, onError๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๋์ ์์ฒญ ์๋ฅผ ์ ํํ์ฌ ๋์์ ์ฒ๋ฆฌํฉ๋๋ค. ์ ์ก ์์ ๋ค ์ค๋ฅ๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ฉด ์ผ๋ถ๋ง ๋๊ฒฐ๋ ์ ์์ผ๋ฉฐ, ์ฑ๊ณต ์๋ต๋ ์ฌ๋ฌ Peer์ ๋์ ์ ์ฉ์ ๋ปํ์ง ์์ต๋๋ค. ๋๊ฒฐ ํด์ action์ ์์ต๋๋ค.
examples/scenario-v3-mesh-freeze.yaml์ ๋๊ฒฐ ํ ๋ฐํ๊น์ง ๋ณด์ฌ ์ค๋๋ค. ์คํ ์ค HTTP ์์ฒญ ํ์์ ๋ด๋ถ API ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
๋๋ฉ์ธ์ ์ ํํ ๊ธฐ์กด Peer์ ์งํฉ์
๋๋ค. Mesh freeze์ ๊ฐ์ group, nodeIds, peerIds, type, role ๊ต์งํฉ ์ ํ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ๋์์ ํ์ฌ Runยทgeneration์์ ready ์ํ์ด๋ฉฐ ์ฐ๊ฒฐ ์ฃผ์๊ฐ ์๊ณ , GossipSub์ meshFreeze: true๋ฅผ ํ์ฑํํ๋ฉฐ ๋ช
์ํ topic์ ๊ตฌ๋
ํ๊ฑฐ๋ relayํด์ผ ํฉ๋๋ค. count๋ ์ ํ์ ์ด๋ฉฐ ์์์ด๋ฉด ์ ํํ Peer ์๊ฐ ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค. Peer๋ฅผ ์๋ก ๋ง๋ค๊ฑฐ๋ ์ผ๋ถ๋ฅผ ์ถ์ถํ๋ ๊ฐ์ด ์๋๋ฏ๋ก ์์ join๊ณผ wait-ready๋ก ๊ฐ์ฒด ์๋ฅผ ์ค๋นํ์ญ์์ค.
๋ช
์์ ์ธ ID ์์ด ๊ทธ๋ฃน์ผ๋ก ์ ํํ๋ฉด ์๋๋ฆฌ์ค ๊ฒ์ฆ์ ๋ง์ง๋ง stop-all/reset ์ดํ์ ์กฐ๊ฑด์ ๋ง๋ ์ ํ join์ด ์๋์ง ํ์ธํฉ๋๋ค. ํด๋นํ๋ ๋ชจ๋ join์ presetยทprofileยท๊ฐ๋ณ override๋ฅผ ๊ฒฐํฉํ ์ค์ ์ gossipsub.meshFreeze: true๊ฐ ์์ด์ผ ํฉ๋๋ค. ์๋ตํ๊ฑฐ๋ false์ด๋ฉด topology phase, ๊ทธ๋ฃน, ๋ฌธ์ ๊ฐ ์๋ join ์ด๋ฆ์ ํฌํจํ ์ค๋ฅ๋ก ๊ฒ์ฆ์ ์คํจํฉ๋๋ค. type/role ํํฐ๋ฅผ ๋ฐ์ํ๊ณ background join๋ ๊ฒ์ฌํฉ๋๋ค. ๊ฒ์ฆ ๋จ๊ณ์์๋ ์ด๋ค Peer๊ฐ ์ด์๋จ๋์ง ์์ธกํ์ง ์์ผ๋ฏ๋ก leave๋ lifetime ์ค์ ์ด ์์ด๋ ๊ฐ์ reset ๊ตฌ๊ฐ์ ํด๋น join์ ๋ชจ๋ ๋ณด์์ ์ผ๋ก ๊ฒ์ฌํฉ๋๋ค. ID ์ ํ(group๊ณผ ID๋ฅผ ํจ๊ป ์ง์ ํ ๊ฒฝ์ฐ ํฌํจ)์ ์คํ ์ ๋์์ ํ์ ํ๊ณ , ๋ชจ๋ ์ ํ Peer๋ฅผ ๊ฒ์ฌํ ๋ค ๋ช
๋ น์ ๋ณด๋
๋๋ค. topology๊ฐ ์ด ๊ธฐ๋ฅ์ ์๋์ผ๋ก ํ์ฑํํ์ง๋ ์์ต๋๋ค.
์ ํํ Peer 500๊ฐ์ ErdลsโRรฉnyi ๊ทธ๋ํ๋ฅผ ๋ง๋๋ ์์ ๋๋ค.
- action: topology
group: domain-a
count: 500
topic: kpl/graph
timeout: 5m
topology:
model: er
p: 0.05
seed: 1001์ ์ฒด 500-Peer ์์ ๋ ์์ฑยท์ค๋นยท๋ฐํยท์ ๋ฆฌ๋ฅผ ํฌํจํฉ๋๋ค. Worker์ bootstrap Peer๋ฅผ ์์ฉํ Swarm ์ฉ๋์ด ํ์ํฉ๋๋ค. topology๊ฐ ๊ทธ๋ํ ์ค์น์ ๋๊ฒฐ์ ํจ๊ป ์ํํ๋ฏ๋ก ๋ณ๋ mesh-freeze phase๋ ํ์ํ์ง ์์ต๋๋ค. ์ด๋ฏธ ๋๊ฒฐํ ๋ค๋ฅธ ๋ฉ์๋ ๊ต์ฒดํ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ๊ทธ๋ํ์๋ ์ Peer ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
topology ๋ธ๋ก์ ๋ชจ๋ธ ํค๋ ์๋ ์๋ฌธ์์ด๋ฉฐ ํ์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ชจ๋ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ๋ ๊ฑฐ๋ถํฉ๋๋ค.
| ๋ชจ๋ธ | ํ๋ผ๋ฏธํฐ | ๊ทธ๋ํ ์ ์ |
|---|---|---|
er |
[0,1]์ p
|
G(n,p): ์์ ์๋ ๊ฐ Peer ์์ ๋ ๋ฆฝ์ ์ผ๋ก ํ๋ฅ p์ ๋ฐ๋ผ ์ฐ๊ฒฐํฉ๋๋ค. |
ws |
์ง์ k, 2 โค k < n; [0,1]์ p
|
๋ ธ๋๋ณ k๊ฐ ์ด์์ ๊ฐ๋ ๊ณ ๋ฆฌ์์ ํ๋ฅ p๋ก WattsโStrogatz ์ฌ๋ฐฐ์ ์ ์ํํฉ๋๋ค. ๊ฐ์ ์ nยทk/2๋ฅผ ์ ์งํฉ๋๋ค. |
ba |
์ ์ m, 1 โค m < n
|
BarabรกsiโAlbert ์ฐ์ ์ฐ๊ฒฐ์ ๋๋ค. ์ด๊ธฐ m+1๊ฐ ๋ ธ๋๋ star์ด๋ฉฐ, ์ดํ ์ ๋ ธ๋๋ง๋ค ๊ธฐ์กด degree์ ๋น๋กํ์ฌ ์๋ก ๋ค๋ฅธ ์ด์ ๋ ธ๋ m๊ฐ์ ์ฐ๊ฒฐํฉ๋๋ค. |
rgg |
์ ํํ radius โฅ 0
|
๋จ์ ์ ์ฌ๊ฐํ์ ๊ท ๋ฑ ์์น์์ Euclidean ๊ฑฐ๋ฆฌ โค radius์ธ ์์ ์ฐ๊ฒฐํฉ๋๋ค. |
waxman |
(0,1]์ alpha, beta
|
๋จ์ ์ ์ฌ๊ฐํ์ ๊ท ๋ฑ ์์น์์ ํ๋ฅ ฮฒยทexp(โd/(ฮฑยทL))๋ก ์ฐ๊ฒฐํฉ๋๋ค. L์ ์ ์ฒด ์์ ์ต๋ ๊ฑฐ๋ฆฌ์ ๋๋ค. |
grid |
์์ rows, columns; ๊ณฑ์ n |
์ด๋ฆฐ ์ง์ฌ๊ฐ ๊ฒฉ์์ ์ํยท์์ง ์ด์์ด๋ฉฐ ํ ์ฐ์ ์ผ๋ก Peer๋ฅผ ๋ฐฐ์นํฉ๋๋ค. |
triangular |
์์ rows, columns; ๊ณฑ์ n |
ํ ํ์ฉ ๋ฒ๊ฐ์ ๋ฐ ์นธ ์ด๋ํ ์ด๋ฆฐ ์ผ๊ฐ ๊ฒฉ์์ ๋๋ค. ๋ด๋ถ ๋ ธ๋๋ ์ด์ 6๊ฐ๋ฅผ ๊ฐ์ง๋๋ค. |
๋ชจ๋ ์๊ธฐ ๊ฐ์ ๊ณผ ์ค๋ณต์ด ์๋ ๋จ์ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ๋๋ค. ์ฐ๊ฒฐ์ฑ์ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ์ด๋ฉฐ, ๋ถ๋ฆฌ๋ ์ฑ๋ถ์ ํฉ์น๊ธฐ ์ํ ๊ฐ์ ์ ์์๋ก ์ถ๊ฐํ์ง ์์ต๋๋ค. Gridยท์ผ๊ฐ ๊ฒฉ์๋ ์ด๋ฆฐ ๊ฒฝ๊ณ์ ๋๋ค. ๊ธฐํ ์ขํ๋ ๊ฐ์ ์ ๊ฒฐ์ ํ๊ณ ๊ณํ๊ณผ ํจ๊ป ์ ์ฅํ์ง๋ง netem ์ง์ฐ์ด๋ Dashboard ๋ฐฐ์น๋ฅผ ์ค์ ํ์ง ์์ต๋๋ค. ํ๋ฅ ๋ชจ๋ธ์ ๊ณต์ NetworkX์ ER, WS, BA, RGG, Waxman ์ ์๋ฅผ ๋ฐ๋ฆ ๋๋ค. KPL ์์ฒด ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ seed๋ฅผ ๋ฃ์์ ๋ ๊ฐ์ ๊น์ง ๊ฐ๋ค๋ ๋ป์ ์๋๋๋ค.
๋์์ KPL node ID ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค. topology.seed๋ 0์ ํฌํจํด ๋ช
์ํ ๊ฒฝ์ฐ Run seed๋ณด๋ค ์ฐ์ ํฉ๋๋ค. ๊ฐ์ ์์์ ๊ฐ์ฒด ์งํฉยทํ๋ผ๋ฏธํฐยทseed๋ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ์ฌํํฉ๋๋ค. ์์ฑ ์ํ์ Peer 10,000๊ฐ์ ๋ฌด๋ฐฉํฅ ๊ฐ์ 1,000,000๊ฐ์ด๋ฉฐ, ์ทจ์๋ฅผ ํ์ธํ๊ณ ์ํ ์ด๊ณผ ์ ๋ช
๋ น ์ ์ก ์ ์ ์คํจํฉ๋๋ค. ๊ฐ๋ณ ์ ์ด ์์ฒญ์ 1 MiB๋ก ์ ํํฉ๋๋ค.
timeout์ ๋์ ์ ํยท๊ทธ๋ํ ์์ฑยท์ค๋นยท์ ์ฉ์ ํฉ์ณ ์ ํํฉ๋๋ค. ์๋ตํ๋ฉด ์ ํํ Peer ์ N์ ๋ฐ๋ผ 2m + 5s ร (ceil(N / 16) โ 1)๋ก ๊ณ์ฐํฉ๋๋ค. 16๊ฐ ์ดํ๋ 2m, 500๊ฐ๋ 4m35s, 1,000๊ฐ๋ 7m10s์
๋๋ค. ์์ timeout์ ๋ช
์ํ๋ฉด ๊ทธ ๊ฐ์ด ๊ทธ๋๋ก ์ ์ฒด ์ํ์ด ๋ฉ๋๋ค. ๊ธฐ์กด ์๋๋ฆฌ์ค์ timeout: 2m๋ ์๋์ผ๋ก ์ฐ์ฅํ์ง ์์ต๋๋ค. ์ ํ ์ธ์์ ๋ฐ๋ฅธ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด ํ๋๋ฅผ ์ง์ฐ๊ณ , ๊ทธ๋ํ์ ๋คํธ์ํฌ์ ์๊ฐ์ด ๋ ํ์ํ๋ฉด ๋ ๊ธด ๊ฐ์ ์ง์ ํ์ญ์์ค.
Peer ๋ช ๋ น์ ์ต๋ 16๊ฐ๋ฅผ ๋์์ ์คํํ๋ฉฐ ๊ฐ Peer์ ๋์ ์ฐ๊ฒฐ ์๋๋ ์ต๋ 4๊ฐ์ ๋๋ค. Controller๋ ์ผ์์ ์ธ ์ค๋น ์คํจ๋ง ๊ฐ์ ์ ์ฒด ์ ํ์๊ฐ ์์์ ๊ฐ์ ์์ฑ ๊ณํ์ผ๋ก ์ฌ์๋ํฉ๋๋ค. ์ ์ฉ์ ์๋ ์ฌ์๋ํ์ง ์์ต๋๋ค. ๊ฐ๋ณ ์์ฒญ ์ ํ์๊ฐ๊ณผ ์ฌ์๋ ์กฐ๊ฑดยท๊ฐ๊ฒฉ์ ํ ํด๋ก์ง API์ ์ ์ํฉ๋๋ค.
๋ชจ๋ ๋์์ ์ค๋น ์๋ต์ ๋ฐ์ ๋ค์๋ง ์ ์ฉ์ ์์ํฉ๋๋ค. ๊ฐ Peer๋ ์ ํํ ์ด์์ ๋ค์ ๊ฒ์ฌํ๊ณ ํ ๋ฒ์ Router ์์ ์์ ์ค์น์ ๋ฉ์ ๋๊ฒฐ์ ์ํํฉ๋๋ค. ์ง์ ํ ํฝ์ ๊ต์ฒดํ๋ฉฐ ๋ค๋ฅธ ๊ธฐ์กด ํ ํฝ์ ๋ฉค๋ฒ์ญ์ ์ ์งํ ์ฑ ํจ๊ป ๋๊ฒฐํฉ๋๋ค. ๊ธฐ์กด degreeยทscoreยทbackoff ์ ํ ๊ท์น์ผ๋ก ๋ค๋ฅธ ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ง ์์ต๋๋ค. Direct peer, blacklistยทfilter๋ก ๊ฑฐ์ ํ ์ด์๊ณผ mesh ๋ฏธ์ง์ ํ๋กํ ์ฝ์ ๊ฑฐ๋ถํฉ๋๋ค.
repeat๋ 1์ด์ด์ผ ํ๋ฉฐ background job, parallel, parallelism, ๊ฐ๊ฒฉยท์๋ช
๋ฐ onError๋ ์ง์ํ์ง ์์ต๋๋ค. ์ค๋น๊ฐ ์คํจํ๋ฉด ์์ฑํ ๋ฉ์๋ฅผ ์ค์นํ์ง ์์ง๋ง, ์ค๋น ์ค transport ์ฐ๊ฒฐ์ ์๊ธธ ์ ์๊ณ ๊ธฐ์กด GossipSub๋ ๊ณ์ ๋์ํฉ๋๋ค. ์ ์ฉ์ Peer๋ณ๋ก ์์์ ์ด๋ฏ๋ก ๋คํธ์ํฌ ์คํจ ์ ์ผ๋ถ๋ง ๋๊ฒฐ๋๊ฑฐ๋ ์๋ต ์ ์ค๋ก ์ฑ๊ณต์ด ํ์ธ๋์ง ์์ ์ ์์ต๋๋ค. ๋ชจ๋ ๋์์ ์ ํํ ๊ณํ ์๋ต์ด ์์ด์ผ phase๊ฐ ์ฑ๊ณตํฉ๋๋ค. ์ ์ฉํ ๊ณํ์ ๊ฐ์ ๋ด์ฉ์ผ๋ก ์ฌ์๋ํ ์ ์์ผ๋ฉฐ rollback์ด๋ ๋๊ฒฐ ํด์ ๋ ์์ต๋๋ค.
์ด ๊ทธ๋ํ๋ GossipSub ๋ฉ์๋ฅผ ๊ณ ์ ํฉ๋๋ค. TransportยทDHT ์ฐ๊ฒฐ, directยทflood ๋ฐํ๊ณผ lazy gossip์ ๊ธฐ์กด ๊ท์น์ ๋ฐ๋ฅด๋ฏ๋ก ๋ฉ์ ๋ฐ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ํ์ ํจ๊ป ํ์ฑํํ ํ๋กํ ์ฝ์ ์์ฉํ๋๋ก ์ฐ๊ฒฐ ์์ฐ์ ์ค์ ํ์ญ์์ค. ์์ ๋ ์ถ๊ฐ ์ฐ๊ฒฐ์ ์ค์ด๊ธฐ ์ํด Worker์ DHTยทtopic discovery๋ฅผ ๋๊ณ bootstrap๊ณผ ๊ธฐ์กด lazy ๋ณต๊ตฌ๋ฅผ ์ ์งํฉ๋๋ค.
์ ์ฅ๋๋ topology_generated, ๋
ธ๋๋ณ topology_assignment, topology_stage ์ด๋ฒคํธ์๋ ์์ฑ๊ธฐ ๋ฒ์ ยทseedยท์์ ์ด์๊ณผ ์๋ต ์๋ฅผ ๋ณด์กดํฉ๋๋ค. Peer์ topology_applied๋ ๋ก์ปฌ ์ค์น๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์์ ๊ฐ์ ์ ์ค์ ํ์ฑ ๋งํฌ์ ์ฆ๊ฑฐ๊ฐ ์๋๋ฉฐ ๋ผ์ด๋ธ ํ ํด๋ก์ง๋ ๊ณ์ ํ์ฑ ๋ฉ์ ๋ฉค๋ฒ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. ์ ์ฒด ์ด์ ๋ชฉ๋ก์ ์ต๊ทผ ์ด๋ฒคํธ ๋ชฉ๋ก์์ ์ ์ธํฉ๋๋ค. ๋ฐํ์ API๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
| ํ๋ | ์ ์ฉ action | ์๋ฏธ์ ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
name, repeat
|
๋ชจ๋ action | ํ์ ์ด๋ฆ์ ๊ธฐ๋ณธ์ ์ผ๋ก <action>-<phase number>์ด๋ฉฐ repeat๋ฅผ ์๋ตํ๊ฑฐ๋ 0์ผ๋ก ์ค์ ํ๋ฉด 1์
๋๋ค. |
job, await
|
join, publish, leave, schedule
|
await: false๊ฐ background job์ ๋ง๋ค๋ฉฐ job์ ์๋ตํ๋ฉด phase-<phase number>์
๋๋ค. Job ID๋ stop-all๋ก ์ถ์ ์ํ๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ ๊น์ง ๊ณ ์ ํด์ผ ํฉ๋๋ค. |
group, count
|
join, publish, leave
|
ํ์ group๊ณผ ์์ ์์
์์
๋๋ค. Publish์ ๊ฐ ๋ฐ๋ณต์ ์กฐ๊ฑด์ ๋ง๋ ์๋ก ๋ค๋ฅธ publisher๋ฅผ ์ต๋ count๊ฐ ์ ํํฉ๋๋ค. |
type |
join, publish, leave, wait-ready
|
Join preset์ ์ ํํ๊ฑฐ๋ ์ ์ฉ ์๋ฃ๋ type์ผ๋ก ๊ธฐ์กด ๋ ธ๋๋ฅผ ํํฐ๋งํฉ๋๋ค. |
role, profile, node
|
join |
Role์ boot ๋๋ ๊ธฐ๋ณธ๊ฐ worker์ด๋ฉฐ profile๊ณผ inline node ์ค์ ์ผ๋ก preset์ ์กฐ์ ํฉ๋๋ค. |
placement, agentId
|
join |
๊ธฐ๋ณธ๊ฐ balanced๋ ๋ค์ Peer๋ฅผ ํฌํจํ ์์ ์ ์ ๋/์ ํจ Agent capacity(์น ์์ธ๊ฐ ํฌํจ)๊ฐ ๊ฐ์ฅ ๋ฎ์ ๊ณณ์ ์ ํํ๊ณ random์ ๋
ธ๋๋ง๋ค, single-agent๋ batch๋ง๋ค Agent ํ๋๋ฅผ ์ ํํฉ๋๋ค. ๋ช
์์ agentId๋ ๋ฐฐ์น๋ฅผ ๊ณ ์ ํ๋ฉฐ admission์ ๊ฐ์ฉ ์ฉ๋์ ๊ธฐ๋ค๋ฆฝ๋๋ค. |
parallel, parallelism
|
join, publish, leave
|
๊ธฐ๋ณธ๊ฐ์ ์์ฐจ ์คํ์ ๋๋ค. Parallel์ ์ผ๊ณ parallelism์ ์๋ตํ๊ฑฐ๋ 0์ผ๋ก ์ค์ ํ๋ฉด batch ์ ์ฒด์ ๋์ ์คํ์ ํ์ฉํฉ๋๋ค. ๋ช ์ํ ๊ฐ์ ์คํ ์ค์ธ ์์ ๋ฟ ์๋๋ผ worker goroutine ์๋ ์ ํํ๋ฉฐ, ๋๊ธฐ ์ค์ธ publish์ ์ง์ฐ ์๊ฐ์ batch ์์ ์์ ๊ธฐ์ค์ ์ ์งํฉ๋๋ค. |
interval, lifetime
|
๊ฐ๊ฒฉ์ด ์๋ ์์
; lifetime์ join๋ง |
์๋ ์๊ฐ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค. Peer lifetime์ ์ปจํ ์ด๋ ์์ฑ ์ฑ๊ณต ํ ์์ํ๋ฏ๋ก ์ค์ ๋ณต์ฌ, start, bootstrap์ ํฌํจํ๋ฉฐ background job ์๋ฃ์ ๋ ๋ฆฝ์ ์ ๋๋ค. |
topic, payloadSize, payloadEncoding
|
publish |
Topic ๊ธฐ๋ณธ๊ฐ์ publisher์ ์ฒซ ์ค์ topic์ด๋ฉฐ '*'๋ ์ค์ ํ ๋ชจ๋ topic์ผ๋ก ๋ฐํํฉ๋๋ค. 0 ์ดํ payloadSize๋ 32๋ก ์ฒ๋ฆฌํ๋ฉฐ 16 MiB๋ฅผ ์ด๊ณผํ๋ ๊ฐ์ ์๋๋ฆฌ์ค ๊ฒ์ฆ์์ ๊ฑฐ๋ถํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ envelope๋ JSON/base64 metadata๋ฅผ ์ถ๊ฐํ๊ณ raw๋ PubSub data๋ฅผ ์ ํํ payloadSize byte๋ก ๋ง๋ญ๋๋ค. |
deliveryWindow, onError
|
publish; onError๋ leave์๋ ์ ์ฉ |
Window ๊ธฐ๋ณธ๊ฐ์ 10s์
๋๋ค. ๊ธฐ๋ณธ๊ฐ onError: fail ๋์ continue๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ณ ์์
์คํจ๋ฅผ ๊ธฐ๋กํ๊ณ churn์ ๊ณ์ํฉ๋๋ค. Publish ํ๋ณด๊ฐ ์์ ๋ continue๋ ์๋ฌด ์์
์์ด ์ฑ๊ณตํฉ๋๋ค. |
group, type, readyRatio, minCount, jobs, timeout
|
wait-ready |
๋น group/type์ ํ์ฌ generation์ ๋ชจ๋ ๋
ธ๋์ ๋์ํฉ๋๋ค. Ratio ๊ธฐ๋ณธ๊ฐ์ 1์ด๋ฉฐ ์ ํํ (0, 1] ๊ฐ์ด์ด์ผ ํฉ๋๋ค. Timeout ๊ธฐ๋ณธ๊ฐ์ 1m์ด๋ฉฐ job ๋๊ธฐ์ readiness๋ฅผ ํจ๊ป ์ ํํฉ๋๋ค. minCount๋ cohort ํฌ๊ธฐ์ ํํ์
๋๋ค. |
jobs, timeout
|
wait-jobs |
๋น jobs๋ ์ถ์ ํ๋ ๋ชจ๋ job์ ๋ปํ๋ฉฐ timeout ๊ธฐ๋ณธ๊ฐ์ 5m์
๋๋ค. |
group, nodeIds, peerIds, type, role, timeout
|
mesh-freeze |
Version 3์ ์ ํ์๋ ๊ต์งํฉ์ด๋ฉฐ ์ ์ฉ ์๋ต๊น์ง ํฌํจํ phase ์ ์ฒด timeout์ ๊ธฐ๋ณธ 30s์
๋๋ค. Mesh freeze๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. |
topology, topic, count, group, nodeIds, peerIds, type, role, timeout
|
topology |
Version 3์ ์ ํํ Peer ๋์ ๊ทธ๋ํ ํ์ฑ์ ๋๋ค. ํ ํฝ์ ํ์์ด๋ฉฐ ์ ํ์ count๋ ๊ฐ์ฒด ์๋ฅผ ๊ฒ์ฌํฉ๋๋ค. Timeout์ ์๋ตํ๋ฉด ์ ํ ์ธ์์ ๋ฐ๋ผ ๊ณ์ฐํฉ๋๋ค. ํ ํด๋ก์ง ํ์ฑ์ ์ฐธ๊ณ ํ์ญ์์ค. |
schedule, group, profile, nodeIds, peerIds, type, role, timeout
|
schedule |
Profile schedules๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค. Timeout์ ๊ฐ ๋ณ๊ฒฝ ์์ ๋ถํฐ ์ ์ฉํฉ๋๋ค. |
duration; message
|
wait / sleep; log
|
์์ ๋๊ธฐ ์๊ฐ๊ณผ Controller ๋ก๊ทธ ๋ฉ์์ง์ ๋๋ค. |
phase ๋ชฉ๋ก์ด ์์ฐ์ค๋ฝ๊ฒ ๋๋ฌ์ ๋ background job์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ต์์ onExit์ผ๋ก ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ cancel์ ๋จ์ job์ ์ทจ์ํ ๋ค์ ์ข
๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. onExit: drain์ job์ด ์์ฐ์ค๋ฝ๊ฒ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋จ์ผ ์คํ์ ์์ฐ์ค๋ฌ์ด ์ฑ๊ณต์๋ ์ด job ์ ์ฑ
๋ง ์ ์ฉํ๋ฉฐ, ๋ช
์์ ์ธ stop-all phase๊ฐ ์์ผ๋ฉด Peer ์ปจํ
์ด๋๋ ๊ณ์ ์คํ๋ฉ๋๋ค. Dashboard/API์์ repetitions > 1๋ก ์ ์ถํ ๋ฐฐ์น๋ ๋ง์ง๋ง iteration์ ํฌํจํ ๋งค iteration ์ข
๋ฃ ๋ Peer๋ฅผ ์๋์ผ๋ก fenceํ๊ณ ์ ๋ฆฌํ์ฌ ๋ค์ ์คํ๊ณผ ๊ฒน์น์ง ์๊ฒ ํฉ๋๋ค. ์ด๋ YAML phase์ repeat์ ๋ณ๊ฐ์ ๊ธฐ๋ฅ์
๋๋ค.
jobShutdownTimeout์ ๊ธฐ๋ณธ๊ฐ์ 3m์
๋๋ค. ์ฌ์ฉ์ ๋๋ API ์์ฒญ์ด scenario๋ฅผ ์ทจ์ํ๊ฑฐ๋ phase ๋๋ background job์ด ์คํจํ๋ฉด Controller๋ ๋จ์ job์ ์ทจ์ํ๊ณ ์ด ์ ํ ์์์ ์ข
๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฐ ๋ค, ๋ชจ๋ Agent์ ํ์ฌ generation๊น์ง generation fence๋ฅผ ์ค์ ํ๊ณ Peer๋ฅผ ์ ๋ฆฌํ๋๋ก ์์ฒญํฉ๋๋ค. ๋ช
์์ ์ธ stop-all๋ ๊ฐ์ ์ ํ ์๊ฐ ๋ด job ์ข
๋ฃ๋ฅผ ์ ์ฉํ๊ณ job ์ถ์ ์ํ๋ฅผ ์ด๊ธฐํํ ๋ค ํ์ฌ run generation์ fence๋ก ์ค์ ํฉ๋๋ค. Agent๋ ์ผ์นํ๋ ์ปจํ
์ด๋๋ฅผ ์ข
๋ฃํ๊ธฐ ์ ์ ๋จ์กฐ ์ฆ๊ฐํ๋ fence๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ๋ฐ๋ผ์ generation N์ ๋ฆ์ create๋ fence๋ณด๋ค ๋จผ์ ์๋ฃ๋์ด cleanup์ ํฌํจ๋๊ฑฐ๋, generation์ด fence ์ดํ์ด๋ฏ๋ก ๊ฑฐ๋ถ๋ฉ๋๋ค. stop-all์ด ์ฑ๊ณตํ๋ฉด scenario๋ generation N+1๋ก ์งํํ๋ฏ๋ก ์ดํ phase์์ ๊ฐ์ run ID๋ก ์ ๋
ธ๋๋ฅผ ๋ง๋ค๊ณ job ID๋ ๋ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
wait-ready๋ ์คํจ, ์ข
๋ฃ ์ค, ์ข
๋ฃ๋ ๋
ธ๋๋ฅผ ํฌํจํ์ฌ ํ์ฌ run generation์์ ์กฐ๊ฑด์ ๋ง๋ ์ ์ฒด cohort๋ฅผ ๊ฒ์ฌํ๋ฉฐ ์ด์ generation์ ๋
ธ๋๋ ๋ฌด์ํฉ๋๋ค. cohort์ ์คํจํ ๋
ธ๋๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด barrier๋ ์ฑ๊ณตํ์ง ์์ผ๋ฉฐ, ์ค๋น ์ํ๋ก ๋ณด๊ณ ๋ ๋
ธ๋๋ ํด๋น Agent๊ฐ online์ผ ๋๋ง ready ์์ ํฌํจ๋ฉ๋๋ค. ์ด cohort ์ญ์ ์ง๊ธ๊น์ง ๊ด์ธก๋ ๋
ธ๋๋ก๋ง ๊ตฌ์ฑ๋๋ฏ๋ก await: false join ๋ค์์ wait-ready์๋ jobs: [job-id] ๋๋ minCount ์ค ํ๋๊ฐ ํ์ํฉ๋๋ค. jobs๋ ์ง์ producer job์ด ์๋ฃ๋ ๋ค readiness๋ฅผ ๊ฒ์ฌํฉ๋๋ค. minCount๋ producer๋ฅผ ๊ณ์ ์คํํ๋ฉด์ ์ผ๋ถ๋ง ์์ฑ๋ ๊ทธ๋ฃน์ด ์ค๋น์จ์ ๋๋ฌด ์ผ์ฐ ๋ง์กฑํ์ง ๋ชปํ๊ฒ ํฉ๋๋ค.
parallel |
await |
๋์ |
|---|---|---|
false |
true |
๊ฐ๊ฒฉ์ ์ ์ฉํ replica๋ฅผ ์์ฐจ ์คํํ๋ฉฐ ๋ค์ phase๊ฐ ๊ธฐ๋ค๋ฆฝ๋๋ค. |
true |
true |
replica๋ฅผ ๋์์ ์คํํ๋ฉฐ ๋ค์ phase๊ฐ ์ ์ฒด batch๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. |
false |
false |
๊ฐ๊ฒฉ์ ์ ์ฉํ ์์ฐจ job์ด background์์ ์คํ๋ฉ๋๋ค. |
true |
false |
๋์ ์คํ job์ด background์์ ์คํ๋ฉ๋๋ค. |
v2 ํธํ์ ์ํด interval์ ์๋ตํ publish phase์๋ ํน์ ๊ธฐ๋ณธ๊ฐ์ ์ ์ฉํฉ๋๋ค. parallel: true์ด๋ฉด ๊ฐ ์์
์ phase ์์ ๊ธฐ์ค 1s offset์ ์ฃผ๋ฉฐ, ์์ฐจ publish์ delay๋ 0์
๋๋ค. ์ด ๊ท์น์ await ๊ฐ๊ณผ ๋ฌด๊ดํฉ๋๋ค.
์์ฐจ join, publish, leave๋ ์ฒซ ์์
์ ์ฆ์ ์คํํ๊ณ , ์ดํ ์์
์ batch ์์ ์๊ฐ์ ์์ sample๋ interval์ ๋์ ํ ์๊ฐ์ ์์ฝํฉ๋๋ค. ์์ฒญ ์ฒ๋ฆฌยท์ ์ ๋๊ธฐ ์๊ฐ์ interval ์์ ํฌํจ๋๋ฉฐ ๋งค๋ฒ ์ถ๊ฐ๋์ง ์์ต๋๋ค. ์์ฝ๋ณด๋ค ๋ฆ์ด์ง ์์
์ ๊ฑด๋๋ฐ์ง ์๊ณ ์์๋๋ก ์คํํ๋ฉฐ ์๋ ์ผ์ ์ ๋ฐ๋ผ์ก์ ๋๊น์ง ์ถ๊ฐ๋ก ์ฌ์ง ์์ต๋๋ค. ์ทจ์ยท์ค๋ฅ๋ ์ฌ์ ํ ์คํ์ ์ค๋จํ๋ฉฐ Agent ์ฉ๋ ์ ํ๋ ์ ์ฉ๋ฉ๋๋ค. ๋ณ๋ ฌ join๊ณผ leave๋ interval์ ๋ฌด์ํฉ๋๋ค. ๋ณ๋ ฌ publish๋ ๊ฐ sample interval์ batch ์์ ๊ธฐ์ค์ ๋
๋ฆฝ์ ์ธ offset์ผ๋ก ์ฌ์ฉํ๊ณ ๊ทธ ํ ๋์ ์คํ slot์ ํ๋ณดํฉ๋๋ค. Offset์ ๋์ ํ์ง ์์ผ๋ฉฐ ๋์ ์คํ ์ฉ๋์ ๋ฐ๋ผ dispatch๊ฐ ๋ ๋ฆ์ด์ง ์ ์์ต๋๋ค.
์์ฐจ join์ด ์์ฝ๋ณด๋ค 1์ด ์ด์ ๋ฆ์ด์ง๋ฉด Controller๋ job ์คํ๋ณ ์ต๋ 10์ด์ ํ ๋ฒ churn join schedule delayed๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์คํ ID, ๊ทธ๋ฃน, ์์
๋ฒํธ, ์์ฝ ์๊ฐ, ์ง์ฐ ์๊ฐ์ด ํฌํจ๋ฉ๋๋ค. ์ง์์ ์ธ ์ฉ๋ยทAPI ๋ณ๋ชฉ์ ํ์ธํ ์ ์์ง๋ง ๊ณผ๋ถํ ์ํฉ์ Docker ์์ยทready ์๊ฐ๊น์ง ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. Agent heartbeat๋ ์ด๋ฒคํธ ์ ์ก๊ณผ ๋
๋ฆฝ์ ์ผ๋ก ์คํํ๋ฏ๋ก ๋๋ฆฐ telemetry ์์ฒญ์ด ์์กด ์ ํธ ์ ์ก์ ๋ง์ง ์์ต๋๋ค.
wait duration๊ณผ readiness/job timeout์ ์์์ฌ์ผ ํฉ๋๋ค. join์ lifetime์ ์๋ตํ๋ฉด ์๋ leave๋ฅผ ํ์ง ์์ง๋ง ๋ช
์์ ์ผ๋ก sample๋ 0s lifetime์ v2์ ๊ฐ์ด ์ ๋
ธ๋๋ฅผ ์ฆ์ ์ข
๋ฃํฉ๋๋ค.
์๋ช ๋ง๋ฃ๋ ์ปจํ ์ด๋ ์์ฑ ์ฑ๊ณต ์งํ ๊ธฐ๋กํ ๋จ์กฐ ์๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํฉ๋๋ค. Agent metadata ์ ๊ธ์ด๋ ํ์ด๋จธ goroutine ์คํ์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ๋ sample๋ ์๋ช ์ ํฌํจ๋ฉ๋๋ค. ์ด๋ฏธ ์ง๋ ๋ง๊ฐ์ ๋๊ธฐ ์ฝ๋๊ฐ ์คํ๋๋ ์ฆ์ ์ข ๋ฃ๋ฅผ ์์ฒญํ์ง๋ง, CPU ๊ฒฝํฉ๊ณผ cleanup ๋๋ฌธ์ ์ค์ ์ ๊ฑฐ๋ ๋ฆ์ด์ง ์ ์์ต๋๋ค. ํ๋ก์ธ์ค ์ทจ์ ์ ํ์ด๋จธ๋ฅผ ํด์ ํ๊ณ , ์ด๋ฏธ ์ทจ์๋ ํ๋ก์ธ์ค์๋ ์๋ช ์ข ๋ฃ๋ฅผ ๋ค์ ํธ์ถํ์ง ์์ต๋๋ค.
phases:
- name: background churn
action: join
job: churn
await: false
parallel: false
group: churners
role: worker
type: light
count: 100
interval: {model: exponential, mean: 250ms}
lifetime: {model: pareto, xm: 45s, alpha: 2.5, max: 3m}
- action: wait
duration: 10s
- action: wait-ready
group: churners
jobs: [churn]
readyRatio: 1
timeout: 5m๊ฐ๊ฒฉ๊ณผ ์๋ช
์๋ ๋ค์ ๋ถํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. duration ๊ฐ์ Go duration ๋ฌธ์์ด์ ์ฌ์ฉํ๋ฉฐ ์ ํ์ ์ธ min/max duration ๋ฒ์๋ก ๊ฒฐ๊ณผ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ ํ์ ๋ถํฌ๋ ์๋ตํ๊ฑฐ๋ ๋น์ ๋ ์ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์๋ฅผ ์
๋ ฅํ๋ค๋ฉด model์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด lifetime: {value: 5s}๋ ์๋ชป๋ ์ค์ ์ด๋ฉฐ model: fixed๋ฅผ ๋ช
์ํด์ผ ํฉ๋๋ค.
| Model | ๋งค๊ฐ๋ณ์์ sampling ์๋ฏธ |
|---|---|
fixed |
value๊ฐ ์ ํํ duration์
๋๋ค. |
exponential |
mean์ ์ฐ์ ์ง์๋ถํฌ sample์ ํ๊ท duration์
๋๋ค. |
normal |
mean๊ณผ sigma๋ duration ๋จ์์ ํ๊ท ๊ณผ ํ์คํธ์ฐจ์
๋๋ค. ์์ sample์ 0์ผ๋ก ์ ํํ ๋ค ์ ํ์ ์ธ ๋ฒ์๋ฅผ ์ ์ฉํฉ๋๋ค. |
pareto |
xm์ scale duration์ด๋ฉฐ alpha๋ ๋ฌด์ฐจ์ shape์
๋๋ค. |
poisson |
v2 ํธํ ๋์์
๋๋ค. duration์ธ mean์ ์ด ๋จ์ Poisson ํ๊ท ์ผ๋ก ๋ณํํ๋ฉฐ sample ๊ฒฐ๊ณผ๋ ์ ์ ์ด๋ก ์์ํ๋ฉ๋๋ค. |
gamma |
alpha๋ shape์
๋๋ค. v2 ํธํ beta(์ด๋น rate) ๋๋ scale(duration) ์ค ์ ํํ ํ๋๋ง ์ฌ์ฉํด์ผ ํ๋ฉฐ ๋ ํ์์ ์ํธ๋ฐฐํ์ ์
๋๋ค. |
lognormal |
mu๋ log-space ํ๊ท ์ด๊ณ sigma๋ ๋ฌด์ฐจ์์
๋๋ค. sigma: "0.5" ๊ฐ์ ์ซ์ ๋ฌธ์์ด ๋๋ ์ซ์ ํ๋ logSigma ์ค ์ ํํ ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ์ค์ ๊ท๋ถํฌ Z์ ๋ํด ๊ฒฐ๊ณผ๋ exp(mu + sigma*Z)์ด์
๋๋ค. |
0์ด ์๋ scenario seed๋ ์ด๊ธฐ ์ํ, ์กฐ๊ฑด์ ๋ง๋ ํ๋ณด ์งํฉ, readiness/job barrier๊ฐ ๊ฐ์ ๋ sample๋ delay์ ๋ถํฌ sample, ๋ฌด์์ ์ ํ ๋ฐ ์์๋ฅผ ์ฌํํฉ๋๋ค. Peer identity๋ (run ID, ๋
ธ๋๋ณ seed) ์กฐํฉ๋ง๋ค ๊ฒฐ์ ๋ฉ๋๋ค. ๊ฐ์ ์กฐํฉ์ ๊ฐ์ Peer ID๋ฅผ ๋ง๋ค์ง๋ง, run ID๊ฐ ๋ค๋ฅด๋ฉด ์คํ ๊ฐ identity ์ถฉ๋์ ๋ง๊ธฐ ์ํด ์๋์ ์ผ๋ก ๋ค๋ฅธ Peer ID๋ฅผ ๋ง๋ญ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ scenario seed๋ ์คํ ๊ฐ sampling๊ณผ ์์๋ฅผ ์ฌํํ์ง๋ง run ID๊ฐ ๋ค๋ฅด๋ฉด Peer ID๊น์ง ๊ฐ์์ง์ง๋ ์์ต๋๋ค. seed: 0์ ์๋์ ์ผ๋ก ์คํ ์๊ฐ ๊ธฐ๋ฐ seed๋ฅผ ์ ํํฉ๋๋ค. ๋จผ์ examples/smoke.yaml์ ํ์ธํ๊ณ , custom profile, ์ด์ข
worker type, ์ ํ๋ ๋ณ๋ ฌ batch, background paced job์ examples/mixed-workers.yaml์ ์ฐธ๊ณ ํ์ญ์์ค.
Docker ๋ฐํ์์ Peer๋ง๋ค ๋คํธ์ํฌ๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ๋
ธ๋๋ณ P2P egress ์กฐ๊ฑด์ ์ง์ํฉ๋๋ค. wait-ready๋ Peer ์ด๊ธฐํ์ API ์ค๋น ์๋ฃ๋ฅผ ํ์ธํ๋ฉฐ mesh ์๋ ด์ ๊ฒ์ฆํ์ง ์์ต๋๋ค. ์ฃผ๊ธฐ์ topic discovery๊ฐ churn ์ค transport ํ๋ณด๋ฅผ ๋ณด๊ฐํ์ง๋ง GossipSub heartbeat์ GRAFT ์ฒ๋ฆฌ์๋ ์ฌ์ ํ ์๋ ด ์๊ฐ์ด ํ์ํฉ๋๋ค. ํ์ํ ์คํ์๋ ๋ณ๋ ์์ ํ ๋๊ธฐ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ญ์์ค. scenario seed๋ ์์ ์ค๋ช
ํ ์กฐ๊ฑด์์ ์ ํ๋ฆฌ์ผ์ด์
sampling๊ณผ ์์๋ฅผ ์ฌํํ์ง๋ง, ์ปค๋์ packet impairment๋ ๋คํธ์ํฌ ํ์ด๋ฐ๊น์ง ๋์ผํ๊ฒ ์ฌํํ์ง๋ ์์ต๋๋ค. ์ ํ์ HopWave ์ ๋ฌ์ ํธํ ๋น๋์ ๋ช
์์ ํ์ฑํ๊ฐ ํ์ํฉ๋๋ค.
Agent๋ ํ์ธ๋ ์ข
๋ฃ ์ด๋ ฅ์ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์บ์์ ๋จ๊ธฐ๊ณ ์ค๋๋ ๊ธฐ๋ก์ ๋ก์ปฌ์ ๋ณด๊ดํ๋ฉฐ, ์ฌ๋ฑ๋ก ์ ์ ํ๋ ํ์ด์ง๋ก ๋ค์ ์ ์กํฉ๋๋ค. ํ๋์ ๋ณต๊ตฌ ๊ท์น์ Agent ์ด๋ ฅ ๋ณด์กด์ ์ฐธ๊ณ ํ์ญ์์ค. Controller์ ์ ์ฒด snapshot์๋ ๋ณด์กด ์ค์ธ ๋
ธ๋ ์ด๋ ฅ์ด ๊ณ์ ํฌํจ๋ฉ๋๋ค. ํ์์ ๋ถ๋ถ heartbeat, discovery, dashboard SSE๋ ํ์ฑ ๋
ธ๋์ ์ ์กํ ๋ณ๊ฒฝ ์ฌํญ์ ์ฌ์ฉํ์ฌ ์ ์ฒด ์ด๋ ฅ์ ๋ฐ๋ณต ์ฒ๋ฆฌ๋ฅผ ํผํฉ๋๋ค. ๋๊ท๋ชจ parallel phase์๋ parallelism์ ๋ช
์ํ์ญ์์ค. ์๋ตํ๋ฉด ์ฌ์ ํ batch ์ ์ฒด์ ๋์ ์คํ์ ํ์ฉํฉ๋๋ค.