This paragraph is just wrong: "Another explanation is that the Internet has unnecessarily coupled the transport protocol with the rest of the RPC framework. Conflating the two naturally follows from the purpose-built examples I just gave: SMTP is bundled with MIME; SNMP is bundled with MIB; and HTTP is bundled with HTML. " I think at this point he's suffering from what old-timers used to call recto-cranial inversion.
It's TCP vs. RPC All over Again
21–30 of 116 posts
Re: It's TCP vs. RPC All over Again
#22Re: It's TCP vs. RPC All over Again
#23There are some things that current RPC frameworks simply cannot touch. I've been up to my elbows in TCP lately. Working on a low-latency, select-based socket server for streaming gaming applications. Each instance runs on 1 thread so there is absolutely no context switching delay when servicing player requests. The TCP streams are responsible for moving player inputs and game state as quickly as possible between syst…
Re: It's TCP vs. RPC All over Again
#24There are some things that current RPC frameworks simply cannot touch. I've been up to my elbows in TCP lately. Working on a low-latency, select-based socket server for streaming gaming applications. Each instance runs on 1 thread so there is absolutely no context switching delay when servicing player requests. The TCP streams are responsible for moving player inputs and game state as quickly as possible between syst…
Do you mean the `select` call? libuv and friends can offer higher throughput than `select`.
Ah I see libuv is a cross platform lib. I’d probably use that for production code, but it’s still really valuable to work with the low level API enough to understand it.
Re: It's TCP vs. RPC All over Again
#25There are some things that current RPC frameworks simply cannot touch. I've been up to my elbows in TCP lately. Working on a low-latency, select-based socket server for streaming gaming applications. Each instance runs on 1 thread so there is absolutely no context switching delay when servicing player requests. The TCP streams are responsible for moving player inputs and game state as quickly as possible between syst…
Do you mean the `select` call? libuv and friends can offer higher throughput than `select`.
https://learn.microsoft.com/en-us/dotnet/api/system.net.sock...
Edit: This is the source: https://source.dot.net/#System.Net.Sockets/System/Net/Socket...
Re: It's TCP vs. RPC All over Again
#26There are some things that current RPC frameworks simply cannot touch. I've been up to my elbows in TCP lately. Working on a low-latency, select-based socket server for streaming gaming applications. Each instance runs on 1 thread so there is absolutely no context switching delay when servicing player requests. The TCP streams are responsible for moving player inputs and game state as quickly as possible between syst…
A well written C mux is absurdly performant. I was handling thousands of requests per second with efficient hand rolled binary protocols in the early oughts when I could make UDP work, which I could since it was an intra datacenter app and a super lightweight exponential backoff retry scheme on the client side was entirely adequate. “Modern” network programming is hilariously inefficient. I think games are the only m…
Re: It's TCP vs. RPC All over Again
#27I for one think we should finally replace DNS with JPEG. That makes exactly as much sense as this article.
Re: It's TCP vs. RPC All over Again
#28There are some things that current RPC frameworks simply cannot touch. I've been up to my elbows in TCP lately. Working on a low-latency, select-based socket server for streaming gaming applications. Each instance runs on 1 thread so there is absolutely no context switching delay when servicing player requests. The TCP streams are responsible for moving player inputs and game state as quickly as possible between syst…
I've read that kerberos NFS encryption has performance problems that stunnel solves.
I've never sunk down to ONC RPC, but it does feel like it's a hack compared to QUIC.
Re: It's TCP vs. RPC All over Again
#29https://www.youtube.com/watch?v=o2HBHckrdQc
Spoiler: Ousterhout is right, and the data shows he is right. Maybe not everyone knows it yet, or it's the kind of "right" that not everyone will ever get to (and we'll settle for "good enough" for much longer), but he is almost certainly right.
Not to disparage the poster of this article of course -- I always love a good hot take or contrarian piece, but if you can't come with the same amount of data to support your thesis...
Homa is probably dismissable on UX grounds (are people really going to switch to it?), but it's clear that long hard thinking has gone into the case for Homa (and it's implementation).
Re: It's TCP vs. RPC All over Again
#30Transport level:
* Sun RPC [1]. QNX still uses this. It can run over UDP or over raw Ethernet. It just transfers an array of bytes and gets an array of bytes back - marshalling is a higher level problem. It handles messages bigger than one packet, and retransmission. It's simple and performance is good, but there is no security.
* Stream Control Transmission Protocol. Telcos still use this. It's how Signalling System 7 is sent over IP.
Although many implementations exist for both, they've never been popular outside their niches.
Marshalling level:
* CORBA - you define interfaces in a special language and compile them. Data is not self-describing.
* SOAP, from the XML era.
* Google Protocol Buffers - another system where you compile definitions.
* HTTP/JSON - where we are now.
Plus a lot of Microsoft-specific stuff.
Either you have a system where both ends have to exactly agree on format, you have a verbose format with unneeded description data in every message, or you have a very complicated negotiation at connection time. This leads to much disagreement.