Update architecture diagram. (#60)

This commit is contained in:
Henry de Valence 2019-10-09 14:46:59 -07:00 committed by Deirdre Connolly
parent 8a3b4f48fc
commit 4efceb490d
1 changed files with 75 additions and 75 deletions

View File

@ -1,75 +1,75 @@
┌───────────────────────────────────────────────┐ ──────▶ Channel
│Peer: one or more futures │ Legend:
│ │ ━━━━━━▶ Service call
│ ┌────────────┐ incoming messages │
│ │ TcpStream │ are sent to the │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ └────────────┘ PeerClient, to │ │ PeerServer │ │ PeerServer │ │ PeerServer │ │ PeerServer │
│ ▲ check if they are │ │ ┌───────┐ │ │ ┌───────┐ │ │ ┌───────┐ │ │ ┌───────┐ │
│ ║ responses, or else │ │ │┌─────┐│ │ │ │┌─────┐│ │ │ │┌─────┐│ │ │ │┌─────┐│ │
│ ║ to the PeerServer, │ │ ││ Tcp ││ │ │ ││ Tcp ││ │ │ ││ Tcp ││ │ │ ││ Tcp ││ │
│ ▼ to check if they │ │ │└─────┘│───┼┐ │ │└─────┘│───┼┐ │ │└─────┘│───┼┐ │ │└─────┘│───┼┐
│ ┌────────────┐ are requests │ │ │Framed │ ││ │ │Framed │ ││ │ │Framed │ ││ │ │Framed │ ││
│ │ Framed │ │ │ │Stream │ ││ │ │Stream │ ││ │ │Stream │ ││ │ │Stream │ ││
│ │ Messages │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│─ ─ ─ │ └───────┘ ││ │ └───────┘ ││ │ └───────┘ ││ │ └───────┘ ││
│ └────────────┘ last-seen timestamp channel │ │ ┏▶│ ┃ ││ ┏▶│ ┃ ││ ┏▶│ ┃ ││ ┏▶│ ┃ ││
│ ▲ │ ┃ │ ┃ ││ ┃ │ ┃ ││ ┃ │ ┃ ││ ┃ │ ┃ ││
│ ║ mpsc channel or Service? │ │ ┃ │ ▼ ││ ┃ │ ▼ ││ ┃ │ ▼ ││ ┃ │ ▼ ││
│ ╠════════════════════════╗ │ ┃ │ ┌───────┐ ││ ┃ │ ┌───────┐ ││ ┃ │ ┌───────┐ ││ ┃ │ ┌───────┐ ││
│ ║ ║ │ │ ┃ │ │ Tower │ ││ ┃ │ │ Tower │ ││ ┃ │ │ Tower │ ││ ┃ │ │ Tower │ ││
│ ▼ ▼ │ ┃ │ │Buffer │ ││ ┃ │ │Buffer │ ││ ┃ │ │Buffer │ ││ ┃ │ │Buffer │ ││
│ ┌──────────────────┐ ┌──────────────────┐ │ │ ┃ │ └───────┘ ││ ┃ │ └───────┘ ││ ┃ │ └───────┘ ││ ┃ │ └───────┘ ││
│ │ PeerClient │ │ PeerServer │ │ ┃ │ ┃ ││ ┃ │ ┃ ││ ┃ │ ┃ ││ ┃ │ ┃ ││
│ │sends reqs to peer│ │sends reqs to core│ │ │ ┃ └─────╋───────┘│ ┃ └─────╋───────┘│ ┃ └─────╋───────┘│ ┃ └─────╋───────┘│
│ │sends rsps to core│ │sends rsps to peer│ │ ┃ ┃ └─╋───────╋────────┴─╋───────╋────────┴─╋───────╋────────┴─┐
│ └──────────────────┘ └──────────────────┘ │ │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ │
│ ▲ │ │ ┃ ┗━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━━━━━━━┻━━━━━━━━━━╋━┓
└───────────┼────────────────────────┼──────────┘ │ ┃ ┃ ┃ ┃ │ ┃
│ │ ┗━━━━━━━━┓ ┗━━━━━━━━┓ ┗━━━━━━━━┓ ┗━━━━━━━━┓ │ ┃
│ │ │ ┌───────╋──────────────────╋──────────────────╋──────────────────╋───────┐ │ ┃
┌───────────┼────────────────────────┼──────────┐ │ ┃ ┃ ┃ ┃ │ │ ┃
│ │ PeerSet: two Services │ │ │ │┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐│ │ ┃
│ │ plus bookkeeping ▼ │ ││ PeerClient │ │ PeerClient │ │ PeerClient │ │ PeerClient ││ │ ┃
│ ┌──────────────────┐ ┌──────────────────┐ │ │ │└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘│ │ ┃
│ │ Client │ │ Server │ │ ┌─────────────────────────────┐ │ │ │ ┃
│ │ │ │ │ │ │ │ PeerConnector Service │ │ PeerSet │ │ ┃
│ │ load-balances │ │ routes inbound │ │ │ req: SocketAddr │ │ req: Request, rsp: Response │ │ ┃
│ │outbound reqs over│ │PeerServer reqs to│ │ │ │rsp: (PeerClient, PeerServer)│ │ routes all outgoing requests, adds peers to handle load │ │ ┃
│ │ available │ │internal Services │ │────────▶│ │ └─────────────────────────────────────────────────────────┬──────────────┘ │ ┃
│ │ PeerClients │ │ │ │ │ │ performs handshakes, │ ▲ │ │ ┃
│ │ │ │ drives peerset │ │ │ constructs peer futures │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ ┃
│ │ drives peerset │ │ contraction via │ │ │ └─────────────────────────────┘ ┃ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━┛
│ │ expansion via │ │ backpressure │ │ │ ┃ ▼ │ │
│ │ backpressure │ │ │ │ │ │ ┃ ┌────────────────────────────────┐ ┌────────────────────────────┐ │
│ └──────────────────┘ └──────────────────┘ │ │ ┃ │ 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 │ │
│ │ │ │ PeerAddress Service │ ┃ │ │ └────────────────────────────┘ │
│ │ │ req: () │ ┃ │ │ ┃ ▲ │
│ │ │ │ rsp: SocketAddr │ ┃ └────────────────────────────────┘ ┃ └─────┐ │
└────────────────────────┼────────────────────│ │ ┃ ┃ ┃ │ │
│ │ │returns the next addr to try │ ┃ ┃ ┃ ┌───────────────┐ │
│ │ to connect to or asks │ ┃ ┃ ┃ │ PeerListener │ │
│ │ │existing peers for more addrs│ ┃ ┃ ┃ │ req: ? │ │
│ └─────────────────────────────┘ ┃ ┃ ┃ │rsp: PeerClient│ │
│ │ │ ┃ ┃ ┃ └───────────────┘ │
│ │ ┃ ┃ ┃ ┌───────────────┐ │
│ │ │ ┃ ┃ ┃ │ PeerConnector │ │
│ ▼ ┃ ┃ ┗━━━━▶│req: SocketAddr│ │
│ │ ┌─────────────────────────────┐ ┃ ┃ │rsp: PeerClient│ │
│ │ AddressBook │ ┃ ┃ └───────────────┘ │
│ └ ─▶│ │ ┃ ┃ ┃ │
│ │ per-addr last-seen info │ ┃ ┃ ▼ │
│ └─────────────────────────────┘ ┃ ┃ ┌───────────────┐ │
│ ▲ ┃ ┃ ┌───────────────┐ │ NextAddress │ │
│ │ ┗━━━━━━━━━━━━━━━━━━━━━╋━━━━━│ AddrCrawler │─────────▶│ req: () │ │
│ │ ┃ └───────────────┘ │rsp: SocketAddr│ │
│ │ ┃ └───────────────┘ │
│ ┌─────────────────────────────┐ ┃ ▲ │
│ │ AddressGossip Service │ ┃ │ │
│ │ req: () │ ┃ ┌───────────────┐ ┌───────────────┐ │
└───────────────────▶│ rsp: Vec<MetaAddr> │ ┃ │ AddrService │ │ AddressBook │ │
│ │ ┗━━━━▶│ req: GetPeers │◀─────────│ our per-peer │◀─┘
│ truncates timestamps │ │ rsp: Peers │ │last-seen info │
└─────────────────────────────┘ └───────────────┘ └───────────────┘