libp2p / libp2p/go-libp2p-pubsub
The Evolutionary Road to Episub
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 364
- Forks
- 221
- PR merge metrics
- No merged PRs in 30d
Description
Gossipsub is the base pubsub protocol and intermediate step towards our endgame, which is the episub protocol.
Episub can be construed as a set of optimizations over vanilla gossipsub and will get the `meshsub/2.0.0` protocol ID, with backwards compatibility with vanilla gossipsub.
Instead of a bing-bang approach, we propose to evolve the implementation of gossipsub towards episub as a set of PRs that expand the scope of the protocol, until we have implemented all the episub features.
Here is a list of the essential features we want for the transition to episub:
- [ ] Peer eXchange on mesh prune; briefly, when a peer gets pruned from the mesh, the pruning peer should return a list of other peers where the pruned peer can connect to reestablish overlay connectivity. This will allow us to recover from pathological bootstrap situations and make the mesh self-bootstrapping. With this extension, we can bootstrap a full mesh starting from a single known peer or a star topology [`meshsub/1.1.0`].
- [ ] Mesh regrafting; briefly, when a peer receives messages only through gossip and not directly through mesh propagation, we want to regraft that peer into the mesh. This will allow us to recover from overlay pathologies because of failures and node churn and minimize the latency globally [`meshsub/1.2.0`].
- [ ] Pathological peer greylisting; briefly, when a peer is consistently dropping messages because it has a poor network connection, it should be pruned from the mesh and transition to only gossip. This is the opposite of mesh regrafting for peers and acts as a circuit-breaker [`meshsub/1.2.0`].
- [ ] Tree forming for stable sources; briefly, this is the fundamental feature of epidemic broadcast trees, which is the inspiration for episub. The idea is that stable sources can form a tree overlay on top of the mesh, where messages from the source only propagate through the tree instead of the full mesh. This will drop the global amplification factor to near 1. This is the final step in the transition, where we switch the protocol to `meshsub/2.0.0`.
cc @raulk @Stebalien @whyrusleeping @ZenGround0
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No files, tests, or implementation entry points are identified in the issue. Begin by reviewing the four unchecked protocol features in order, including the meshsub/1.1.0 and meshsub/1.2.0 milestones; done means completing the listed features and reaching the meshsub/2.0.0 episub transition.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- distributed-systems, networking
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100