From 5939857fbbeff4bc4e22dcaf9bc16b05019469e3 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Mon, 30 Sep 2019 08:48:15 -0700 Subject: [PATCH] Add peer handling diagram. --- design/peers.txt | 75 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 design/peers.txt diff --git a/design/peers.txt b/design/peers.txt new file mode 100644 index 00000000..432e00a2 --- /dev/null +++ b/design/peers.txt @@ -0,0 +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 │ + └─────────────────────────────┘