zebra/design/peers.txt

76 lines
7.2 KiB
Plaintext
Raw Normal View History

2019-09-30 08:48:15 -07:00
┌───────────────────────────────────────────────┐
│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 │
└─────────────────────────────┘