Skip to content
This repository has been archived by the owner on Sep 17, 2020. It is now read-only.

nuclearfurnace/synchrotron

Repository files navigation

synchrotron

conduct-badge travis-badge release-badge license-badge

Synchrotron is a caching layer load balancer, in the spirit of Twemproxy and mcrouter.

archived!

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 futures@0.1 basis of the project, it may be less relevant in the async/await world than I think.

Why another one?

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.

What's done?

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

License

Licensed under the MIT license (LICENSE or http://opensource.org/licenses/MIT)