Promoting Optimistic Provide from experimental to production ready #10047
Labels
effort/weeks
Estimated to take multiple weeks
exp/expert
Having worked on the specific codebase is important
kind/feature
A new feature
P2
Medium: Good to have, but can wait until someone steps up
Context
With Kubo 0.20.0 we released the experimental flag to enable Optimistic Provide. A technique that can dramatically accelerate DHT PUT performance. Recently, we measured sub-second provide latencies from North America and central Europe for >90% percent of the provide operations that we performed (
N > 10k
) while reducing networking overhead by >40% without compromising record availability.This is a tracking issue to discuss when and if we should promote it to a production-ready feature.
Outreach/Adoption
I reached out to a couple of projects to gather feedback:
Production-Ready Criteria
TBD
Kubo
At the moment, the feature is a global flag that enables the technique for every provide operation. Given the specific trade-offs of the mechanism, I would rather apply it for specific use-cases only.
For example, non-time-sensitive operations like re-provides don't necessarily need to use it. On the other hand, if users add files to Kubo, I'd argue that they will expect them to be immediately available in the network.
Next Steps
Right now, you can only enable Optimistic Provide globally. This means you either provide content to the Amino DHT using the classic or the optimistic approach. I think it would be better if users could decide which strategy to use based on the use-case.
There are some paths that could benefit from providing optimistically and others where the benefits are debatable:
Where providing optimistically makes sense because I believe users expect content to be available immediately:
ipfs add ...
/ipfs dag put
and the likesThese golden paths could be crucial for users to adopt IPFS. If they don't have immediate feedback that it works, the chances are high that they bounce.
Where it makes sense to keep the classic approach:
Preferably, reproviding would even use something like Reprovide Sweep.
The challenge is that the current routing interface doesn't have an API to pass context information further down the stack. This means we cannot indicate which strategy we prefer to use.
The text was updated successfully, but these errors were encountered: