Skip to content
forked from yyyar/gobetween

☁️ Modern & minimalistic load balancer for the Сloud era

License

Notifications You must be signed in to change notification settings

htoooth/gobetween

This branch is 158 commits behind yyyar/gobetween:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2f0ecb3 · Apr 7, 2017
Jun 7, 2016
Mar 31, 2017
Jun 7, 2016
Nov 9, 2016
Mar 31, 2017
Mar 20, 2017
Jun 7, 2016
Mar 6, 2017
Apr 7, 2017
Apr 7, 2017
Jun 19, 2016
Jun 7, 2016
Jun 7, 2016
Apr 7, 2017
Apr 7, 2017
Apr 7, 2017
Jun 7, 2016

Repository files navigation

gobetween

Tag Build Status Go Report Card Docs Docker License Bountysource

gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era.

Current status: Under active development. Currently in use in several highy loaded production environments.

Features

  • Fast L4 Load Balancing

  • 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 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
    • Consul - query Consul Services API for 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 (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
    • 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 healtchecks)

  • Single binary distribution

Architecture

gobetween

Usage

Hacking

Debug and Test

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:

  • $ gobetween -c gobetween.toml

  • $ curl http://localhost:3000

Performance

It's Fast! See Performance Testing

The Name

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 😄

License

MIT. See LICENSE file for more details.

Authors & Contributors

Logo

Logo by Max Demchenko

About

☁️ Modern & minimalistic load balancer for the Сloud era

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 96.4%
  • Makefile 1.8%
  • Shell 1.8%