My favorites | Sign in
Project Home Issues Source
Project Information
Members

moxi - memcached + integrated proxy

(pronunciation: rhymes with foxy)

Source Code

Features

  • Open-source, same BSD license as memcached.
  • Written in C.
  • Based on the latest memcached server code for its high-performance connection and protocol handling.
  • Uses the libmemcached for its rich hashing features (consistent hashing, etc).
  • Uses libevent for both upstream (client) and downstream connection handling.
  • Test suites
    • moxi aims to pass all the relevant memcached server compatibility tests.
    • moxi has many new test cases to exercise proxy-only features and topologies.
  • Protocol support
    • memcached text protocol, for upstream and downstream communication
    • memcached binary protocol, for downstream communication
    • later:
      • binary support for upstream communication
      • mixing and matching protocols (eg, some downstream servers are text, some are binary).
  • Optimizations
    • Multi-get Escalation and Protocol Pipelining - de-duplicates requests for popular keys, based on ideas from Dustin Sallings' spymemcached Java client library for memcached. See: http://code.google.com/p/spymemcached/wiki/Optimizations
    • Minimal locks - our aspiration is to have no new locks as part of the "main loop" of protocol handling.
    • Timeouts - set maximum time for operations. eg, "no downstream memcached operation should take more than X ms."
  • Lots of statistics tracked.
    • Statistics are tracked without extra locks, independently on each thread, optimized for the 99% case of being a good proxy. A once-in-awhile request for proxy statistics does an internal scatter-gather to aggregate statistics.
  • Live reconfiguration
    • Separate management channel (in the works) to allow dynamic server pool reconfigurations.
  • Simplified deployment
    • Assuming you run moxi on your web/app server boxes, your development, staging and production configurations gets easy: always point your memcached clients to "localhost:11211" (or whatever port you run moxi on).
  • Features inherited from memcached
    • moxi still has all the same code of memcached, and passes all the tests that memcached passes, so you can use moxi as a memcached server if you wish.
    • Multi-platform
    • Multi-threaded
    • Daemonizable
    • Run as another user
    • Bindable to IP interface, default is INADDR_ANY
    • PID file
    • etc
Powered by Google Project Hosting