Update architecture diagram. (#60)
This commit is contained in:
parent
8a3b4f48fc
commit
4efceb490d
150
design/peers.txt
150
design/peers.txt
|
@ -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 │
|
||||
└───────────────┘ └───────────────┘
|
Loading…
Reference in New Issue