


<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>DeServ - Info &#187; varnish</title>
	<atom:link href="http://blog.deserv.info/tag/varnish/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deserv.info</link>
	<description>Seu Caderno de Anotações de Informática</description>
	<lastBuildDate>Wed, 25 Jan 2012 17:47:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<copyright>Copyright &#xA9; DeServ - Info 2011 </copyright>
	<managingEditor>flavio.aparecido@gmail.com (DeServ - Info)</managingEditor>
	<webMaster>flavio.aparecido@gmail.com (DeServ - Info)</webMaster>
	<image>
		<url>http://blog.deserv.info/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>DeServ - Info</title>
		<link>http://blog.deserv.info</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>Seu Caderno de Anotações de Informática</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>DeServ - Info</itunes:author>
	<itunes:owner>
		<itunes:name>DeServ - Info</itunes:name>
		<itunes:email>flavio.aparecido@gmail.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://blog.deserv.info/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>Reverse Proxy Performance – Varnish vs. Squid (Part 2)</title>
		<link>http://blog.deserv.info/2009/12/15/reverse-proxy-performance-%e2%80%93-varnish-vs-squid-part-2/</link>
		<comments>http://blog.deserv.info/2009/12/15/reverse-proxy-performance-%e2%80%93-varnish-vs-squid-part-2/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 20:33:40 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[Softwares Adicionais]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[proxy reverso]]></category>
		<category><![CDATA[squid]]></category>
		<category><![CDATA[varnish]]></category>
		<category><![CDATA[varnish cache]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=162</guid>
		<description><![CDATA[In part one of this series I tested the raw throughput performance of Varnish and Squid.  My results are consistent with all the blogs and comments floating around the blogosphere – Varnish blows away Squid.

Unfortunately, the first series of tests were somewhat uninformative.  Since they only tested the raw performance of serving cached content from memory, it did not mimic a real world scenario of serving cached content as well as fetching content from the backend and caching it. ]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2009%252F12%252F15%252Freverse-proxy-performance-%2525e2%252580%252593-varnish-vs-squid-part-2%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F89Pb70%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Reverse%20Proxy%20Performance%20%E2%80%93%20Varnish%20vs.%20Squid%20%28Part%202%29%22%20%7D);"></div>
<p><img style="border-width: 0px; margin: 0px 20px 0px 0px; display: inline;" title="squid-vs-varnish" src="http://deserialized.com/wp-content/uploads/2009/09/squidvsvarnish.gif" border="0" alt="squid-vs-varnish" width="133" height="153" align="left" /></p>
<p>In <a title="Reverse Proxy Performance – Varnish vs. Squid (Part 1)" href="http://deserialized.com/reverse-proxy-performance-varnish-vs-squid-part-1/">part one</a> of this series I tested the raw throughput performance of <a title="Varnish is a state-of-the-art, high-performance HTTP accelerator" onclick="javascript:pageTracker._trackPageview('/outgoing/varnish.projects.linpro.no/');" href="http://varnish.projects.linpro.no/">Varnish</a> and <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.squid-cache.org/');" href="http://www.squid-cache.org/">Squid</a>.  My results are consistent with all the blogs and comments floating around the blogosphere – Varnish blows away Squid.</p>
<p>Unfortunately, the first series of tests were somewhat uninformative.  Since they only tested the raw performance of serving cached content from memory, it did not mimic a real world scenario of serving cached content as well as fetching content from the backend and caching it. <span id="more-162"></span></p>
<p>While we would hope for a primed, full cache, it is unlikely to happen and you will undoubtedly see a decent amount of backend requests from your caching proxy.</p>
<p>A better test of the two proxies would involve a large set of random URLs, but not <em>too</em> random because we want to simulate both cache hits and cache misses.  To accomplish this, I wrote a small PHP script that would take two parameters: total number of URLs to generate and the hostname for those URLs.</p>
<h2>Generating a usable URL list</h2>
<p>Generating the list is simple.  This script looks like this:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
        <span style="color: #990000;">ob_start</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$total</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'total'</span><span style="color: #009900;">]</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$host</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'host'</span><span style="color: #009900;">]</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">(</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$total</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
                <span style="color: #666666; font-style: italic;">// generate random numbers</span>
                <span style="color: #990000;">srand</span><span style="color: #009900;">(</span><span style="color: #990000;">time</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$random</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mt_rand</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">40</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$random2</span> <span style="color: #339933;">=</span>  <span style="color: #990000;">mt_rand</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

                <span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span><span style="color: #990000;">substr</span><span style="color: #009900;">(</span><span style="color: #000088;">$random2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
			<span style="color: #000088;">$as</span><span style="color: #339933;">=</span><span style="color: #0000ff;">"?as=<span style="color: #006699; font-weight: bold;">$random2</span>"</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">}</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">{</span>
			<span style="color: #000088;">$as</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">""</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">}</span>
                <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">"http://<span style="color: #006699; font-weight: bold;">$host</span>/varnish/gen/<span style="color: #006699; font-weight: bold;">$random</span><span style="color: #006699; font-weight: bold;">$as</span><span style="color: #000099; font-weight: bold;">\n</span>"</span><span style="color: #339933;">;</span>
                <span style="color: #990000;">flush</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #990000;">ob_flush</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">}</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">"http://<span style="color: #006699; font-weight: bold;">$host</span>/varnish/gen/<span style="color: #006699; font-weight: bold;">$random</span><span style="color: #006699; font-weight: bold;">$as</span>"</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre>
</div>
</div>
<p>All this does is create a long list of URLs.  I used PHPs output buffering mechanisms to flush the buffer which is necessary when creating large URL lists so that you don’t wait forever.  Maybe it could have been written better but I don’t care – that wasn’t the point of this test.</p>
<p>The URLs that are created are in the format of:</p>
<pre>http://host/varnish/gen/50?as=100

http://host/varnish/gen/50</pre>
<p>This URL is mapped to another PHP file that simply generates dummy data of the size specified in the URL.  In the above cases, the files would be 50Kb large.  The query parameter “as” is just a useless piece of information that is meant to tell the proxy to cache it.  If the “as” query parameter does not exist, the proxy will forward the request to the backend and not cache it.  Its a simple way to generate cacheable and non-cacheable URLs.</p>
<p>To generate the list and store it in a local file, I used this command:</p>
<pre>curl http://192.168.165.101/varnish/makelist.php?total=10000&amp;host=192.168.165.104:8080
	&gt; urls-10k.txt</pre>
<p><strong>Verify the results of the script</strong></p>
<p>For your own sanity, make sure that the script did in fact generate a list of URLs that suits your needs.</p>
<p>Count the amount of URLs generated:</p>
<pre>cat urls-10k.txt | wc –l</pre>
<p>(yes, I know it creates one extra URL … Its fine by me.)</p>
<p>Count the amount of cacheable URLs containing the “as” query parameter:</p>
<pre>cat urls-10k.txt | grep as | wc –l</pre>
<p>Count the amount of unique cacheable URLs:</p>
<pre>cat urls-10k.txt | grep as | sort | uniq | wc –l</pre>
<h2>Running the tests</h2>
<p>In part one I used ApacheBench to load the servers but for these tests, I used <a title="Siege is an http regression testing and benchmarking utility" onclick="javascript:pageTracker._trackPageview('/outgoing/www.joedog.org/index/siege-home');" href="http://www.joedog.org/index/siege-home">Siege</a> and <a title="http_load runs multiple http fetches in parallel, to test the throughput of a web server" onclick="javascript:pageTracker._trackPageview('/outgoing/acme.com/software/http_load/');" href="http://acme.com/software/http_load/">http_load</a> which both allowed me to load URLs from a file.</p>
<p>I started with Varnish using the following commands:</p>
<pre>curl http://192.168.165.101/varnish/makelist.php?total=100000&amp;host=192.168.165.104:8080
	&gt; urls-100k.txt</pre>
<pre>http_load -parallel 10 -fetches 100000 urls-100k.txt
http_load -parallel 25 -fetches 100000 urls-100k.txt
http_load -parallel 50 -fetches 100000 urls-100k.txt
http_load -parallel 100 -fetches 100000 urls-100k.txt
http_load -parallel 200 -fetches 100000 urls-100k.txt
http_load -parallel 400 -fetches 100000 urls-100k.txt</pre>
<p>In between each http_load command, I restarted the Varnish service so that each test ran with an empty cache.  When I was done with the Varnish tests, I ran the same tests against Squid using the same commands above.</p>
<h2>The results</h2>
<p>The results of these tests represent the typical web application much better than the original tests did.</p>
<p>This first graph shows the average time for the proxy to accept a connection.  As concurrency goes up, it is expected that the time to connect would go up too.  Squid suffers more than Varnish does, but the difference is negligible.</p>
<p><a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2009/09/image.png');" href="http://deserialized.com/wp-content/uploads/2009/09/image.png"><img style="border-width: 0px; display: inline;" title="image" src="http://deserialized.com/wp-content/uploads/2009/09/image_thumb.png" border="0" alt="image" width="580" height="188" /></a></p>
<p>The second graph is much more interesting.  As concurrency goes up, the Time-To-First-Byte for Squid goes up very sharply while Varnish holds its ground and remains very quick around 25ms.</p>
<p><a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2009/09/image1.png');" href="http://deserialized.com/wp-content/uploads/2009/09/image1.png"><img style="border-width: 0px; display: inline;" title="image" src="http://deserialized.com/wp-content/uploads/2009/09/image_thumb1.png" border="0" alt="image" width="579" height="188" /></a></p>
<p>This third graph shows another interesting behavior.  As concurrency goes up, Varnish begins to even itself out at just under 800 fetches per second while Squid peaks at around 1100 fetches per second with around 50 concurrent connects and then sharply drops off as concurrency goes up.</p>
<p><a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2009/09/image2.png');" href="http://deserialized.com/wp-content/uploads/2009/09/image2.png"><img style="border-width: 0px; display: inline;" title="image" src="http://deserialized.com/wp-content/uploads/2009/09/image_thumb2.png" border="0" alt="image" width="579" height="187" /></a></p>
<h2>Conclusion</h2>
<p>Squid versus Varnish is just another holy war that may never end.  The tests that I have performed have been very helpful for me and my team but your results may vary.  Of course, there are many more things to consider and I plan to write about some of the major differences between Squid and Varnish.</p>
<p>My results show that in raw cache hit performance, Varnish puts Squid to shame.  In real world scenarios I found that Squid can hold its own when dealing with small amounts of traffic, but it’s performance drops off very sharply as it begins to handle more connections. Varnish handles them without a sweat, as it was designed to do.</p>
<p>My next blog post will detail the differences between Varnish and Squid’s architecture, features, and the reasons I am pushing for Varnish in our environment.</p>
<p><strong>Edit:</strong></p>
<p>Some people are complaining in comments on Reddit and HackerNews that I have not provided any information about the hardware or operating system for my tests.  This information was posted in <a href="http://deserialized.com/reverse-proxy-performance-varnish-vs-squid-part-1/">Part one</a> of this post.</p>
<p>Fonte: http://deserialized.com</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2009/12/15/reverse-proxy-performance-%e2%80%93-varnish-vs-squid-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reverse Proxy Performance – Varnish vs. Squid (Part 1)</title>
		<link>http://blog.deserv.info/2009/12/15/reverse-proxy-performance-%e2%80%93-varnish-vs-squid-part-1/</link>
		<comments>http://blog.deserv.info/2009/12/15/reverse-proxy-performance-%e2%80%93-varnish-vs-squid-part-1/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 20:30:20 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[prox]]></category>
		<category><![CDATA[proxy reverso]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[squid]]></category>
		<category><![CDATA[varnish]]></category>
		<category><![CDATA[varnish cache]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=160</guid>
		<description><![CDATA[Typical web applications require dozens of SQL queries to generate a single page.  When your application is serving over 1,000,000 pages per day, you quickly realize that the performance bottleneck is your database.  The typical answer to slow database queries is “just use memcached!”  Memcached and other data caches can only take you so far.  This is where reverse proxies come in.  There are a handful of them out there, including Nginx, Perlbal, Squid and Varnish.  Which to use is up to you.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2009%252F12%252F15%252Freverse-proxy-performance-%2525e2%252580%252593-varnish-vs-squid-part-1%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F4HBuEw%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Reverse%20Proxy%20Performance%20%E2%80%93%20Varnish%20vs.%20Squid%20%28Part%201%29%22%20%7D);"></div>
<p><img style="border: 0px none ; margin: 0px 20px 0px 0px; display: inline;" title="squid-vs-varnish" src="http://deserialized.com/wp-content/uploads/2009/09/squidvsvarnish.gif" border="0" alt="squid-vs-varnish" width="133" height="153" align="left" /> Typical web applications require dozens of SQL queries to generate a single page.  When your application is serving over 1,000,000 pages per day, you quickly realize that the performance bottleneck is your database.  The typical answer to slow database queries is “just use <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.danga.com/memcached/');" href="http://www.danga.com/memcached/">memcached</a>!”  <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.danga.com/memcached/');" href="http://www.danga.com/memcached/">Memcached</a> and other data caches can only take you so far.  This is where reverse proxies come in.  There are a handful of them out there, including <a title="nginx [engine x] is a HTTP server and mail proxy server" onclick="javascript:pageTracker._trackPageview('/outgoing/nginx.net/');" href="http://nginx.net/">Nginx</a>, <a title="Perlbal is a Perl-based reverse proxy load balancer and web server" onclick="javascript:pageTracker._trackPageview('/outgoing/www.danga.com/perlbal/');" href="http://www.danga.com/perlbal/">Perlbal</a>, <a title="Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more" onclick="javascript:pageTracker._trackPageview('/outgoing/www.squid-cache.org/');" href="http://www.squid-cache.org/">Squid</a> and <a title="Varnish is a state-of-the-art, high-performance HTTP accelerator. It uses the advanced features in Linux 2.6, FreeBSD 6/7 and Solaris 10 to achieve its high performance." onclick="javascript:pageTracker._trackPageview('/outgoing/varnish.projects.linpro.no/');" href="http://varnish.projects.linpro.no/">Varnish</a>.  Which to use is up to you.</p>
<p><span id="more-160"></span></p>
<h2>Deciding what is best for you</h2>
<p>Assuming that you have taken a step back and really analyzed your problem first, the next step is to analyze the possible solutions.  For us, Varnish seems like the best option with Squid close behind.  To be fair, I’ve set up a test server with both Varnish and Squid running.  I’ll use <a title="ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server" onclick="javascript:pageTracker._trackPageview('/outgoing/httpd.apache.org/docs/2.0/programs/ab.html');" href="http://httpd.apache.org/docs/2.0/programs/ab.html">ApacheBench</a> to generate load and requests.</p>
<p>I’ve analyzed our pages to see what the typical page size is and recorded the average page sizes for 5 different page types.  They range from around 10KB to 35KB (<a onclick="javascript:pageTracker._trackPageview('/outgoing/developer.yahoo.com/performance/rules.html#gzip');" href="http://developer.yahoo.com/performance/rules.html#gzip">gzipped</a>).  For my test, I’ll be benchmarking with 10KB, 15KB, 20KB, 30KB, 40KB, and 50KB files to get a good range of different size requests.</p>
<p>To test under different load capacities, I’ll use <a title="ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server" onclick="javascript:pageTracker._trackPageview('/outgoing/httpd.apache.org/docs/2.0/programs/ab.html');" href="http://httpd.apache.org/docs/2.0/programs/ab.html">ApacheBench</a> to generate loads with different amounts of concurrent users ranging from 10 to 400.</p>
<h2>The test</h2>
<p>I’ll be using two identical machines on the same local class C network to eliminate (as much as possible) network latency.</p>
<p><strong>The machines look something like this:</strong></p>
<ul>
<li>Pentium 4 3GHz (8KB Level 1, 512KB Level 2)</li>
<li>2GB (4×512 DDR 400MHz)</li>
<li>120GB ATA Western Digital Caviar WD1200JB</li>
<li>CentOS 5</li>
</ul>
<p>(I don’t have more information than that.  Suffice to say that it is a few years old and not very powerful)</p>
<p>I am using Varnish 2.04 and Squid 2.6.STABLE21.  There are newer versions of Squid but i am using this version because the 3.x branch is missing features found in the 2.x branch and I have read several reports of 2.7 crashing, etc.</p>
<p><strong>The command to run the load test looks something like this:</strong></p>
<p>ab –c concurrent_users –n total_requests “url”</p>
<p>This will let you specify how many concurrent users to run and how many requests to make.  I have the proxy servers running on ServerA and I run the benchmark from ServerB.</p>
<h2>The results</h2>
<p>In general, Varnish seems to perform twice as well as Squid does.  In every test, Varnish serves nearly 2x more requests per second and has half the average response time.</p>
<table border="2" cellspacing="0">
<tbody>
<tr valign="bottom">
<td colspan="2" align="center"></td>
<td colspan="3" align="center" valign="middle" bgcolor="#d7e4bd"><span style="font-family: Calibri; color: #9bbb59; font-size: large;"><strong>Varnish</strong></span></td>
<td colspan="3" align="center" valign="middle" bgcolor="#d7e4bd"><span style="font-family: Calibri; color: #9bbb59; font-size: large;"><strong>Squid</strong></span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center" valign="middle"><span style="font-family: Calibri; font-size: small;">File Size</span></td>
<td width="59" align="center" valign="middle"><span style="font-family: Calibri; font-size: small;">Concurrent Users</span></td>
<td width="58" align="center" valign="middle"><span style="font-family: Calibri; font-size: small;">(V) Requests per second</span></td>
<td width="64" align="center" valign="middle"><span style="font-family: Calibri; font-size: small;">(V) Avg across all requests</span></td>
<td width="60" align="center" valign="middle"><span style="font-family: Calibri; font-size: small;">(V) Average Request (ms)</span></td>
<td width="59" align="center" valign="middle"><span style="font-family: Calibri; font-size: small;">(S) Requests per second</span></td>
<td width="65" align="center" valign="middle"><span style="font-family: Calibri; font-size: small;">(S) Avg across all requests</span></td>
<td width="57" align="center" valign="middle"><span style="font-family: Calibri; font-size: small;">(S) Average Request (ms)</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">10k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">10</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">6592</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.152</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">1</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3078</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.325</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">3</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">10k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">25</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">6915</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.145</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">3</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3568</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.280</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">7</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">10k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">50</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">7071</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.141</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">7</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3539</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.283</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">14</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">10k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">100</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">6860</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.146</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">13</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3565</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.280</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">28</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">10k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">200</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">7252</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.138</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">27</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3506</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.285</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">57</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">10k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">400</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">7181</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.139</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">56</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3518</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.284</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">113</span></td>
</tr>
<tr valign="bottom">
<td width="40" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="58" bgcolor="#748c42"></td>
<td width="64" bgcolor="#748c42"></td>
<td width="60" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="65" bgcolor="#748c42"></td>
<td width="57" bgcolor="#748c42"></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">15k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">10</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">4636</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.216</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">2</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2949</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.339</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">3</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">15k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">25</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">5954</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.168</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">4</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3168</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.316</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">7</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">15k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">50</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">6036</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.166</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">8</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3118</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.321</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">16</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">15k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">100</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">6060</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.165</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">16</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3247</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.308</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">30</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">15k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">200</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">6066</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.165</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">32</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3226</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.310</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">61</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">15k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">400</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">6048</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.165</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">66</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">3092</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.323</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">129</span></td>
</tr>
<tr valign="bottom">
<td width="40" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="58" bgcolor="#748c42"></td>
<td width="64" bgcolor="#748c42"></td>
<td width="60" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="65" bgcolor="#748c42"></td>
<td width="57" bgcolor="#748c42"></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">20k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">10</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">4689</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.213</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">2</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2553</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.392</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">3</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">20k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">25</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">5342</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.187</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">4</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2675</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.374</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">9</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">20k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">50</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">5422</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.184</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">9</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2799</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.357</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">17</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">20k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">100</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">5446</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.184</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">18</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2861</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.349</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">34</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">20k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">200</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">5430</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.184</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">36</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2795</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.358</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">71</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">20k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">400</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">5400</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.185</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">74</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2656</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.376</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">150</span></td>
</tr>
<tr valign="bottom">
<td width="40" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="58" bgcolor="#748c42"></td>
<td width="64" bgcolor="#748c42"></td>
<td width="60" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="65" bgcolor="#748c42"></td>
<td width="57" bgcolor="#748c42"></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">25k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">10</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">4135</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.242</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">2</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2331</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.429</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">4</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">25k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">25</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">4485</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.223</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">5</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2308</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.433</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">10</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">25k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">50</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">4488</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.223</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">11</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2221</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.450</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">22</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">25k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">100</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">4446</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.225</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">22</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2217</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.451</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">45</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">25k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">200</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">4311</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.232</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">46</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2180</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.459</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">91</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">25k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">400</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">4160</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.240</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">96</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2026</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.493</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">197</span></td>
</tr>
<tr valign="bottom">
<td width="40" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="58" bgcolor="#748c42"></td>
<td width="64" bgcolor="#748c42"></td>
<td width="60" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="65" bgcolor="#748c42"></td>
<td width="57" bgcolor="#748c42"></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">30k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">10</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">3463</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.289</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">2</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1936</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.516</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">5</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">30k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">25</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">3689</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.271</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">6</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">2002</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.499</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">12</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">30k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">50</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">3661</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.273</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">13</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1887</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.530</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">26</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">30k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">100</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">3627</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.276</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">27</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1778</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.562</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">56</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">30k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">200</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">3589</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.279</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">55</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1746</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.573</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">114</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">30k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">400</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">3541</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.282</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">112</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1798</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.556</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">222</span></td>
</tr>
<tr valign="bottom">
<td width="40" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="58" bgcolor="#748c42"></td>
<td width="64" bgcolor="#748c42"></td>
<td width="60" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="65" bgcolor="#748c42"></td>
<td width="57" bgcolor="#748c42"></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">40k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">10</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2752</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.363</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">3</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1602</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.624</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">6</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">40k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">25</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2824</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.354</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">8</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1584</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.631</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">15</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">40k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">50</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2826</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.354</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">17</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1492</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.670</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">33</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">40k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">100</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2827</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.354</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">35</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1551</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.645</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">64</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">40k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">200</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2822</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.354</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">70</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1538</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.65</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">130</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">40k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">400</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2794</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.358</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">143</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1372</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.728</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">291</span></td>
</tr>
<tr valign="bottom">
<td width="40" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="58" bgcolor="#748c42"></td>
<td width="64" bgcolor="#748c42"></td>
<td width="60" bgcolor="#748c42"></td>
<td width="59" bgcolor="#748c42"></td>
<td width="65" bgcolor="#748c42"></td>
<td width="57" bgcolor="#748c42"></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">50k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">10</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2254</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.443</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">4</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1401</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.713</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">7</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">50k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">25</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2265</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.441</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">11</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1379</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.725</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">18</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">50k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">50</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2266</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.441</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">22</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1368</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.731</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">36</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">50k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">100</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2268</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.441</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">44</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1360</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.735</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">73</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">50k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">200</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2266</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.441</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">88</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1230</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.813</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">162</span></td>
</tr>
<tr valign="bottom">
<td width="40" align="center"><span style="font-family: Calibri; font-size: small;">50k</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">400</span></td>
<td width="58" align="center"><span style="font-family: Calibri; font-size: small;">2267</span></td>
<td width="64" align="center"><span style="font-family: Calibri; font-size: small;">0.441</span></td>
<td width="60" align="center"><span style="font-family: Calibri; font-size: small;">176</span></td>
<td width="59" align="center"><span style="font-family: Calibri; font-size: small;">1216</span></td>
<td width="65" align="center"><span style="font-family: Calibri; font-size: small;">0.822</span></td>
<td width="57" align="center"><span style="font-family: Calibri; font-size: small;">328</span></td>
</tr>
</tbody>
</table>
<p>Here are the graphs of the above data for easier visualization:</p>
<p><a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2009/09/varnishsquidbenchmarkreqpersecond2.gif');" href="http://deserialized.com/wp-content/uploads/2009/09/varnishsquidbenchmarkreqpersecond2.gif"><img style="border: 0px none ; display: inline;" src="http://deserialized.com/wp-content/uploads/2009/09/varnishsquidbenchmarkreqpersecond_thumb2.gif" border="0" alt="" width="200" height="244" /></a> <a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2009/09/varnishsquidbenchmarkavgrequesttime2.gif');" href="http://deserialized.com/wp-content/uploads/2009/09/varnishsquidbenchmarkavgrequesttime2.gif"><img style="border: 0px none ; display: inline;" src="http://deserialized.com/wp-content/uploads/2009/09/varnishsquidbenchmarkavgrequesttime_thumb2.gif" border="0" alt="" width="200" height="244" /></a></p>
<h2>Something is wrong here</h2>
<p>These are simply benchmarks and are not meant to represent real world scenarios for a few reasons.  Most importantly, this test takes place on a local network that goes through one router.  Running this test on a local network does not take into consideration the typical network latency you would find across the internet.</p>
<p>Secondly, this test only illustrates the raw speed of serving up cached content which isn’t a typical real world scenario.  To really test the overall performance of both of these, we need to simulate the three major steps of a reverse proxy:</p>
<ol>
<li>Forwarding a request to a backend server</li>
<li>Physically caching it (memory or disk)</li>
<li>Serving the cached data</li>
</ol>
<p>Testing any of these three steps is good, and shows the raw performance of that function but it doesn’t give us a general overview of the overall performance.</p>
<h2>Next Steps</h2>
<p>I need to come up with a way to generate load on the server such that it represents the typical flow of requests that we would normally see on a server.  I am running this on a test server, not against production data, so if anyone has an idea of how I can do this, please do let me know.  The results of this test will be Part 2 of this post.</p>
<p>Additionally, please let me know if you spot inefficiencies in my testing methodology. I don’t claim to be a load testing expert so any advice you can offer is appreciated.</p>
<p>Fonte: http://deserialized.com</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2009/12/15/reverse-proxy-performance-%e2%80%93-varnish-vs-squid-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Varnish Cache &#8211; Servidor de Proxy Reverso com Cacheamento</title>
		<link>http://blog.deserv.info/2009/12/15/varnish-cache-servidor-de-proxy-reverso-com-cacheamento/</link>
		<comments>http://blog.deserv.info/2009/12/15/varnish-cache-servidor-de-proxy-reverso-com-cacheamento/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 20:03:39 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[Softwares Adicionais]]></category>
		<category><![CDATA[cacheamento]]></category>
		<category><![CDATA[opens]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[proxy reverso]]></category>
		<category><![CDATA[varnish]]></category>
		<category><![CDATA[varnish cache]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=156</guid>
		<description><![CDATA[O Squid é sem dúvida um dos mais poderosos e completos sistemas de caching proxy do mercado. Para nossa sorte, é livre e conhecido por funcionar muito bem no FreeBSD. O Squid é utilizado frequentemente como servidor de procuração e cacheamento de dados servindo uma rede ou algumas estações, para acesso à grande rede.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2009%252F12%252F15%252Fvarnish-cache-servidor-de-proxy-reverso-com-cacheamento%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F5BEgIa%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Varnish%20Cache%20-%20Servidor%20de%20Proxy%20Reverso%20com%20Cacheamento%22%20%7D);"></div>
<p><img title="Varnish logo" src="http://www.fug.com.br/images/stories/varnish-cache.png" border="0" alt="Varnish logo" hspace="6" width="290" height="90" align="right" />O <em>Squid </em>é sem dúvida um dos mais poderosos e completos sistemas de <em>caching proxy</em> do mercado. Para nossa sorte, é livre e conhecido por funcionar muito bem no FreeBSD. O <em>Squid </em>é utilizado frequentemente como servidor de procuração e cacheamento de dados servindo uma rede ou algumas estações, para acesso à grande rede.  <span id="more-156"></span>Mas o <em>Squid </em>também é projetado para atuar como <em>Reverse Proxy</em> com cacheamento. Um servidor de procuração reverso funciona de forma similar a um servidor de procuração convencional, mas ao invés de atender uma rede pré-conhecida ou uma estação, atende a toda Internet, mas seu <em>target </em>de procuração e cacheamento é normalmente apenas um (ou alguns) servidor(es) Web. Por isso é denominado <em>proxy reverso</em>, pois faz a procuração para acesso e cache de servidores Web pré-conhecidos. Por exemplo, imagine que você entre em um <em>site </em>na Web, como http://www.freebsd.org ou http://www.fug.com.br. Normalmente espera-se que quem atenda sua requisição HTTP/1.0 ou superior seja o servidor Web desses sites. Se um <em>proxy reverso </em>existir, sua requisição será atendida por este <em>proxy</em>, e não pelo servidor Web. O objetivo é aliviar a carga do servidor Web e poder oferecer à diversos clientes acessando o <em>site </em>ao mesmo tempo o mesmo conteúdo, resultado do processamento único realizado pelo Web server, ao invés de exigir que o próprio servidor http cuide de processar esse site.</p>
<p>À primeira vista o uso de um <em>proxy reverso </em>parece não ter grandes vantagens, especialmente porque o consumo de banda, observado por alguns como a grande vantagem de uso de um servidor de procuração, não existirá, já que, sendo transmitido do servidor Web ou do <em>proxy</em>, a demanda de largura de banda dos dados será a mesma. Correto, mas esse é o único ponto onde o <em>proxy reverso</em> não apresenta vantagens. Em grandes <em>sites </em>e principalmente em <em>sites </em>com conteúdo essencialmente dinâmico, o custo mais relevante não é banda, mas sim recursos computacionais e atendimento paralelo à requisições Web. Apesar de servidores como Apache serem extremamente robustos e atender seguramente a demanda de requisições paralelas, a questão de desempenho é afetada devido à necessidade de sites dinâmicos ter que ser processados sempre, toda vez, para cada requisição Web feita.</p>
<p>Tendo em vista esta grande demanda de recursos de processamento, o próprio Apache já tem seu módulo de <em>proxy reverso</em>, inclusive com algum suporte à cacheamento de objetos. E não é só. Linguagens popularmente usadas em ambiente livre como <em>php </em>tem versões de aceleradores de objetos. São sistemas livres e proprietários, todos com o mesmo objetivo: acelerar o processamento de conteúdo gerado dinâmicamente. Mas esses aceleradores não são de propósito geral. Por exemplo, não existe acelerador que funcione bem para PHP, Java e Perl ao mesmo tempo. Pior ainda se há um servidor com ASP no ambiente Web em questão. Nesses casos o <em>proxy reverso</em> é a solução mais indicada.</p>
<p>Mas os dias de hegemonia do Squid, atuando como <em>proxy </em>reverso e sendo unanimidade de opções para tal função, estão contados. Pelo menos é o que promete a VG Multimedia e o Grupo de Usuários Unix da Noruega. Segundo a VG Multimedia, empresa de produção áudio-visual da Noruega, o <em>Squid </em>atuando como <em>Reverse Proxy</em> se apresentou limitado demais em performance, por uma série de motivos incluindo não fazer uso apropriado de várias tecnologias disponíveis em sistemas computacionais modernos. O módulo de <em>proxy </em>reverso do Apache também não se mostrou satisfatório em ambiente de grande demanda. Essas averiguações já foram constatadas por grandes provedores de conteúdo dinâmico. O <em>Yahoo! </em>por exemplo usa uma solução de <em>Proxy Reverso </em>própria. No Brasil alguns dos maiores provedores de conteúdo usam o Netapp ou similar, de fabricantes como Sun Microsystems, IBM ou outras empresas.</p>
<p>Mas no mundo livre, a melhor opção até então era mesmo o Squid, atuando em um ambiente para o qual ele não foi originalmente projetado. Recentemente a VG Multimedia, grupo responsável pelo maior jornal publicado no país e o Grupo de Usuários Unix da Noruega e da empresa de Consultoria em Linux, Linpro, se uniram para financiar a criação de um novo projeto: o Varnish Cache. E os resultados já estão aí: em um <em>benchmark </em>recente comparando Varnish com Squid usando diskd(8) como <em>proxy reverso</em>, Varnish apresentou 600% mais performance que o <em>Squid</em>. O motivo, segundo seus desenvolvedores, é simples: código. Varnish utiliza racionalmente técnicas como <em>Copy-On-Write </em>e o uso do sendfile(2). Evita chamadas de sistema onde não é impossível deixar de usá-las, e introduz um novo algorítimo de cacheamento de objetos dinâmicos. Os detalhes internos das diferenças de codificação usadas podem ser acompanhados em um vídeo recente com palestra técnica sobre o Varnish Cache. Varnish tem ainda mais vantagens. Ele é capaz de cachear conteúdo considerado não-cacheável por outros sistemas. Incluíndo dados protegidos por senha.</p>
<p>O ambiente de desenvolvimento e uso em produção do Varnish Cache é FreeBSD, especificamente FreeBSD 6 -STABLE e 7 -CURRENT. O único Linux utilizado durante o desenvolvimento, para garantir compatibilidade com o <em>kernel </em>Linux é o Ubuntu Dapper. Isso porquê os desenvolvedores do Varnish são velhos conhecidos da comunidade FreeBSD. O desenvolvedor chefe é <a href="http://people.freebsd.org/%7Ephk/">Poul-Henning Kamp</a> e o líder do Projeto é <a href="http://www.des.no/">Dag-Erling Smøgrav</a>. Ambos <em>commiters </em>FreeBSD. A licença do Varnish é Licença BSD de dois cláusulas.</p>
<p>Se você ficou curioso e quer saber mais sobre o Varnish, vai gostar de saber que mesmo antes de ser oficialmente lançado, já estava disponível na Coleção de Ports do FreeBSD, em <span>/usr/ports/www/varnish</span>. Vai querer também assistir ao <a href="http://www.nuug.no/pub/video/published//20060919-varnish.mpeg" target="_blank">vídeo de apresentação técnica do Varnish</a> , incluindo discussões sobre implementações internas e algorítimos escolhidos e criados para o Varnish, ou talvez <a href="http://www.nuug.no/pub/video/published//20060919-varnish.mp3" target="_blank">ouvir a apresentação em mp3</a>. Como é um novo esforço, a documentação do Varnish ainda é pouca, mas um <a href="http://www.varnish-cache.org/docs.html">bom começo pode ser observado aqui</a>.</p>
<p>Apenas para não gerar confusão, é importante deixar claro que o Varnish não é feito para atuar como um <em>proxy </em>convencional, tão pouco para substituir o Squid ou qualquer outro proxy a não ser exclusivamente atuando na função de <em>proxy reverso</em>.</p>
<p>Fonte: http://www.fug.com.br/</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2009/12/15/varnish-cache-servidor-de-proxy-reverso-com-cacheamento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
			<enclosure url="http://www.nuug.no/pub/video/published//20060919-varnish.mpeg" length="241338368" type="video/mpeg" />
		<enclosure url="http://www.nuug.no/pub/video/published//20060919-varnish.mp3" length="50155968" type="audio/mpeg" />
	</item>
	</channel>
</rss>

