libp2p / libp2p/go-libp2p-pubsub

The Evolutionary Road to Episub

Open
#233 1 comment 12 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

req:ethereum req:filecoin
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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.