Synchrotron is a caching layer load balancer, in the spirit of Twemproxy and mcrouter.
After going another direction at work, this project is now archived! My hope is that some of the design can act as an inspiration, although given the heavy [email protected]
basis of the project, it may be less relevant in the async/await world than I think.
There's a few things here:
- I wanted to write a real piece of software in Rust, not just toy programs!
- Twemproxy is basically deprecated
- mcrouter is advanced but only supports memcached
Essentially, this project aims to be a mix of Twemproxy and mcrouter: memcached and Redis support with advanced features like traffic shadowing, pool warm up, and online reconfiguration... while being written in Rust: a systems programming language whose community, IMO, is second to none.
Here is a non-exhaustive checklist of what's done and what is a serious target:
- Redis support
- memcached support
- Redis pipelining support
- basic connection multiplexing (M client conns over N server conns; configurable server connection limit)
- advanced connection multiplexing (server backoff after failure, timeout on backend operations, etc)
- basic routing strategies (single pool, traffic shadowing)*
- advanced routing strategies (warm up [cold before warm], prefix routing, fallthrough, majority, fastest response)
- distribution (modulo vs ketama) and hashing (md5 vs sha vs fnv1a) support*
- online reconfiguration
- metrics collection*
- TLS support
-
- while the scaffolding is present, all options may not be i.e. not all hash methods may be implemented, etc
Licensed under the MIT license (LICENSE or http://opensource.org/licenses/MIT)