Written by Envoy proxy maintainers and contributors, covering load balancing, threading, service mesh and security in the Envoy proxy.
Commenters call it a great introduction to the problems Envoy solves and cite Matt Klein's posts on data plane versus control plane and load balancing.
To clarify, are you saying that:
1. There are already good reverse proxy libraries in C#?
2. There are already good reverse proxy libraries in other languages?
3. There are already good reverse proxy applications?
If it's #1, then yeah, it would be nice if the ReadMe explained why YARP is different. To be fair, they're at least consolidating a bunch of efforts within Microsoft:
> We found a bunch of internal teams at Microsoft who were either building a reverse proxy for their service or had been asking about APIs and tech for building one, so we decided to get them all together to work on a common solution, this project.
If it's #2, then what do C# developers do? Having to build your proxy in another language isn't a deal-breaker, but there are advantages to keeping your project/team/company on a single language.
(And Microsoft does contribute to Envoy [1][2].)
If it's #3, that only works up to a point. My old team used Nginx, which was perfect in the beginning. But over time we needed to customize things in ways that were difficult to do within Nginx's architecture (either in Lua or in C), leading to hackier and hackier solutions. Using a proxy library to build exactly what you need can make things much simpler.
[1] https://blog.envoyproxy.io/general-availability-of-envoy-on-windows-267e4544994a
[2] https://techcrunch.com/2020/08/05/microsoft-launches-open-service-mesh/
https://gnet.host/docs/about/overview/ - This is a very similar threading model to envoy [0] and lmax disruptor [1]. Unfortunately IIUC writing this in Go still prevents the spin-locked acceptor thread from achieving the kind of performance you could get in a non-GC language, unless you chose to disable GC, so I'd guess Envoy is still faster.
https://gnet.host/docs/quickstart/ it's nice that you can use this simply though. Envoy is kind of tricky to setup with custom filters, so most of the time it's just a standalone binary.
[0] https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310
[1] https://lmax-exchange.github.io/disruptor/#_what_is_the_disruptor
This is a great introduction to a lot of the problems Envoy is trying to solve. If you're interested in learning more, the rest of the Envoy blog [0] is great. Coincidentally, I also spent most of last week putting compiling [1] all the posts we could find on Envoy, smart proxies, and modern load balancing.
[0] https://blog.envoyproxy.io
[1] https://www.turbinelabs.io/resources
It's not ELI5, but the best explanation I've seen comes from Envoy-creator Matt Klein: https://blog.envoyproxy.io/service-mesh-data-plane-vs-control-plane-2774e720f7fc
"Istio is the control plane and Envoy is the data plane"
"Ultimately, the goal of a control plane is to set policy that will eventually be enacted by the data plane."
Without committing to an entire book, perhaps more detail on load-balancing and proxies?
https://blog.envoyproxy.io/introduction-to-modern-network-load-balancing-and-proxying-a57f6ff80236
Good timing since Envoy just became a graduated project at CNCF.io
https://blog.envoyproxy.io/envoy-graduates-a6f71879852e