Facebook: https://code.fb.com/open-source/open-sourcing-katran-a-scala...
Google: https://cloudplatform.googleblog.com/2016/03/Google-shares-s...
The design of all 3 is very similar.
Facebook: https://code.fb.com/open-source/open-sourcing-katran-a-scala...
Google: https://cloudplatform.googleblog.com/2016/03/Google-shares-s...
The design of all 3 is very similar.
In terms of technology, Katran uses XDP and IPIP tunnels, both upstream in the Linux kernel. GLB uses DPDK, which allows processing raw packets in user space, and Geberic UDP encapsulation + a custom iptables module. Neither DPDK nor the module are upstream.
There are architectural differences as well. Katran is much closer to a classic load balancer, and uses connection tracking at the load balancer to know where to send packets for established flows. GLB has no per-flow state at the load balancer, which gives it the very nice property that load balancers can be added and removed from an ECMP group without disturbing existing connections. There is an academic paper about a system called Beamer, which most likely influenced GLB (or maybe the other way round?). It's a good read, and relatively short.
Finally, Katran is really a C++ library you could build a load balancer on, while GLB comes with batteries included.
I think GLB looks nice, hats off to GitHub for open sourcing it.
Kind of, from katran post:
> Each L4LB also stores the backend choice for each 5-tuple as a lookup table to avoid duplicate computation of the hash on future packets. This state is a pure optimization and is not necessary for correctness
> ..
> Katran uses an extended version of the Maglev hash to select the backend server
> Katran uses an extended version of the Maglev hash to select the backend server. A few features of the extended hash are resilience to backend server failures, more uniform distribution of load, and the ability to set unequal weights for different backend servers.
GLB also does the same thing with caching:
> The hashing to choose the primary/secondary server is done once, up front, and is stored in a lookup table, and so doesn’t need to be recalculated on a per-flow or per-packet basis.
GLB has that primary/secondary thing which seems to be how it better handles backends coming and going.
GLB is more complex, but will maintain connections in more circumstances.
Keep up the great work!
https://atscaleconference.com/videos/networking-scale-2018-l...