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
└─────────────────────────────┘ └───────────────┘ └───────────────┘