-
Notifications
You must be signed in to change notification settings - Fork 446
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019 Q1 OKRs Planning #293
Conversation
After thinking about what we should tackle in the next quarter, as well as the discussions regarding the Q1 ObjectivesConnectivity Magic
Taking into consideration that the floodsub implementation does not scale in really large networks and that the real-time requirement for applications is essential nowadays, we should guarantee that we provide the gossipsub implementation soon in JS land. This is one of the features that other teams (DDC WG for instance) are really waiting for and I would also really like to implement it.
One of the requests from people currently building dapps is to have a streaming API for the DHT and IPNS. References:
We have been working along @jhiesey in the last months, in order to improve the current DHT implementation and we have made some progress. I think this topic is essential for the growth of
We have been blocked on implementing NAT traversal in
With QUIC advantages regarding performance and security, I think it should also be a focus for us. References:
I think that the use cases where having a bluetooth discovery and transport are really great in the As it is still only available for browsers in chrome for windows, we do not know how far we are from having it available in all the most used browsers across all devices. However, I think it would be greate to to incubate a PoC using References: Improve Debuggability and Stability
After we started working in interop during 2018 Q4 for the core functionallity, we should target next to have full interop regarding all the building blocks of libp2p and guarantee that the interop tests are now a requirement in the implementation of new features in With this, the interop tests must be included in the release process of both
With the endeavour of both js and go teams with the libp2p testbed, which I believe to have been good for both sides, I think we should continue collaborating. Accordingly, one of the next steps that we have been discussing for the testbed is the creation of a testlab. We should be able to easily deploy large networks for testing, debugging and performance purposes.
This tool did not have any relevant progress last quarter, but it is an important aspect of debuggability for a complex network. Moreover, it may also have potential to be used as a way for people to understand how our subsystems work graphically. It should be also available in the Testlab as a plugin.
We have done some groundwork on DHT stress testing this quarter, but we need to go further on it, as well as go over the all libp2p subsystems. With a testlab available, one of the most important information that we want to infer is the performance of the One interesting process that we could take advantage from, would be to have the benchmarks for each libp2p release. This way, we should work on keeping / improving performance with each release, guaranteeing that we do not introduce performance problems in newer releases. Libp2p is seen as the go to p2p networking stack
Revamping APIs in the context of #266 will allow us to provide a more modern and ergonomic API for developers, as well as to improve code readability and maintanability. Moreover, we will be able to remove some dependencies of that we currently have, decreasing the bundle size of
We started working on this in 2018 Q4, with the main modules of libp2p, but now we should target the all JS modules of libp2p, as each one of this modules may be used by itself. Partner use cases
Context: agoric-labs/PlaygroundVat#8 OverviewThis list is a subset of the things that I believe to be important for the next steps of The majority of the work described in the |
Based on the 2019 roadmap and community needs, here's a list of what I think are the most important items to tackle in Q1. Q1 Objectives✨Connectivity MagicRendezvous protocolGetting the rendezvous protocol working in go and js would be a huge win. Being able to do discovery of specific node/applications types would greatly improve the networks ability to intelligently find peers. In some of the js DApps, pubsub is being used to find peers that are interested in the same topic. Having the rendezvous protocol would allow peers to find one another much more efficiently. This would also enable nodes to find and register as certain node types, such as circuit relays. References: Connection Manager Dial BackoffAs mentioned in https://github.com/libp2p/js-libp2p-connection-manager/issues/15, js-libp2p doesn't handle any dial backoff to peers. This can result in dial attempts being spammed to a given node. Currently it's up to each implementation of libp2p to handle this at the application level (reference: See Agoric "Thundering Herd" issue). This could help prevent a large number of unnecessary or ineffective dials on the network. References: 🚗 Nat TraversalNat Traversal is a request we see come up pretty regularly. Often users are asking for options when using ec2 instances. I think it would be beneficial to finish up the initial implementation of the nat manager, without the dialme protocol, and create a working example of deploying a libp2p node on ec2. An example running behind an Elastic IP would be a huge help for developers. Secondarily, I think the dialme protocol would be a great improvement for connectivity of nodes. Allowing for nodes with public addresses to tell other nodes connected over relays, like browser nodes, to dial them directly at one of their public addresses could greatly improve performance of the whole network. Circuit Relay nodes could potentially see a large reduction in long term connections. References:
⏩ Improved Performancemultistream 2.0Efficient connection handshaking is a critical part of making libp2p highly performant. As our list of protocols grow, the ping pong of multistream 1.0 will become increasingly inefficient. Moving to multistream 2.0 should help us improve connection latency and reduce round trips needed for handshaking. References: GossipsubScalability is a big goal of IPFS and libp2p for 2019. Gossipsub over Floodsub is a good step in improving our ability to scale. As this is already implemented in go, we should get that done in js. ⛰ Improved Debuggability and Stabilitygo and js interop testingAs libp2p continues to move towards spec driven development, it's going to be important to have a place for the various implementations to validate their interoperability against the spec. The interop repo has been mostly untouched. With the creation of the go and js daemons, we'll be in a great place to make significant additions to our interop testing. It would be great to get to a point where we are doing nightly runs of the interop tests with the latest dependencies to ensure that we catch any issues early and often. References: Testbed is scaled to 50000 nodesThis is a continuation from Q4 2018. We're getting closer to creating our libp2p clusters and need to be able to scale them to 50k nodes and beyond. This is going to be critical for the IPFS 2019 goal of millions of nodes. Benchmark testingAs we work on scaling libp2p with the testbed, it's going to be increasingly important to run regular benchmark tests to determine where our weaknesses are and ensure that we are continuing to improve performance. 🥇 Libp2p is the go to network stack(+1 from @vasco-santos's list) Revamped API and improved development experienceUsage examples and proper documentation exist for all the modules of libp2p |
@vasco-santos I will get these itemized and into the readme so we can better discuss them. |
I reworded a few things and the Partner Use Case: TCP Hole Punching has been incorporated into the Nat Traversal item. |
OKR.md
Outdated
* Gossipsub interops with go | ||
* Rendezvous Protocol is implemented | ||
* Connection manager supports dial backoff | ||
* QUIC transport in js |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we'll be able to get the transport completed, but I think we should work to support the QUIC implementation in JS. Whether that's via contributing or testing via early adoption. Concurrently developing this while development continues could be a feasible approach, but it will likely continue into Q2.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Considering that there some discussions around implementing QUIC as a native node module and all our different front lines, I agree that QUIC should be one of the OKRs that should fall to Q2.
OKR.md
Outdated
* Improve DHT scalability | ||
* NAT manager core functionality is implemented (upnp, pmp, pcp, hole punching) | ||
### Improve Debuggability and Stability | ||
* go and js are interoperable |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should define what we want to have tested. I don't think having "full" interop testing is going to be feasible in Q1, but I think we can at least tackle the core components and figure out our process for adding interop tests for new things, like the Rendezvous Protocol.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agree! DO you have a list suggestion?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* go and js are interoperable | |
* go and js are interoperable | |
* The dht has a full, passing suite of interop tests | |
* Circuit Relay has a full, passing suite of interop tests | |
* TCP and Websocket transports have full, passing suites of interop tests over SECIO and mplex |
Here are my suggestions. We additionally have gossipsub, but it's covered by it's own OKR. I think floodsub is a nice to have, but with our current OKR list I think these are the higher priorities.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This list seems really awesome! 🚀
I agree that we probably should drop QUIC
for the reason that I left in the comment. Other than that, we have a really ambitious OKR Planning, but if we work together with the go-libp2p
team in the Improve Debuggability and Stability
section, I think we can have a boost
OKR.md
Outdated
### Improved Performance | ||
* multistream 2.0 is implemented | ||
* DHT has stream support for searches | ||
* Improve DHT scalability |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Co-Authored-By: jacobheun <jacobheun@gmail.com>
I've removed the QUIC transport since we will push that to Q2. I've also added my thoughts on priorities so we can discuss those. |
OKRs have been moved to the spreadsheet, with assignments, and the reference to that has been added to the OKR readme. |
Replaces [err-code](https://github.com/IndigoUnited/js-err-code/blob/master/index.js) with [CodeError](libp2p/js-libp2p-interfaces#314) Related: [js-libp2p#1269](libp2p#1269) Changes - removes err-code from dependencies - adds @libp2p/interfaces@3.2.0 to dependencies - uses CodeError in place of err-code
## [1.0.12](libp2p/js-libp2p-crypto@v1.0.11...v1.0.12) (2023-02-08) ### Bug Fixes * derive ed25519 public key from private key using node crypto ([libp2p#300](libp2p/js-libp2p-crypto#300)) ([874f820](libp2p/js-libp2p-crypto@874f820)), closes [libp2p#295](libp2p/js-libp2p-crypto#295) ### Trivial Changes * replace err-code with CodeError ([libp2p#293](libp2p/js-libp2p-crypto#293)) ([4398cf6](libp2p/js-libp2p-crypto@4398cf6)), closes [js-libp2p#1269](libp2p#1269)
Q1 is around the corner! OKR presentations are scheduled for the 20th, so we need to get our list together before then.
cc: @mgoelzer