zebra/design/peers.txt

75 lines
9.0 KiB
Plaintext

──────▶ 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 │
└───────────────┘ └───────────────┘