🎲 Dice is an experimental load balancer designed for non-microservice, static infrastructures with focus on simplicity, operability and high flexibility.
Project status: In active development.
- Different load balancing methods for each application
- Periodic health checks for deployed instances
- Service and server updates without downtime
- Configuration changes without restart
- Nodes with less computing resources receive less requests
- Attachment and detachment of instances on the fly
- Deployments managed by logical and physical affiliation
- Dice is passive and explicit: Make services available for load balancing yourself
Our infrastructure is quite simple: We've got two servers, main-server and another-server. Servers, virtual machines etc. are known to Dice as nodes. Also, we have the services A, B and C. These services might be web applications, REST APIs or authentication services for example.
Each service A, B and C has an instance deployed to main-server. An instance is a concrete executable instance of a service, like a PHP application running on Apache or a standalone Go binary. Additionally, there are instances of A and B deployed to another-server because they're under heavy load.
To keep things short, we'll just create one node, one service and one instance. After starting Dice, we can register our main-server:
$ dice node create --attach --weight=2 main-serverRegistering nodes will help Dice choosing an appropriate service instance later. --weight=2 indicates that the server has double computing capacities.
After that, we have to tell Dice about our services – let's just create service A here.
$ dice service create --urls=example.com --enable ABy using --url=example.com, we specify a public URL that the service is associated with. We can add or remove these URLs later as well. When a request for example.com hits Dice, it will forward the request to an instance of service A.
Registering a service instance is fairly easy:
$ dice instance create --name=first-instance A main-server 172.21.21.1:8080This tells Dice to register an instance of service A that has been deployed to main-server and is available at 172.21.21.1:8080.
Attaching the created instance to Dice will make it available for load balancing:
$ dice instance attach first-instanceIncoming requests for example.com will be balanced among instances of A. In this case, first-instance will be used each time.
Download the latest release of Dice [...]
[...]


