Netflix have published their "Chaos Monkey" code on Github; ASL Licensed. I have already filed my first issue, having looked through the code -an issue that is already marked as fixed.
Netflix bring to the world the original Chaos Monkey -tested against production services.
Those of us playing with failures, reliability and availability in the Hadoop world also need something that can generate failures, though for testing the needs are slightly different:
- Failures triggered somewhat repeatedly.
- Be more aggressive.
- Support more back ends than Amazon -desktop, physical, private IaaS infrastructures.
#3? Needs more back ends. The nice thing here is that there's very little you need to implement when all you are doing is talking to an Infrastructure Service to kill machines; the CloudClient interface has one method:
void terminateInstance(String instanceId);That needs to be aided with something to produce a list of instances, and of course there's the per-infrastructure configuration of URLs and authentication.
My colleague Enis has been doing something for this for HBase testing.; independently I've done something in groovy for my availability work, draft package, org.apache.chaos. I've done three back ends :
- SSH in to a machine and kill a process by pid file.
- Pop up a dialog telling the user to kill a machine (not so daft, good for semi-automated testing).
- Issue virtualbox commands to kill a VM.
Then there's the other possibilities: VMWare, fencing devices on the LAN, ssh in and issue "if up/down" commands (though note that some infrastructures, such as vSphere, recognise that explicit option and take things off HA monitoring). All relatively straightforward.
Which means: we can use the Chaos Monkey as a foundation for testing how distributed systems, especially the Hadoop stack components, react to machine failover -across a broad set of virtual and physical infrastructures.
That I see the appeal of.
Because everyone needs a Chaos Monkey.
[update 13:24 PST, fixed first name, thank you Vanessa Alvarez!]