# Delix
[![build status](https://secure.travis-ci.org/simia-tech/rust-delix.png)](http://travis-ci.org/simia-tech/rust-delix)
The idea behind delix is the create an overlay network that connects microservices. It uses semantic addressing
and takes care of encryption, fail-over and load balancing.
## Installation
cargo install delix
## Example
Run three delix nodes in three different terminals.
delix -c example/one.conf.toml
delix -c example/two.conf.toml
delix -c example/three.conf.toml
The node `one` opens an interface at `127.0.0.1:4200` which take http requests. All nodes have the service `slashdot`
configured. In order to request a response from the service run...
curl -H 'Host: slashdot.org' -H 'X-Delix-Service: slashdot' http://127.0.0.1:4200
Let's dive into the config file of node one.
```toml
[log]
type = "console"
level = "debug"
[metric]
type = "terminal"
refresh_interval_ms = 100
[cipher]
type = "symmetric"
key = "000102030405060708090a0b0c0d0e0f"
[discovery]
type = "constant"
addresses = [ ]
[transport]
type = "direct"
local_address = "localhost:4001"
request_timeout_ms = 5000
balancer = { type = "dynamic_round_robin" }
[[relay]]
type = "http"
address = "localhost:4200"
header_field = "X-Delix-Service"
[[relay.service]]
name = "slashdot"
address = "slashdot.org:80"
```
The `discovery` section contains the field `addresses` which holds a list of IPs (with ports) that is used during
the node's boot up to search for other nodes. Since node `one` is the first, the list is empty here.
In the `cipher` section is the `key` defined for the encryption and authentication of the traffic between nodes.
The key can be 16, 24 or 32 bytes (hex encoded) long and will issue a AES-{128, 192 or 256}-GCM encryption. All nodes
in the network must share the same key.
In order to bind a node to an interface, `local_address` in the `transport` section must be set. If the interface
differs from the interface visible to other nodes, the field `public_address` can be set.
The `relay` section at the end, defines here a `http` relay that opens a port at `address` that takes HTTP
requests. The `header_field` in the request tells delix to which service the request should be routed to. The services
are defined in the `relay.service` section and define a name and an address which defines the endpoint where the
request is send. In this example it's the slashdot server.
## License
The code is licensed under [Apache 2.0](http://www.apache.org/licenses).