September 20, 2009

power in the protocol

As I've said in other venues, I believe a lot of value in the memcached ecosystem/community stems from well defined client APIs and a well defined over-the-network protocol.  The protocol just makes sense for a large class of things you may need from (as NorthScale's Dustin Sallings calls it) a sloppy LRU distributed hashmap.

There are clients for every platform and language I can think of, and implementing the basics of the protocol for another client are so straightforward, there are a lot of partial clients out there.  On the server side, the same is true.  Here in the last few years, we've seen quite a number of things pop up which speak either all, or a subset of, the memcached protocol.  In some cases, these things are pretty explicit about the fact they don't speak the full protocol and in other cases there may just be parts which weren't considered.  What was needed was a quick way to determine if something which speaks memcached protocol supported all of the operations and options.  It was possible to do this by grabbing spymemcached or libmemcached and running the tests, but those felt more like tests to validate spymemcached and libmemcached functionality... you'd have to know a lot about them to dig into the weeds to find out based on the failures what was due to protocol support not being there. I had suggested something like this at the Drizzle Developer days in Seattle not so long ago.  In a later conversation between Brian Aker and I, I made the suggestion that memcached is something that pretty much any developer could implement the basics of in hours or days.  That being the case, it'd be really useful to have a simple tool to point at something to see to what degree it's protocol compliant.  He agreed, and then between he and Trond, and separately between Trond and I we came up with memcapable.  Trond went and implemented the first version.  My contributions were the idea and some discussion with Trond, plus the name itself (which is a great name, if I do say so myself). memcapable has just been merged into the trunk of libmemcached as one of the utilties.  This means it should be in the next release. NorthScale's own Patrick Galbraith (a.k.a. CaptTofu) recently picked up Tokyo Tyrant to put it through it's paces .  This is exactly the kind of thing that memcapable should help memcached users with.  Given a new thing implementing memcached protocol, can you point memcapable at it and quickly find out which portion of the protocol it supports!

Comments