This repository has been archived by the owner on Sep 18, 2021. It is now read-only.
/
philosophy.html
166 lines (154 loc) · 8.14 KB
/
philosophy.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Philosophy · Twitter Iago</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<!-- Le styles -->
<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/bootstrap-responsive.css" rel="stylesheet">
<link href="css/docs.css" rel="stylesheet">
<link href="js/google-code-prettify/prettify.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Le fav and touch icons -->
<link rel="shortcut icon" href="ico/favicon.ico">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="ico/apple-touch-icon-57-precomposed.png">
</head>
<body data-spy="scroll" data-target=".subnav" data-offset="50">
<!-- Navbar
================================================== -->
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="./index.html">Iago</a>
<div class="nav-collapse collapse">
<ul class="nav">
<li class="">
<a href="./index.html">Overview</a>
</li>
<li class="active">
<a href="./philosophy.html">Philosophy</a>
</li>
<li class="">
<a href="./protocols.html">Protocols</a>
</li>
<li class="">
<a href="./components.html">Components</a>
</li>
<li class="">
<a href="./log_sources.html">Log Sources</a>
</li>
<li class="">
<a href="./extending.html">Extending</a>
</li>
<li class="divider-vertical"></li>
<li class="">
<a href="./examples.html">Examples</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<header class="jumbotron subhead" id="overview">
<h1>Philosophy</h1>
<p class="lead">Iago has a specific point of view about load testing. Understanding
that point of view will help you to decide whether to use it.</p>
<p>Iago is primarily a load generation library. It is designed
for software engineers familiar with a JVM language such as
Java or Scala. If you want to test an API under load, Iago is great.
While you can use Iago as a stand-alone load testing application,
this is not its strong suit today; if that is what you want, you will probably be
happier with other tools.</p>
<p>That said, if you are a programmer who wants to test an API under load, Iago is very easy
to use. Stand-alone load-test applications are great if you want to repeatedly get
http://example.com/, but if you instead want to repeatedly exercise an API, they
probably don't do what you want. Iago shines here.
<p>If you've already written a test client for your API, you've probably already written
the code that Iago can use to exercise that API. It usually requires
more code to write a test client than it does to write a load test using Iago. Indeed,
the code from a test client is usually just what you need to write your load test. This
is deliberate, because we believe that people who most need Iago are those who find
themselves writing their own load tests late at night after a release has gone bad.</p>
<p>Iago accurately replicates production traffic. It models open systems,
systems which recieve requests independent of their ability to service them.
Typical load generators measure the
time it takes for <var>M</var> threads to make <var>N</var> requests, waiting for a
response to each request before sending the next; if your system slows down under load,
these load testers thus mercifully slow down their pace to match.
That's a fine thing to measure; many systems behave this way. But maybe your
service isn't such a system; maybe it's exposed on the internet.
Maybe you want to know how your system behaves when <var>N</var>
requests per second come in with no "mercy" if it slows down.</p>
<p>Iago focuses on requests per second and has built-in support for statistical
models such as an exponential distribution (used to model a Poisson Process) and uniform
distributions. You can also write your own request distribution, either
in terms of sums of distribution or your own implementation. Iago
reliably meets the arrival times your distribution specifies,
even when rates and wait times are high.</p>
<p>Iago supports arbitrarily high rates of traffic via
built-in support for creating clusters: if one machine can't generate the load you need,
then Iago can launch jobs on more machines. At Twitter, engineers regularly run load tests
that generate in excess of 100K requests per second or more. Single instances of Iago
can easily achieve anywhere from 1K to 10K rps from commodity hardware, only limited by
the particulars of your protocol needs.</p>
<p>You can extend or replace Iago's components. Because our target users are other
engineers, it is critical that every knob be available to turn. You
can write your own protocols, data sources, management interfaces or
whatever else you can imagine.
<p>Iago is the load generator we wished for. Now that we have it,
we want to share it with like-minded engineers who appreciate its capabilities.
To get started with Iago, <a href="https://github.com/twitter/iago/">view it on
Github, download it, and read its README</a>.</p>
</header>
</div><!-- /container -->
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
<script src="js/jquery.js"></script>
<script src="js/google-code-prettify/prettify.js"></script>
<script src="js/bootstrap-transition.js"></script>
<script src="js/bootstrap-alert.js"></script>
<script src="js/bootstrap-modal.js"></script>
<script src="js/bootstrap-dropdown.js"></script>
<script src="js/bootstrap-scrollspy.js"></script>
<script src="js/bootstrap-tab.js"></script>
<script src="js/bootstrap-tooltip.js"></script>
<script src="js/bootstrap-popover.js"></script>
<script src="js/bootstrap-button.js"></script>
<script src="js/bootstrap-collapse.js"></script>
<script src="js/bootstrap-carousel.js"></script>
<script src="js/bootstrap-typeahead.js"></script>
<script src="js/application.js"></script>
<!-- Analytics
================================================== -->
<script>
var _gauges = _gauges || [];
(function() {
var t = document.createElement('script');
t.type = 'text/javascript';
t.async = true;
t.id = 'gauges-tracker';
t.setAttribute('data-site-id', '4f0dc9fef5a1f55508000013');
t.src = '//secure.gaug.es/track.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(t, s);
})();
</script>
</body>
</html>