gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era.
-
https://github.com/yyyar/gobetween
Current status: Under active development. Currently in use in several highly loaded production environments.
Written in Go and some interesting features, like health checks and more.
Fast L4 Load Balancing TCP - with optional The PROXY Protocol support TLS - TLS Termination + ACME & TLS Proxy UDP - with optional virtual sessions and transparent mode Clear & Flexible Configuration with TOML or JSON File - read configuration from the file URL - query URL by HTTP and get configuration from the response body Consul - query Consul key-value storage API for configuration Management REST API System Information - general server info Configuration - dump current config Servers - list, create & delete Stats & Metrics - for servers and backends including rx/tx, status, active connections & etc. Discovery Static - hardcode backends list in the config file Docker - query backends from Docker / Swarm API filtered by label Exec - execute an arbitrary program and get backends from its stdout JSON - query arbitrary http url and pick backends from response json (of any structure) Plaintext - query arbitrary http and parse backends from response text with customized regexp SRV - query DNS server and get backends from SRV records Consul - query Consul Services API for backends LXD - query backends from LXD Healthchecks Ping - simple TCP ping healthcheck Exec - execute arbitrary program passing host & port as options, and read healthcheck status from the stdout Probe - send specific bytes to backend (udp, tcp or tls) and expect a correct answer (bytes or regexp) Balancing Strategies (with SNI support) Weight - select backend from pool based relative weights of backends Roundrobin - simple elect backend from pool in circular order Iphash - route client to the same backend based on client ip hash Iphash1 - same as iphash but backend removal consistent (clients remain connecting to the same backend, even if some other backends down) Leastconn - select backend with least active connections Leastbandwidth - backends with least bandwidth Integrates seamlessly with Docker and with any custom system (thanks to Exec discovery and healthchecks) Single binary distribution