Planning for NNG 2.0 #1781
Replies: 14 comments 3 replies
-
Fantastic that you have such an ambitious roadmap in mind! For 12, as discussed previously, it would be useful to be able to wait until a send is complete (not just accepted by the system socket), such that it is safe to reap the socket. For 22 (I am not sure if this belongs here or separately), it would be useful to have another req/rep semantic where the req node only sends to a rep node for which no reply is currently outstanding, queuing messages at the req socket as necessary. This implements FIFO scheduling for RPC services within NNG itself. Both of the above would be high impact, allowing simplification of existing solutions. |
Beta Was this translation helpful? Give feedback.
-
The negotiated close is exactly what 12 is about -- it will solve the problem of short lived programs exiting before the other side gets their message. The idea of using actual outstanding queries for REQ scheduling is interesting (instead of TCP back pressure). The concerns I have about this is that it won't work well across devices, and won't accommodate situations where the cost of the job is not equivalent, and some servers can do a lot of parallelization. Perhaps there could be a way for the servers to provide a response to the submission indicating their ability to accept new work (based on number of contexts they have or something like that?) It will be hard to make that work sensibly in the face of many clients though. I need to think on this. |
Beta Was this translation helpful? Give feedback.
-
You're right, I was thinking only of the simplest case. I had come across this very early issue #10 Perhaps a solution could be to let rep 'workers' request a pipe e.g. when they have at least one outstanding recv. It is essentially allowing something other than round robin - which is a nice load-balancing heuristic for some types of request, but not particularly suitable for very heterogeneous workloads involving very expensive computations. |
Beta Was this translation helpful? Give feedback.
-
Adding 26: Option setting/getting using untyped option functions will be deprecated or removed. Essentially, if your option is an integer, then you will have to use the xxx_set_int/xxx_get_int forms of these functions. The untyped options that deal with arbitrary blobs of data are just too brittle. (They were modeled on the UNIX setsockopt() call...) |
Beta Was this translation helpful? Give feedback.
-
A bit more about 3: Dropping Windows named pipes will be good, but we probably need to allow for a transition. This will probably involve adding AF_UNIX to NNG 1.x (and also to mangos) so that they can migrate without having to resort to TCP. |
Beta Was this translation helpful? Give feedback.
-
A corollary -- there will be at least one more minor release of NNG 1.x to add AF_UNIX support for Windows. :-) |
Beta Was this translation helpful? Give feedback.
-
We have already develoed a QUIC transport layer with msquic. Hopefully 2.0 does not break the classical layering so that our changes are sustained. |
Beta Was this translation helpful? Give feedback.
-
Also just to have this on the record. Hopefully can be a 1.x item. req/rep when |
Beta Was this translation helpful? Give feedback.
-
Just a few thought, most of the are incredibly minor.
This will be slightly inconvenient for me, since the CMake integration into
mdBook is very popular in the Rust ecosystem. It might naturally support AsciiDoctor, though I'm not sure.
I assume these will still be covered by SemVer? I would love to have access to these but if they aren't stable then I don't know how much use I can make of them without having to have a Rust wrapper for every single version of NNG.
These would be somewhere between very and incredibly useful, depending on the exact API. Being able to hook NNG into Tokio (or vice versa) would be awesome.
This, and the other potential changes to the wire protocols, are very interesting and I have a bunch of thoughts on them... If I can remember where I put them. Over the last three years my usage of NNG has been for small, uncomplicated utilities so I haven't had to think about the wire protocols much. Before that, I was making heavy use of NNG in a relatively complicated system and had a bunch of opinions that I'm hoping I wrote down somewhere. |
Beta Was this translation helpful? Give feedback.
-
Meson support will not prevent use of the project in CMake friendly projects -- a CMakeLists file is exported by it. So only maintainers of NNG will need to interact with meson. Everyone else will either be able to use CMake like they always did, or can adopt meson if that's more to their liking. As far as docs, I intend to stick with Asciidoc for now. Markdown simply isn't rich enough. The main changes I have in mind here are in the structural organization of the reference manual - presenting topics that more naturally match expected use, and eliminating the legacy UNIX man(1) sections. This will make presentation more normal for people not coming from UNIX man page thinking, but will make it harder to integrate the documentation in a form accessible via "man". (In fact, I plan to stop supporting the conversion of the content to man format altogether. It's more trouble to maintain than it's worth.) As far as the unsafe APIs. SemVer will apply to the API, but NOT THE ABI. Meaning, use of unsafe APIs will mean that your application will not necessarily be safe to use across library versions. Indeed, now that I think about this, I might want to only expose these when using a static library build, because they would be inherently unsafe DLLs because I might break those. Or maybe I'll commit to bumping a version if I break that... I need to think on this some more.) Better support for user supplied threads is definitely going to happen. Thanks for your thoughts. |
Beta Was this translation helpful? Give feedback.
-
Actually I looked a bit at mdBook - it looks quite nice, but it is missing some things that I would need to be able to adopt it:
|
Beta Was this translation helpful? Give feedback.
-
#1473 would be a nice addition to the wishlist |
Beta Was this translation helpful? Give feedback.
-
As a heads up, the |
Beta Was this translation helpful? Give feedback.
-
HTTP/2 with support for SSE would be nice. |
Beta Was this translation helpful? Give feedback.
-
This issue is meant to start the conversation about plans for NNG 2.0.
2.0 is a major, and hence "breaking", release, so applications should expect to need some modification, although we'll try not to make it too painful.
Here are some key thoughts behind the plans -- none of this is committed, it's just thinking at this point!
This all looks like a monster amount of effort. Much of it is relatively modest, but some of it cannot be begun without committing to breaking some compatibility. I expect that some of this will be done either in mangos first, or in combination with mangos.
Beta Was this translation helpful? Give feedback.
All reactions