gobetween - modern & minimalistic proxy server for the ☁️ Cloud era.
Current status: In development. Incompatible changes may occur until v1.0.0. gobetween is still not production ready, but we already successfully tried it in several highy loaded production deployments.
-
TCP Proxy (udp and more will come later)
-
Clear and beautiful TOML config file.
-
Discovery
- Static - hardcode backends in config file
- Docker - query backends from Docker / Swarm API filtered by label
- Exec - execte arbitrary program and read backends from it's output
- JSON - make http query and parse backends from response json
- Plaintext - make http query and parse backends from response text with regexps
- SRV - query SRV server for a backends
-
Healthchecks
- Ping - simple TCP ping healtcheck
- Exec - execute external program passing host & port, and read healtcheck status from the stdout
-
Balancing
- Iphash
- Leastconn
- Roundrobin
- Weight
-
Integrates seamlessly with Docker (thanks to docker discovery) and with any custom system (thanks to exec discovery and healtchecks)!
- 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 test 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 test:
$ curl http://localhost:3000
To increase performance run with:
GOMAXPROCS=`nproc` gobetween
See Performance Testing for performance testing results.
- Yaroslav Pogrebnyak
- Nick Doikov
- Ievgen Ponomarenko
It's play on words: gobetween ("go between"). ALso it's written in Go, and it's a proxy so it's between 2 parties :-)
MIT. See LICENSE file for more details.
Logo by Max Demchenko