diff --git a/design/peers.txt b/design/peers.txt deleted file mode 100644 index 9c73b4b1..00000000 --- a/design/peers.txt +++ /dev/null @@ -1,75 +0,0 @@ - ──────▶ 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 diff --git a/design/zebra-network.monopic b/design/zebra-network.monopic new file mode 100644 index 00000000..36e76e7f Binary files /dev/null and b/design/zebra-network.monopic differ diff --git a/design/zebra-network.txt b/design/zebra-network.txt new file mode 100644 index 00000000..d202710a --- /dev/null +++ b/design/zebra-network.txt @@ -0,0 +1,77 @@ + ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ + │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 ││ ┃ │ + │└───────────┘ └───────────┘ └───────────┘ └───────────┘│ ┃ │ + │ │ ┃ │ + │┌──────┐ ┌──────────────┐ │ ┃ │ + ││ load │ │peer discovery│ PeerSet│ ┃ │ + ││signal│ ┏━▶│ receiver │ req: Request, rsp: Response│ ┃ │ + │└──────┘ ┃ └──────────────┘ routes all outgoing requests│ ┃ │ + │ ┃ ┃ adds peers via discovery│ ┃ │ + └────╋──────╋───────────────────────────────────────────────────────┘ ┃ │ + ┃ ┃ ▲ ┃ │ + ┃ ┣━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓ ┃ ┃ │ + ┃ ┃ ┏━━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫ ┃ │ + ▼ ┃ ┃ ┃ ┃ ┃ ┃ │ + ┌────────────────╋───┐┌────────────┐┌─────────────┐ ┃ ┃ │ + │Crawler ┃ ││ Listener ││Initial Peers│ ┃ ┃ │ + │ ┌──────┐││ ││ │ ┃ ┃ │ + │ │Tower │││ ││ │ ┃ ┃ │ + │ │Buffer│││listens for ││ connects on │ ┃ ┃ │ + │ └──────┘││ incoming ││ launch to │ ┃ ┃ │ + │uses peerset to ││connections,││ seed peers │ ┃ ┃ │ + │crawl network, ││ sends ││specified in │ ┃ ┃ │ + │maintains candidate ││ handshakes ││ config file │ ┃ ┃ │ + │peer set, connects ││ to peer ││ to build │ ┃ ┃ │ + │to new peers on load││ discovery ││initial peer │ ┃ ┃ │ + │signal or timer ││ receiver ││ set │ ┃ ┃ │ + └────────────────────┘└────────────┘└─────────────┘ ┃ ┃ │ + │ zebra-network internals ┃ ┃ │ +─ ─ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┃─ ─ ─ ─ ─ ─ ╋ ─ ─ ┼ + │ exposed api ┃ ┃ │ + │ ┌────────────────────────┐ ┃ ┃ │ + │ │Arc> │ ┃ ┃ │ + │ │last-seen timestamps for│ ┃ ┃ │ + └─────────────│ each peer, obtained by │◀─────╋────────────╋─────┘ + │ hooking into incoming │ ┃ ┃ + │ message streams │ ┃ ┃ + └────────────────────────┘ ┃ ▼ + ┌────────────────┐┌───────────────┐ + │Outbound Service││Inbound Service│ + │ req: Request, ││ req: Request, │ + │ rsp: Response ││ rsp: Response │ + │ ││ │ + │ Tower Buffer ││ routes all │ + └────────────────┘│ incoming │ + │requests, uses │ + │ load-shed │ + │ middleware to │ + │ remove peers │ + │ when internal │ + │ services are │ + │ overloaded │ + └───────────────┘ \ No newline at end of file