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 @@
┌───────────────────────────────────────────────┐
│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
└───────────────┘ └───────────────┘