From b0f337dfde28a645c25fcc9967943a41975cbfee Mon Sep 17 00:00:00 2001 From: dirkmc Date: Tue, 7 Apr 2020 16:46:49 -0400 Subject: [PATCH] Add separate how bitswap works doc (#294) * docs: add separate how bitswap works doc * feat: update architecture diagram and add implementation description --- README.md | 58 ++-------------- docs/go-bitswap.png | Bin 47568 -> 84886 bytes docs/go-bitswap.puml | 19 +++-- docs/how-bitswap-works.md | 142 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 160 insertions(+), 59 deletions(-) create mode 100644 docs/how-bitswap-works.md diff --git a/README.md b/README.md index 28f07ff9..488d9993 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,8 @@ wants those blocks. `go-bitswap` provides an implementation of the Bitswap protocol in go. +[Learn more about how Bitswap works](./docs/how-bitswap-works.md) + ## Install `go-bitswap` requires Go >= 1.11 and can be installed using Go modules @@ -75,8 +77,7 @@ exchange := bitswap.New(ctx, network, bstore) Parameter Notes: 1. `ctx` is just the parent context for all of Bitswap -2. `network` is a network abstraction provided to Bitswap on top -of libp2p & content routing. +2. `network` is a network abstraction provided to Bitswap on top of libp2p & content routing. 3. `bstore` is an IPFS blockstore ### Get A Block Synchronously @@ -107,11 +108,11 @@ blockChannel, err := exchange.GetBlocks(ctx, cids) Parameter Notes: 1. `ctx` is the context for this request, which can be cancelled to cancel the request -2. `cids` is an slice of content IDs for the blocks you're requesting +2. `cids` is a slice of content IDs for the blocks you're requesting ### Get Related Blocks Faster With Sessions -In IPFS, content blocks are often connected to each other through a MerkleDAG. If you know ahead of time that block requests are related, Bitswap can make several optimizations internally in how it requests those blocks in order to get them faster. Bitswap provides a mechanism called a Bitswap session to manage a series of block requests as part of a single higher level operation. You should initialize a bitswap session any time you intend to make a series of block requests that are related -- and whose responses are likely to come from the same peers. +In IPFS, content blocks are often connected to each other through a MerkleDAG. If you know ahead of time that block requests are related, Bitswap can make several optimizations internally in how it requests those blocks in order to get them faster. Bitswap provides a mechanism called a Bitswap Session to manage a series of block requests as part of a single higher level operation. You should initialize a Bitswap Session any time you intend to make a series of block requests that are related -- and whose responses are likely to come from the same peers. ```golang var ctx context.Context @@ -125,7 +126,7 @@ var relatedCids []cids.cid relatedBlocksChannel, err := session.GetBlocks(ctx, relatedCids) ``` -Note that new session returns an interface with a GetBlock and GetBlocks method that have the same signature as the overall Bitswap exchange. +Note that `NewSession` returns an interface with `GetBlock` and `GetBlocks` methods that have the same signature as the overall Bitswap exchange. ### Tell bitswap a new block was added to the local datastore @@ -136,53 +137,6 @@ var exchange bitswap.Bitswap err := exchange.HasBlock(blk) ``` -## Implementation - -The following diagram outlines the major tasks Bitswap handles, and their consituent components: - -![Bitswap Components](./docs/go-bitswap.png) - -### Sending Blocks - -Internally, when a message with a wantlist is received, it is sent to the -decision engine to be considered. The decision engine checks the CID for -each block in the wantlist against local storage and creates a task for -each block it finds in the peer request queue. The peer request queue is -a priority queue that sorts available tasks by some metric. Currently, -that metric is very simple and aims to fairly address the tasks of each peer. -More advanced decision logic will be implemented in the future. Task workers -pull tasks to be done off of the queue, retrieve the block to be sent, and -send it off. The number of task workers is limited by a constant factor. - -### Requesting Blocks - -The want manager handles client requests for new blocks. The 'WantBlocks' method -is invoked for each block (or set of blocks) requested. The want manager ensures -that connected peers are notified of the new block that we want by sending the -new entries to a message queue for each peer. The message queue will loop while -there is work available and: -1. Ensure it has a connection to its peer -2. grab the message to be sent -3. Send the message -If new messages are added while the loop is in steps 1 or 3, the messages are -combined into one to avoid having to keep an actual queue and send multiple -messages. The same process occurs when the client receives a block and sends a -cancel message for it. - -### Sessions - -Sessions track related requests for blocks, and attempt to optimize transfer speed and reduce the number of duplicate blocks sent across the network. The basic optimization of sessions is to limit asks for blocks to the peers most likely to have that block and most likely to respond quickly. This is accomplished by tracking who responds to each block request, and how quickly they respond, and then optimizing future requests with that information. Sessions try to distribute requests amongst peers such that there is some duplication of data in the responses from different peers, for redundancy, but not too much. - -### Finding Providers - -When bitswap can't find a connected peer who already has the block it wants, it falls back to querying a content routing system (a DHT in IPFS's case) to try to locate a peer with the block. - -Bitswap routes these requests through the ProviderQueryManager system, which rate-limits these requests and also deduplicates in-process requests. - -### Providing - -As a bitswap client receives blocks, by default it announces them on the provided content routing system (again, a DHT in most cases). This behaviour can be disabled by passing `bitswap.ProvideEnabled(false)` as a parameter when initializing Bitswap. IPFS currently has its own experimental provider system ([go-ipfs-provider](https://github.com/ipfs/go-ipfs-provider)) which will eventually replace Bitswap's system entirely. - ## Contribute PRs are welcome! diff --git a/docs/go-bitswap.png b/docs/go-bitswap.png index 2b45b8d9b5a84b02dc83d0aaf33a713b6fc2bdef..31dff2b85a71af71b056e0cdbaa12941d13dabf2 100644 GIT binary patch literal 84886 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

v5&)MErD_|GN3X;E4i}jv>&|g+Uyq= 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 Iy8Y;X0JMwC>Hq)$ literal 47568 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 diff --git a/docs/go-bitswap.puml b/docs/go-bitswap.puml index 49da618b..6a291dc3 100644 --- a/docs/go-bitswap.puml +++ b/docs/go-bitswap.puml @@ -3,15 +3,17 @@ node "Top Level Interface" { [Bitswap] } -node "Sending Blocks" { - + +node "Sending Blocks" { + [Bitswap] --* [Engine] [Engine] -left-* [Ledger] [Engine] -right-* [PeerTaskQueue] [Engine] --> [TaskWorker (workers.go)] } -[Bitswap] --* "Sending Blocks" + node "Requesting Blocks" { [Bitswap] --* [WantManager] + [WantManager] --> [BlockPresenceManager] [WantManager] --> [PeerManager] [PeerManager] --* [MessageQueue] } @@ -27,13 +29,16 @@ node "Finding Providers" { node "Sessions (smart requests)" { [Bitswap] --* [SessionManager] + [SessionManager] --> [SessionInterestManager] [SessionManager] --o [Session] - [SessionManager] --o [SessionPeerManager] - [SessionManager] --o [SessionRequestSplitter] + [Session] --* [sessionWantSender] [Session] --* [SessionPeerManager] - [Session] --* [SessionRequestSplitter] [Session] --> [WantManager] - [SessionPeerManager] --> [ProvideQueryManager] + [Session] --> [ProvideQueryManager] + [Session] --* [sessionWants] + [Session] --> [SessionInterestManager] + [sessionWantSender] --> [BlockPresenceManager] + [sessionWantSender] --> [PeerManager] } node "Network" { diff --git a/docs/how-bitswap-works.md b/docs/how-bitswap-works.md new file mode 100644 index 00000000..749a5a76 --- /dev/null +++ b/docs/how-bitswap-works.md @@ -0,0 +1,142 @@ +How Bitswap Works +================= + +When a client requests blocks, Bitswap sends the CID of those blocks to its peers as "wants". When Bitswap receives a "want" from a peer, it responds with the corresponding block. + +### Requesting Blocks + +#### Sessions + +Bitswap Sessions allow the client to make related requests to the same group of peers. For example typically requests to fetch all the blocks in a file would be made with a single session. + +#### Discovery + +To discover which peers have a block, Bitswap broadcasts a `want-have` message to all peers it is connected to asking if they have the block. + +Any peers that have the block respond with a `HAVE` message. They are added to the Session. + +If no connected peers have the block, Bitswap queries the DHT to find peers that have the block. + +### Wants + +When the client requests a block, Bitswap sends a `want-have` message with the block CID to all peers in the Session to ask who has the block. + +Bitswap simultaneously sends a `want-block` message to one of the peers in the Session to request the block. If the peer does not have the block, it responds with a `DONT_HAVE` message. In that case Bitswap selects another peer and sends the `want-block` to that peer. + +If no peers have the block, Bitswap broadcasts a `want-have` to all connected peers, and queries the DHT to find peers that have the block. + +#### Peer Selection + +Bitswap uses a probabilistic algorithm to select which peer to send `want-block` to, favouring peers that +- sent `HAVE` for the block +- were discovered as providers of the block in the DHT +- were first to send blocks to previous session requests + +The selection algorithm includes some randomness so as to allow peers that are discovered later, but are more responsive, to rise in the ranking. + +#### Periodic Search Widening + +Periodically the Bitswap Session selects a random CID from the list of "pending wants" (wants that have been sent but for which no block has been received). Bitswap broadcasts a `want-have` to all connected peers and queries the DHT for the CID. + +### Serving Blocks + +#### Processing Requests + +When Bitswap receives a `want-have` it checks if the block is in the local blockstore. + +If the block is in the local blockstore Bitswap responds with `HAVE`. If the block is small Bitswap sends the block itself instead of `HAVE`. + +If the block is not in the local blockstore, Bitswap checks the `send-dont-have` flag on the request. If `send-dont-have` is true, Bitswap sends `DONT_HAVE`. Otherwise it does not respond. + +#### Processing Incoming Blocks + +When Bitswap receives a block, it checks to see if any peers sent `want-have` or `want-block` for the block. If so it sends `HAVE` or the block itself to those peers. + +#### Priority + +Bitswap keeps requests from each peer in separate queues, ordered by the priority specified in the request message. + +To select which peer to send the next response to, Bitswap chooses the peer with the least amount of data in its send queue. That way it will tend to "keep peers busy" by always keeping some data in each peer's send queue. + + +Implementation +============== + +![Bitswap Components](./docs/go-bitswap.png) + +### Bitswap + +The Bitswap class receives incoming messages and implements the Exchange API. + +When a message is received, Bitswap +- Records some statistics about the message +- Informs the Engine of any new wants + So that the Engine can send responses to the wants +- Informs the Engine of any received blocks + So that the Engine can send the received blocks to any peers that want them +- Informs the WantManager of received blocks, HAVEs and DONT_HAVEs + So that the WantManager can inform interested sessions + +When the client makes an API call, Bitswap creates a new Session and calls the corresponding method (eg `GetBlocks()`). + +### Sending Blocks + +When the Engine is informed of new wants it +- Adds the wants to the Ledger (peer A wants block with CID Qmhash...) +- Checks the blockstore for the corresponding blocks, and adds a task to the PeerTaskQueue + - If the blockstore does not have a wanted block, adds a `DONT_HAVE` task + - If the blockstore has the block + - for a `want-have` adds a `HAVE` task + - for a `want-block` adds a `block` task + +When the Engine is informed of new blocks it checks the Ledger to see if any peers want information about those blocks. +- For each block + - For each peer that sent a `want-have` for the corresponding block + Adds a `HAVE` task to the PeerTaskQueue + - For each peer that sent a `want-block` for the corresponding block + Adds a `block` task to the PeerTaskQueue + +The Engine periodically pops tasks off the PeerTaskQueue, and creates a message with `blocks`, `HAVEs` and `DONT_HAVEs`. +The PeerTaskQueue prioritizes tasks such that the peers with the least amount of data in their send queue are highest priority, so as to "keep peers busy". + +### Requesting Blocks + +When the WantManager is informed of a new message, it +- informs the SessionManager + The SessionManager informs the Sessions that are interested in the received blocks and wants +- informs the PeerManager of received blocks + The PeerManager checks if any wants were send to a peer for the received blocks. If so it sends a `CANCEL` message to those peers. + +### Sessions + +The Session starts in "discovery" mode. This means it doesn't have any peers yet, and needs to discover which peers have the blocks it wants. + +When the client initially requests blocks from a Session, the Session +- informs the SessionInterestManager that it is interested in the want +- informs the sessionWantManager of the want +- tells the WantManager to broadcast a `want-have` to all connected peers so as to discover which peers have the block +- queries the ProviderQueryManager to discover which peers have the block + +When the session receives a message with `HAVE` or a `block`, it informs the SessionPeerManager. The SessionPeerManager keeps track of all peers in the session. +When the session receives a message with a `block` it informs the SessionInterestManager. + +Once the session has peers it is no longer in "discovery" mode. When the client requests subsequent blocks the Session informs the sessionWantSender. The sessionWantSender tells the PeerManager to send `want-have` and `want-block` to peers in the session. + +For each block that the Session wants, the sessionWantSender decides which peer is most likely to have a block by checking with the BlockPresenceManager which peers have sent a `HAVE` for the block. If no peers or multiple peers have sent `HAVE`, a peer is chosen probabilistically according to which how many times each peer was first to send a block in response to previous wants requested by the Session. The sessionWantSender sends a single "optimistic" `want-block` to the chosen peer, and sends `want-have` to all other peers in the Session. +When a peer responds with `DONT_HAVE`, the Session sends `want-block` to the next best peer, and so on until the block is received. + +### PeerManager + +The PeerManager creates a MessageQueue for each peer that connects to Bitswap. It remembers which `want-have` / `want-block` has been sent to each peer, and directs any new wants to the correct peer. +The MessageQueue groups together wants into a message, and sends the message to the peer. It monitors for timeouts and simulates a `DONT_HAVE` response if a peer takes too long to respond. + +### Finding Providers + +When bitswap can't find a connected peer who already has the block it wants, it falls back to querying a content routing system (a DHT in IPFS's case) to try to locate a peer with the block. + +Bitswap routes these requests through the ProviderQueryManager system, which rate-limits these requests and also deduplicates in-process requests. + +### Providing + +As a bitswap client receives blocks, by default it announces them on the provided content routing system (again, a DHT in most cases). This behaviour can be disabled by passing `bitswap.ProvideEnabled(false)` as a parameter when initializing Bitswap. IPFS currently has its own experimental provider system ([go-ipfs-provider](https://github.com/ipfs/go-ipfs-provider)) which will eventually replace Bitswap's system entirely. +