From 4efceb490d3cabf16a2f8663fdcc25daf44f9fcf Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Wed, 9 Oct 2019 14:46:59 -0700 Subject: [PATCH] Update architecture diagram. (#60) --- design/peers.txt | 150 +++++++++++++++++++++++------------------------ 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/design/peers.txt b/design/peers.txt index 432e00a2..9c73b4b1 100644 --- a/design/peers.txt +++ b/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 │ - │ │ - │ 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│ │ + ┃ │ 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 │ + └───────────────┘ └───────────────┘ \ No newline at end of file