gobetween - modern & minimalistic proxy server for the ☁️ Cloud era.
Current status: Under active development. Currently in use in several highy loaded production environments.
-
TCP Load Balancing
-
Clear and beautiful TOML config file.
-
Integrates seamlessly with Docker and with any custom system (thanks to Exec discovery and healtchecks)
-
Single binary distribution (only one gobetween binary + TOML config file)
-
Backends Discovery
- Static - hardcode backends list in config file
- Docker - query backends from Docker / Swarm API filtered by label
- Exec - execte arbitrary program and get backends from it's 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
-
Backends Healthchecks
- Ping - simple TCP ping healtcheck
- Exec - execute arbitrary program passing host & port as options, and read healtcheck status from the stdout
-
Balancing Strategies
- Iphash
- Leastconn
- Roundrobin
- Weight
- Download and Install
- Consider Configuration manual and config file
- Install Go 1.6+ https://golang.org/
$ git clone [email protected]:yyyar/gobetween.git
$ make deps
$ make run
Run several web servers for tests in different terminals:
$ python -m SimpleHTTPServer 8000
$ python -m SimpleHTTPServer 8001
Put localhost:8000
and localhost:8001
to static_list of static discovery in config file, then try it:
$ curl http://localhost:3000
See Performance Testing.
It's play on words: gobetween ("go between"). Also, it's written in Go, and it's a proxy so it's something that stays between 2 parties 😄
MIT. See LICENSE file for more details.
- Yaroslav Pogrebnyak
- Nick Doikov
- Ievgen Ponomarenko
Logo by Max Demchenko