Responses inline...
But, I don't mind talking about why Iago rocks. :) Here's a few reasons we felt the need to write it:
1) It's not just about supporting a constant rate, but that it even supports expressing load as a rate at all. All of the somewhat programmable load generators I've used express load in terms of threads or concurrent users. This is fine if you're modeling a closed system, where a client issues a request, waits for a response and then issues the next request. This description of a system is not very accurate for any service that's on the Internet, and at a certain level of scale isn't even a great model for most enterprise systems that sit behind a firewall. Unless you have a well-specified queueing system that is in between you and the system whose performance characteristics you care about, and that queue uses a thread pool or some other concurrency-limiting mechanism to dispatch messages / operations, you probably don't have a closed system.
It's also worth pointing out that constant rate is only one of the ways to express load using Iago. You can also express RPS as a function, and one of my roadmap items that will be fairly trivial is to describe load as a sum of functions, so that you can do things like describe the rate per endpoint and then Iago would handle the summation for you. Commercial tools are fairly strong in this area, so I don't necessarily consider this a point of distinction, but open source tools are horrible at it.
Lest I seem too academic about this, I should add that the outcome of trying to model a system as if it's closed when it's really open is that it's substantially more difficult to reason about the results you get from performance tests. So, for instance, it can be very hard to pinpoint whether a throughput change is caused by a change to the system or your load generator, because your load generator is effectively coupled with the system under test. It also means that you have a much harder time testing a system to failure in a way that replicates the real world -- as the system degrades because more concurrent users are hitting it, every thread waits longer for a response, and you end up with very smooth reductions in throughput past some optimum. In fact anyone who's ever watched this happen in the real world can tell you that you hit sharp cliffs in your capacity, past which most of your users will receive no useful response at all. In the real world, your users don't care that you've hit your capacity limit, their requests arrive independent of your ability to service them. Iago is the only system I know of that can model this besides tools like ab that are very hard to customize.
2) Speaking of customization, Iago has a point of view in the load generation game that is very distinctive from everything else I've used. In my experience, you have two different users of load generators -- people who don't consider themselves developers who are probably generally happy with tools like ab and JMeter, and developers who get frustrated with those tools and end up spending an hour writing a for() loop that executes some number of threads hitting their service. Their load "test" is deeply flawed and they know it, but they don't want to spend a ton of time learning some system that expresses requests in terms of a GUI, XML, or something else other than actual code. Iago is aimed at helping that second group, the developers who really just want to be able to write some code and get load. Engineers at Twitter typically need about 30 minutes to go from having no load to having realistic traffic shapes at real scale using Iago.
3) Speaking of real scale, most load generators are kind of pitiful in terms of the amount of load you can actually push with them. Again, a tool like ab is the exception because it's so restricted, but sending 1000 rps is a big deal for many load generators, and with some of them you have to pay a lot of money to do that (*cough* LoadRunner *cough*). Iago is designed using the same technologies we use to scale Twitter, so it's asynchronous, non-blocking, and built on top of the JVM -- a highly-tuned platform that is capable of providing sub millisecond response time in real world conditions. We routinely run load tests that generate well in excess of 100,000 rps, and I've had serious conversations about needing to replay 1,000,000 rps worth of production traffic that I fully expect to be able to achieve with a minor bit of optimization in how requests are generated and handed off to the underlying dispatch mechanism. Keep in mind that there are very few sites that have problems on this scale, and it starts to make sense that we would need to invent something here.
4) Another outcome of the fact that Iago is so programmable is that you can do things like run the tests you would normally run testing for regressions at real scale. One of my teammates took Iago and built a system on top of it that understands the nouns and verbs of Twitter and is able to express actions plus expected results and then run a whole suite of tests at whatever rate makes sense for the environment the test is targeted at. This means that replicating problems which only happen under load becomes very doable, and my personal experience is that this is something people will be really excited about once they understand it.
I'm not sure I understand this question. Are you asking how you can use Iago to test Twitter? If so, you'll find that you can't do this except at very low (uninteresting) traffic levels, due to mechanisms we have in place to prevent denial of service attacks. At Twitter our tests run inside the datacenter, almost never against production systems, so the sorts of limits you have as an external consumer of Twitter's services don't apply.
If you're asking what variety of traffic you can simulate with Iago -- the answer is basically that the sky's the limit in the case where you're a developer able to extend the system. I originally wrote support for HTTP and Thrift, the other protocols that Iago supports have been contributed by people here at Twitter that needed to test those sorts of traffic. It didn't take them long to add support for their protocols, either. If you're not a developer, there's basic support for the common HTTP cases, but you probably will want to investigate other solutions that are more mature. At some point a non-developer will be able to use Iago and get everything they want from it, but that day is probably a year away.
If you want to have a direct conversation, I'm reachable at
j...@twitter.com, and I expect to present Iago at some user group meetings at some point as well.
James