Most existing tools have a static vision of production: a service is installed once on a long lived server, updated from time to time, with configuration rarely changing.
There's now a shift in infrastructure to short lived virtual machines and hundreds of new deployments per day, and the usual tools reach their limits.
How do we reconcile a dynamic environment with availability guarantees? How can we get "zero downtime" deployments for critical services?
SŌZU is a HTTP reverse proxy built in Rust, that can handle fine grained configuration changes at runtime without reloads, and designed to never ever stop.
SŌZU receives and handles configuration changes at runtime and updates its internal configuration without restarts. You can update the configuration multiple times per second, and it will take care of lingering connections. In case of binary upgrades, the process takes care of changing workers without losing connections, either in an automated way, or manually, where you keep full control.
Configuration changes come through a Unix socket, with a text based protocol. That means you can write your own tools to drive SŌZU, in whichever language you want. The main access libaries are in Rust, but people have written tools in Go, Python, bash...
SŌZU works with fixed ressources and connections limits, to avoid common issues like OOM kills or increased latency with a high number of connections. It is written in Rust to provide safety from memory vulnerabilities, reliability through a lack of garbage collection, and performance with an optimized event loop.
You can Install SŌZU via Cargo Package Manager. If you don't have it, you can install it via rustup.
Then, go to your terminal and type :
$ cargo install sozu