Skip to content

Commit

Permalink
Update architecture diagram. (#60)
Browse files Browse the repository at this point in the history
  • Loading branch information
hdevalence authored and dconnolly committed Oct 9, 2019
1 parent 8a3b4f4 commit 4efceb4
Showing 1 changed file with 75 additions and 75 deletions.
150 changes: 75 additions & 75 deletions design/peers.txt
Original file line number Diff line number Diff line change
@@ -1,75 +1,75 @@
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Peer: one or more futures β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” incoming messages β”‚
β”‚ β”‚ TcpStream β”‚ are sent to the β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ PeerClient, to β”‚
β”‚ β–² check if they are β”‚
β”‚ β•‘ responses, or else β”‚
β”‚ β•‘ to the PeerServer, β”‚
β”‚ β–Ό to check if they β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” are requests β”‚
β”‚ β”‚ Framed β”‚ β”‚
β”‚ β”‚ Messages │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│─ ─ ─
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ last-seen timestamp channel β”‚ β”‚
β”‚ β–² β”‚
β”‚ β•‘ mpsc channel or Service? β”‚ β”‚
β”‚ ╠════════════════════════╗ β”‚
β”‚ β•‘ β•‘ β”‚ β”‚
β”‚ β–Ό β–Ό β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ PeerClient β”‚ β”‚ PeerServer β”‚ β”‚
β”‚ β”‚sends reqs to peerβ”‚ β”‚sends reqs to coreβ”‚ β”‚ β”‚
β”‚ β”‚sends rsps to coreβ”‚ β”‚sends rsps to peerβ”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β–² β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ PeerSet: two Services β”‚ β”‚ β”‚
β”‚ β”‚ plus bookkeeping β–Ό β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ Client β”‚ β”‚ Server β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ PeerConnector Service β”‚
β”‚ β”‚ load-balances β”‚ β”‚ routes inbound β”‚ β”‚ β”‚ req: SocketAddr β”‚
β”‚ β”‚outbound reqs overβ”‚ β”‚PeerServer reqs toβ”‚ β”‚ β”‚ β”‚rsp: (PeerClient, PeerServer)β”‚
β”‚ β”‚ available β”‚ β”‚internal Services β”‚ │────────▢│ β”‚
β”‚ β”‚ PeerClients β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ performs handshakes, β”‚
β”‚ β”‚ β”‚ β”‚ drives peerset β”‚ β”‚ β”‚ constructs peer futures β”‚
β”‚ β”‚ drives peerset β”‚ β”‚ contraction via β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ expansion via β”‚ β”‚ backpressure β”‚ β”‚ β”‚
β”‚ β”‚ backpressure β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β–² β”‚ β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚ β–Ό
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ β”‚ β”‚ PeerAddress Service β”‚
β”‚ β”‚ β”‚ req: () β”‚
β”‚ β”‚ β”‚ β”‚ rsp: SocketAddr β”‚
└────────────────────────┼────────────────────│ β”‚
β”‚ β”‚ β”‚returns the next addr to try β”‚
β”‚ β”‚ to connect to or asks β”‚
β”‚ β”‚ β”‚existing peers for more addrsβ”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚ β”‚
β”‚ β”‚
β”‚ β”‚ β”‚
β”‚ β–Ό
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ AddressBook β”‚
β”‚ β”” ─▢│ β”‚
β”‚ β”‚ per-addr last-seen info β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β–²
β”‚ β”‚
β”‚ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ AddressGossip Service β”‚
β”‚ β”‚ req: () β”‚
└───────────────────▢│ rsp: Vec<MetaAddr> β”‚
β”‚ β”‚
β”‚ truncates timestamps β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
──────▢ Channel
Legend:
━━━━━━▢ Service call

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ PeerServer β”‚ β”‚ PeerServer β”‚ β”‚ PeerServer β”‚ β”‚ PeerServer β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚β”Œβ”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ β”‚β”Œβ”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ β”‚β”Œβ”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ β”‚β”Œβ”€β”€β”€β”€β”€β”β”‚ β”‚
β”‚ β”‚β”‚ Tcp β”‚β”‚ β”‚ β”‚ β”‚β”‚ Tcp β”‚β”‚ β”‚ β”‚ β”‚β”‚ Tcp β”‚β”‚ β”‚ β”‚ β”‚β”‚ Tcp β”‚β”‚ β”‚
β”‚ β”‚β””β”€β”€β”€β”€β”€β”˜β”‚β”€β”€β”€β”Όβ” β”‚ β”‚β””β”€β”€β”€β”€β”€β”˜β”‚β”€β”€β”€β”Όβ” β”‚ β”‚β””β”€β”€β”€β”€β”€β”˜β”‚β”€β”€β”€β”Όβ” β”‚ β”‚β””β”€β”€β”€β”€β”€β”˜β”‚β”€β”€β”€β”Όβ”
β”‚ β”‚Framed β”‚ β”‚β”‚ β”‚ β”‚Framed β”‚ β”‚β”‚ β”‚ β”‚Framed β”‚ β”‚β”‚ β”‚ β”‚Framed β”‚ β”‚β”‚
β”‚ β”‚Stream β”‚ β”‚β”‚ β”‚ β”‚Stream β”‚ β”‚β”‚ β”‚ β”‚Stream β”‚ β”‚β”‚ β”‚ β”‚Stream β”‚ β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚
┏▢│ ┃ β”‚β”‚ ┏▢│ ┃ β”‚β”‚ ┏▢│ ┃ β”‚β”‚ ┏▢│ ┃ β”‚β”‚
┃ β”‚ ┃ β”‚β”‚ ┃ β”‚ ┃ β”‚β”‚ ┃ β”‚ ┃ β”‚β”‚ ┃ β”‚ ┃ β”‚β”‚
┃ β”‚ β–Ό β”‚β”‚ ┃ β”‚ β–Ό β”‚β”‚ ┃ β”‚ β–Ό β”‚β”‚ ┃ β”‚ β–Ό β”‚β”‚
┃ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚β”‚ ┃ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚β”‚ ┃ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚β”‚ ┃ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”‚β”‚
┃ β”‚ β”‚ Tower β”‚ β”‚β”‚ ┃ β”‚ β”‚ Tower β”‚ β”‚β”‚ ┃ β”‚ β”‚ Tower β”‚ β”‚β”‚ ┃ β”‚ β”‚ Tower β”‚ β”‚β”‚
┃ β”‚ β”‚Buffer β”‚ β”‚β”‚ ┃ β”‚ β”‚Buffer β”‚ β”‚β”‚ ┃ β”‚ β”‚Buffer β”‚ β”‚β”‚ ┃ β”‚ β”‚Buffer β”‚ β”‚β”‚
┃ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚ ┃ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚ ┃ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚ ┃ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚β”‚
┃ β”‚ ┃ β”‚β”‚ ┃ β”‚ ┃ β”‚β”‚ ┃ β”‚ ┃ β”‚β”‚ ┃ β”‚ ┃ β”‚β”‚
┃ β””β”€β”€β”€β”€β”€β•‹β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ ┃ β””β”€β”€β”€β”€β”€β•‹β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ ┃ β””β”€β”€β”€β”€β”€β•‹β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ ┃ β””β”€β”€β”€β”€β”€β•‹β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
┃ ┃ └─╋───────╋────────┴─╋───────╋────────┴─╋───────╋────────┴─┐
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ β”‚
┃ ┗━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━┓
┃ ┃ ┃ ┃ β”‚ ┃
┗━━━━━━━━┓ ┗━━━━━━━━┓ ┗━━━━━━━━┓ ┗━━━━━━━━┓ β”‚ ┃
β”Œβ”€β”€β”€β”€β”€β”€β”€β•‹β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•‹β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•‹β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•‹β”€β”€β”€β”€β”€β”€β”€β” β”‚ ┃
β”‚ ┃ ┃ ┃ ┃ β”‚ β”‚ ┃
β”‚β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ ┃
β”‚β”‚ PeerClient β”‚ β”‚ PeerClient β”‚ β”‚ PeerClient β”‚ β”‚ PeerClient β”‚β”‚ β”‚ ┃
β”‚β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β”‚ ┃
β”‚ β”‚ β”‚ ┃
β”‚ PeerSet β”‚ β”‚ ┃
β”‚ req: Request, rsp: Response β”‚ β”‚ ┃
β”‚ routes all outgoing requests, adds peers to handle load β”‚ β”‚ ┃
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ ┃
β–² β”‚ β”‚ ┃
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ β”‚ β”‚ ┃
┃ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━┛
┃ β–Ό β”‚ β”‚
┃ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
┃ β”‚ Router β”‚ β”‚ PeerDiscover β”‚ β”‚
┃ β”‚ req: Request, rsp: Response β”‚ β”‚Discover<Service=PeerClient>β”‚ β”‚
┃ β”‚ routes all incoming requests, β”‚ β”‚ β”‚ β”‚
┃ β”‚ removes peers to shed load β”‚ β”‚ connects to a remote peer, β”‚ β”‚
┃ β”‚ β”‚ β”‚ constructs client/server β”‚ β”‚
┃ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
┃ β”‚ β”‚ ┃ β–² β”‚
┃ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ┃ └─────┐ β”‚
┃ ┃ ┃ β”‚ β”‚
┃ ┃ ┃ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
┃ ┃ ┃ β”‚ PeerListener β”‚ β”‚
┃ ┃ ┃ β”‚ req: ? β”‚ β”‚
┃ ┃ ┃ β”‚rsp: PeerClientβ”‚ β”‚
┃ ┃ ┃ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
┃ ┃ ┃ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
┃ ┃ ┃ β”‚ PeerConnector β”‚ β”‚
┃ ┃ ┗━━━━▢│req: SocketAddrβ”‚ β”‚
┃ ┃ β”‚rsp: PeerClientβ”‚ β”‚
┃ ┃ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
┃ ┃ ┃ β”‚
┃ ┃ β–Ό β”‚
┃ ┃ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
┃ ┃ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ NextAddress β”‚ β”‚
┗━━━━━━━━━━━━━━━━━━━━━╋━━━━━│ AddrCrawler │─────────▢│ req: () β”‚ β”‚
┃ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚rsp: SocketAddrβ”‚ β”‚
┃ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
┃ β–² β”‚
┃ β”‚ β”‚
┃ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
┃ β”‚ AddrService β”‚ β”‚ AddressBook β”‚ β”‚
┗━━━━▢│ req: GetPeers │◀─────────│ our per-peer β”‚β—€β”€β”˜
β”‚ rsp: Peers β”‚ β”‚last-seen info β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

0 comments on commit 4efceb4

Please sign in to comment.