<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Spoot!</title>
	<atom:link href="http://nbonvin.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nbonvin.wordpress.com</link>
	<description>Architecture, Security, Open Source</description>
	<lastBuildDate>Fri, 11 May 2012 09:37:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='nbonvin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/aa9d82d0ad9c006085ec036196a1014c?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Spoot!</title>
		<link>http://nbonvin.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://nbonvin.wordpress.com/osd.xml" title="Spoot!" />
	<atom:link rel='hub' href='http://nbonvin.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Serving small static files: which server to use ?</title>
		<link>http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/</link>
		<comments>http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 22:59:04 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[benchmark]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[gwan]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[static]]></category>
		<category><![CDATA[traffic server]]></category>
		<category><![CDATA[varnish]]></category>

		<guid isPermaLink="false">http://nbonvin.wordpress.com/?p=315</guid>
		<description><![CDATA[Update 1 (Mar 29, 2011): Logging and compression now disabled for all servers Update 2 (Apr 14, 2011): Added results for Nginx 1.0 Introduction The goal of this benchmark is to compare several web server or caching server regarding their respective ability and performance to server small static files. The servers are optimized, contrary to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=315&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><strong>Update 1 (Mar 29, 2011): </strong>Logging and compression now disabled for all servers<br />
<strong>Update 2 (Apr 14, 2011): </strong>Added results for Nginx 1.0</p>
<p><span style="font-size:15px;font-weight:bold;">Introduction</span></p>
<p>The goal of this benchmark is to compare several web server or caching server regarding their respective ability and performance to server small static files. The servers are optimized, contrary to my <a href="http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/">previous benchmark</a>, where each server was tested using its default settings. I consider in this benchmark only the most performant open source servers, namely <a href="http://www.varnish-cache.org/">Varnish Cache</a>, <a href="http://wiki.nginx.org/">Nginx</a>, <a href="http://www.lighttpd.net/">Lighttpd</a>, <a href="http://trafficserver.apache.org/">Apache Traffic Server</a> as well as <a href="http://www.gwan.ch">G-WAN</a> (free, but not open source), as it was the clear winner of the previous test.</p>
<p><span id="more-315"></span></p>
<h3>Setup</h3>
<p>The following version of the software are used for this benchmark:</p>
<ul>
<li>Nginx: 0.7.67-3ubuntu1 (64 bit)</li>
<li>Varnish:  2.1.3-7ubuntu0.1 (64 bit)</li>
<li>G-WAN: 2.1.20 (32 bit)</li>
<li>Lighttpd: 1.4.26-3ubuntu2 (64 bit)</li>
<li>Apache Traffic Server: 2.1.7-unstable (64 bit)</li>
</ul>
<p>All tests are performed on an ASUS U30JC (Intel Core i3 &#8211; 370M @ 2.4 Ghz, Hard drive 5400 rpm, Memory: 4GB DDR3 1066MHz) running Ubuntu 10.10 64 bit (kernel 2.6.35).</p>
<p><strong>Benchmark setup</strong></p>
<ul>
<li>HTTP Keep-Alives: <em>enabled</em></li>
<li>TCP/IP settings: <em>OS default</em></li>
<li>Server settings:<em> default</em></li>
<li>Concurrency: <em>from 0 to 1&#8217;000, step 10</em></li>
<li>Requests: <em>1&#8217;000&#8217;000</em></li>
</ul>
<p>The following file of 100 byte is used as static content: <em>/var/www/100.html</em></p>
<p><pre class="brush: bash;">
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
</pre></p>
<p>I had to increase the local port range (because of the TIME_WAIT status of the TCP ports), so I&#8217;ve edited /etc/sysctl.conf:</p>
<p><pre class="brush: bash;">
net.ipv4.ip_local_port_range = 1024 65535
</pre></p>
<p><strong>Disclaimer</strong></p>
<p>Doing a correct benchmark is clearly not an easy task. There are many walls (TCP/IP stack, OS settings, the client itself, &#8230;) that may corrupt the results, and there is always the risk to compare apples with oranges (e.g. benchmarking the TCP/IP stack instead of the server itself).</p>
<p>In this benchmark, every server is tested using optimized settings. However, the OS has not been optimized.  If you have comments, improvements, ideas, tips regarding the optimization of a server, please feel free to contact me, I&#8217;m always open to improve myself and to learn new things.</p>
<h3>Client</h3>
<p>The client (available here: <a href="http://gwan.ch/source/ab.c.txt" rel="nofollow" target="_blank">http://gwan.ch/source/ab.c.txt</a>) relies on <a href="http://httpd.apache.org/docs/2.0/programs/ab.html">ApacheBench</a> (ab). The client as well as the web server tested are hosted on the same computer.</p>
<p>I&#8217;ve evaluated <a href="http://funkload.nuxeo.org/">Funkload</a>, but even in a distributed setting, it was not able to saturate the servers. Moreover, I&#8217;ve also considered using <a href="http://www.hpl.hp.com/research/linux/httperf/">httperf</a>, but because I had to wait 60 seconds between 2 tests (due to the TIME_WAIT status of the TCP ports), I finally used ApacheBench. Using the latter is also interesting to compare the performance of a server with its <a href="http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/">default settings</a> or with optimized setings.</p>
<h2>Varnish</h2>
<h3>Configuration:</h3>
<p>Based on <a href="http://kristianlyng.wordpress.com/2010/01/26/varnish-best-practices/">advices</a> from a Varnish developer and from the Varnish <a href="http://varnish-cache.org/trac/wiki/Performance">web site</a>, I use the following configuration:</p>
<p><pre class="brush: bash;">
thread_pool_add_delay = 2
thread_pools = 4
thread_pool_min = 200
thread_pool_max = 4000
cli_timeout = 25
session_linger = 100
malloc = 1G
</pre></p>
<p>The relevant part of <em>/etc/default/varnish</em>:</p>
<p><pre class="brush: bash;">
DAEMON_OPTS=&quot;-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -p thread_pool_add_delay=2 \
             -p thread_pools=4 \
             -p thread_pool_min=200 \
             -p thread_pool_max=4000 \
             -p cli_timeout=25 \
             -p session_linger=100 \
             -s malloc,1G&quot;
</pre></p>
<p>Finally, as my hard drive is quite slow, I mounted the varnish folder as a tmpfs:</p>
<p><pre class="brush: bash;">
sudo mount -t tmpfs -o size=512M tmpfs /var/lib/varnish
</pre></p>
<h3>Results:</h3>
<p>Let&#8217;s start with the output of <em>varnishstat -1</em>:</p>
<p><pre class="brush: bash;">
client_conn            504312       359.20 Client connections accepted
client_drop                 0         0.00 Connection dropped, no sess/wrk
client_req           20443932     14561.21 Client requests received
cache_hit            20443919     14561.20 Cache hits
cache_hitpass               0         0.00 Cache hits for pass
cache_miss                 13         0.01 Cache misses
backend_conn               12         0.01 Backend conn. success
backend_unhealthy            0         0.00 Backend conn. not attempted
backend_busy                0         0.00 Backend conn. too many
backend_fail                0         0.00 Backend conn. failures
backend_reuse               1         0.00 Backend conn. reuses
backend_toolate            11         0.01 Backend conn. was closed
backend_recycle            13         0.01 Backend conn. recycles
backend_unused              0         0.00 Backend conn. unused
fetch_head                  0         0.00 Fetch head
fetch_length               13         0.01 Fetch with Length
fetch_chunked               0         0.00 Fetch chunked
fetch_eof                   0         0.00 Fetch EOF
fetch_bad                   0         0.00 Fetch had bad headers
fetch_close                 0         0.00 Fetch wanted close
fetch_oldhttp               0         0.00 Fetch pre HTTP/1.1 closed
fetch_zero                  0         0.00 Fetch zero len
fetch_failed                0         0.00 Fetch failed
n_sess_mem               1689          .   N struct sess_mem
n_sess                    682          .   N struct sess
n_object                    0          .   N struct object
n_vampireobject             0          .   N unresurrected objects
n_objectcore              986          .   N struct objectcore
n_objecthead              987          .   N struct objecthead
n_smf                       0          .   N struct smf
n_smf_frag                  0          .   N small free smf
n_smf_large                 0          .   N large free smf
n_vbe_conn                  1          .   N struct vbe_conn
n_wrk                     986          .   N worker threads
n_wrk_create              986         0.70 N worker threads created
n_wrk_failed                0         0.00 N worker threads not created
n_wrk_max                   0         0.00 N worker threads limited
n_wrk_queue                 0         0.00 N queued work requests
n_wrk_overflow           2710         1.93 N overflowed work requests
n_wrk_drop                  0         0.00 N dropped work requests
n_backend                   1          .   N backends
n_expired                  13          .   N expired objects
n_lru_nuked                 0          .   N LRU nuked objects
n_lru_saved                 0          .   N LRU saved objects
n_lru_moved               554          .   N LRU moved objects
n_deathrow                  0          .   N objects on deathrow
losthdr                  5622         4.00 HTTP header overflows
n_objsendfile               0         0.00 Objects sent with sendfile
n_objwrite           20394256     14525.82 Objects sent with write
n_objoverflow               0         0.00 Objects overflowing workspace
s_sess                 504312       359.20 Total Sessions
s_req                20443932     14561.21 Total Requests
s_pipe                      0         0.00 Total pipe
s_pass                      0         0.00 Total pass
s_fetch                    13         0.01 Total fetch
s_hdrbytes         5971552835   4253242.76 Total header bytes
s_bodybytes        2044393490   1456120.72 Total body bytes
sess_closed            490612       349.44 Session Closed
sess_pipeline               0         0.00 Session Pipeline
sess_readahead              0         0.00 Session Read Ahead
sess_linger          20443932     14561.21 Session Linger
sess_herd               14205        10.12 Session herd
shm_records         696623209    496170.38 SHM records
shm_writes           21973040     15650.31 SHM writes
shm_flushes                 0         0.00 SHM flushes due to overflow
shm_cont               234697       167.16 SHM MTX contention
shm_cycles                201         0.14 SHM cycles through buffer
sm_nreq                     0         0.00 allocator requests
sm_nobj                     0          .   outstanding allocations
sm_balloc                   0          .   bytes allocated
sm_bfree                    0          .   bytes free
sma_nreq                   26         0.02 SMA allocator requests
sma_nobj                    0          .   SMA outstanding allocations
sma_nbytes                  0          .   SMA outstanding bytes
sma_balloc              11121          .   SMA bytes allocated
sma_bfree               11121          .   SMA bytes free
sms_nreq                    0         0.00 SMS allocator requests
sms_nobj                    0          .   SMS outstanding allocations
sms_nbytes                  0          .   SMS outstanding bytes
sms_balloc                  0          .   SMS bytes allocated
sms_bfree                   0          .   SMS bytes freed
backend_req                13         0.01 Backend requests made
n_vcl                       1         0.00 N vcl total
n_vcl_avail                 1         0.00 N vcl available
n_vcl_discard               0         0.00 N vcl discarded
n_purge                     1          .   N total active purges
n_purge_add                 1         0.00 N new purges added
n_purge_retire              0         0.00 N old purges deleted
n_purge_obj_test            0         0.00 N objects tested
n_purge_re_test             0         0.00 N regexps tested against
n_purge_dups                0         0.00 N duplicate purges removed
hcb_nolock           20417076     14542.08 HCB Lookups without lock
hcb_lock                    3         0.00 HCB Lookups with lock
hcb_insert                  3         0.00 HCB Inserts
esi_parse                   0         0.00 Objects ESI parsed (unlock)
esi_errors                  0         0.00 ESI parse errors (unlock)
accept_fail                 0         0.00 Accept failures
client_drop_late            0         0.00 Connection dropped late
uptime                   1404         1.00 Client uptime
</pre></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/plot-varnish.png"><img class="aligncenter size-full wp-image-331" title="plot-varnish" src="http://nbonvin.files.wordpress.com/2011/03/plot-varnish.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-varnish.png"><img class="aligncenter size-full wp-image-332" title="resources-varnish" src="http://nbonvin.files.wordpress.com/2011/03/resources-varnish.png?w=652" alt=""   /></a></p>
<h2>Nginx</h2>
<h3>Configuration:</h3>
<p>The main optimization for Nginx is to adapt the number of worker processes to the number of cores of your server. In my case, I have a dual core processor (i.e. seen as 4 virtual cores), and therefore I changed the value of <em>worker_processes.</em> Based on the useful comments of Igor Sysoev, I also turned off logging and compression, and added open_file_cache:</p>
<p>File <em>/etc/nginx/nginx.conf</em></p>
<p><pre class="brush: bash;">
user www-data;
worker_processes  2; # or 4
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
    # multi_accept on;
}
http {
    include       /etc/nginx/mime.types;
    access_log	off;
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    sendfile        off;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;
    gzip  off;
    gzip_disable &quot;MSIE [1-6]\.(?!.*SV1)&quot;;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
</pre></p>
<p>File <em>/etc/nginx/sites-enabled/default</em></p>
<p><pre class="brush: bash;">
server {
        listen   80; ## listen for ipv4
        server_name  localhost;
        access_log  off;
        location / {
                root   /var/www;
                index  index.html index.htm;
        }
}
</pre></p>
<p>Nginx 1.0 was compiled by hand with the following configuration:</p>
<p><pre class="brush: bash;">
./configure --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/
body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx
/proxy --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-ipv6 --without-http_charset_module --without-http_ssi_m
odule --without-http_userid_module --without-http_autoindex_module --without-http_rewrite_module --without-http_limit_zone_module --
without-http_limit_req_module
</pre></p>
<h3>Results:</h3>
<p>Let&#8217;s start with 2 worker processes on Nginx 0.7.67</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/plot-nginx-2workers1.png"><img class="aligncenter size-full wp-image-380" title="plot-nginx-2workers" src="http://nbonvin.files.wordpress.com/2011/03/plot-nginx-2workers1.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-nginx-2workers1.png"><img class="aligncenter size-full wp-image-381" title="resources-nginx-2workers" src="http://nbonvin.files.wordpress.com/2011/03/resources-nginx-2workers1.png?w=652" alt=""   /></a></p>
<p>Now with 4 worker processes on Nginx 0.7.67:</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/plot-nginx-4workers1.png"><img class="aligncenter size-full wp-image-382" title="plot-nginx-4workers" src="http://nbonvin.files.wordpress.com/2011/03/plot-nginx-4workers1.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-nginx-4workers1.png"><img class="aligncenter size-full wp-image-383" title="resources-nginx-4workers" src="http://nbonvin.files.wordpress.com/2011/03/resources-nginx-4workers1.png?w=652" alt=""   /></a></p>
<p>Let&#8217;s compare with 2 worker processes on Nginx 1.0</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/plot-nginx_1-0-2workers.png"><img class="aligncenter size-full wp-image-393" title="plot-nginx_1.0-2workers" src="http://nbonvin.files.wordpress.com/2011/03/plot-nginx_1-0-2workers.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-nginx_1-0-2workers.png"><img class="aligncenter size-full wp-image-394" title="resources-nginx_1.0-2workers" src="http://nbonvin.files.wordpress.com/2011/03/resources-nginx_1-0-2workers.png?w=652" alt=""   /></a>Now with 4 worker processes on Nginx 1.0:</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/plot-nginx_1-0-4workers.png"><img class="aligncenter size-full wp-image-395" title="plot-nginx_1.0-4workers" src="http://nbonvin.files.wordpress.com/2011/03/plot-nginx_1-0-4workers.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-nginx_1-0-4workers.png"><img class="aligncenter size-full wp-image-396" title="resources-nginx_1.0-4workers" src="http://nbonvin.files.wordpress.com/2011/03/resources-nginx_1-0-4workers.png?w=652" alt=""   /></a></p>
<h2><span style="font-size:x-small;"><span class="Apple-style-span" style="font-weight:normal;"><br />
</span></span></h2>
<h2>Lighttpd</h2>
<h3>Configuration:</h3>
<p>The optimizations for Lighttpd are based on the official <a href="http://redmine.lighttpd.net/wiki/1/Docs:Performance">documentation</a> as well as a blog <a href="http://blog.fosketts.net/2009/06/29/tuning-lighttpd-linux/">entry</a>.</p>
<p>File <em>/etc/lighttpd/lighttpd.conf</em></p>
<p><pre class="brush: bash;">
server.document-root       = &quot;/var/www/&quot;
server.upload-dirs = ( &quot;/var/cache/lighttpd/uploads&quot; )
server.errorlog            = &quot;/var/log/lighttpd/error.log&quot;
index-file.names           = ( &quot;index.php&quot;, &quot;index.html&quot;,
                               &quot;index.htm&quot;, &quot;default.htm&quot;,
                               &quot;index.lighttpd.html&quot; )
static-file.exclude-extensions = ( &quot;.php&quot;, &quot;.pl&quot;, &quot;.fcgi&quot; )
server.pid-file            = &quot;/var/run/lighttpd.pid&quot;
dir-listing.encoding        = &quot;utf-8&quot;
server.dir-listing          = &quot;enable&quot;
server.username            = &quot;www-data&quot;
server.groupname           = &quot;www-data&quot;
compress.cache-dir          = &quot;/var/cache/lighttpd/compress/&quot;
compress.filetype           = (&quot;text/plain&quot;, &quot;text/html&quot;, &quot;application/x-javascript&quot;, &quot;text/css&quot;)
include_shell &quot;/usr/share/lighttpd/create-mime.assign.pl&quot;
include_shell &quot;/usr/share/lighttpd/include-conf-enabled.pl&quot;
# Performance tuning
server.max-fds = 10000
server.event-handler = &quot;linux-sysepoll&quot;
server.network-backend = &quot;linux-sendfile&quot;
server.stat-cache-engine = &quot;fam&quot;
server.use-noatime = &quot;enable&quot;
server.max-worker = 2 # or 4
</pre></p>
<h3>Results:</h3>
<p>Let&#8217;s start with 2 worker processes:</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/plot-lighttpd-2worker.png"><img class="aligncenter size-full wp-image-342" title="plot-lighttpd-2worker" src="http://nbonvin.files.wordpress.com/2011/03/plot-lighttpd-2worker.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-lighttpd-2worker.png"><img class="aligncenter size-full wp-image-343" title="resources-lighttpd-2worker" src="http://nbonvin.files.wordpress.com/2011/03/resources-lighttpd-2worker.png?w=652" alt=""   /></a><br />
Now with 4 worker processes:<br />
<a href="http://nbonvin.files.wordpress.com/2011/03/plot-lighttpd-4workers.png"><img class="aligncenter size-full wp-image-344" title="plot-lighttpd-4workers" src="http://nbonvin.files.wordpress.com/2011/03/plot-lighttpd-4workers.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-lighttpd-4workers.png"><img class="aligncenter size-full wp-image-345" title="resources-lighttpd-4workers" src="http://nbonvin.files.wordpress.com/2011/03/resources-lighttpd-4workers.png?w=652" alt=""   /></a></p>
<h2>Apache Traffic Server</h2>
<h3>Configuration:</h3>
<p>According to the documentation, Traffic Server does not require special optimizations.</p>
<p>File <em>/usr/local/etc/trafficserver/storage.config</em></p>
<p><pre class="brush: bash;">
var/trafficserver 256M
</pre></p>
<p>The file <em>/usr/local/etc/trafficserver/records.config</em> contains a lot of properties. Just check that the following entries are configured to support the reverse proxy mode, and disable logging:</p>
<p><pre class="brush: bash;">
CONFIG proxy.config.reverse_proxy.enabled INT 1
CONFIG proxy.config.proxy_name STRING nico-laptop # &lt;your hostname&gt;
CONFIG proxy.config.log.logging_enabled INT 0
</pre></p>
<p>Let&#8217;s configure the mapping in the file <em>/usr/local/etc/trafficserver/remap.config</em>:</p>
<p><pre class="brush: bash;">
map          http://127.0.0.1:8080/      http://127.0.0.1/
</pre></p>
<p>Nginx is used as the backend server on port 80/tcp.</p>
<h3>Results:</h3>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/plot-trafficserver1.png"><img class="aligncenter size-full wp-image-384" title="plot-trafficserver" src="http://nbonvin.files.wordpress.com/2011/03/plot-trafficserver1.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-trafficserver1.png"><img class="aligncenter size-full wp-image-385" title="resources-trafficserver" src="http://nbonvin.files.wordpress.com/2011/03/resources-trafficserver1.png?w=652" alt=""   /></a></p>
<h2>G-WAN</h2>
<h3>Configuration:</h3>
<p>Except running G-WAN with root priviledges, nothing has to be done to further optimize the performance:</p>
<p><pre class="brush: bash;">
sudo ./gwan
</pre></p>
<h3>Results:</h3>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/plot-gwan.png"><img class="aligncenter size-full wp-image-351" title="plot-gwan" src="http://nbonvin.files.wordpress.com/2011/03/plot-gwan.png?w=652" alt=""   /></a></p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/resources-gwan.png"><img class="aligncenter size-full wp-image-352" title="resources-gwan" src="http://nbonvin.files.wordpress.com/2011/03/resources-gwan.png?w=652" alt=""   /></a></p>
<h2>Discussion</h2>
<h2><span style="font-size:15px;">Minimum RPS</span></h2>
<p><span style="font-size:15px;"><a href="http://nbonvin.files.wordpress.com/2011/03/min2.png"><img class="aligncenter size-full wp-image-386" title="min" src="http://nbonvin.files.wordpress.com/2011/03/min2.png?w=652" alt=""   /></a><br />
</span></p>
<h3>Average RPS</h3>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/avg2.png"><img class="aligncenter size-full wp-image-387" title="avg" src="http://nbonvin.files.wordpress.com/2011/03/avg2.png?w=652" alt=""   /></a></p>
<h3>Maximum RPS</h3>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/max2.png"><img class="aligncenter size-full wp-image-388" title="max" src="http://nbonvin.files.wordpress.com/2011/03/max2.png?w=652" alt=""   /></a></p>
<h3>CPU Usage</h3>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/cpu2.png"><img class="aligncenter size-full wp-image-389" title="cpu" src="http://nbonvin.files.wordpress.com/2011/03/cpu2.png?w=652" alt=""   /></a></p>
<h3>Memory Usage</h3>
<p><span style="font-size:15px;"><a href="http://nbonvin.files.wordpress.com/2011/03/mem2.png"><img class="aligncenter size-full wp-image-390" title="mem" src="http://nbonvin.files.wordpress.com/2011/03/mem2.png?w=652" alt=""   /></a><br />
</span></p>
<h2>Conclusion</h2>
<p>G-WAN seems again to perform a lot better than the other servers.  Nginx always performs slightly better than Lighttpd, while Apache Traffic server is very similar to Lighttpd in term of performance. Finally, Varnish Cache serves only half of the requests compared to all others. Surprisingly , there are quite few differences between the results with optimized settings and those with the default settings.</p>
<p>Regarding the resources used by each server, Nginx is the winner in term of memory usage, as the amount of memory does not increases with the number of concurrent clients. G-WAN requires 2 times less CPU than the other servers.</p>
<p>Again, keep in mind that this benchmark compares only the servers locally (no networking is involved), and therefore the results might be misleading.</p>
<p><span style="font-size:15px;"><br />
</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/315/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/315/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=315&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/feed/</wfw:commentRss>
		<slash:comments>126</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-varnish.png" medium="image">
			<media:title type="html">plot-varnish</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-varnish.png" medium="image">
			<media:title type="html">resources-varnish</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-nginx-2workers1.png" medium="image">
			<media:title type="html">plot-nginx-2workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-nginx-2workers1.png" medium="image">
			<media:title type="html">resources-nginx-2workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-nginx-4workers1.png" medium="image">
			<media:title type="html">plot-nginx-4workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-nginx-4workers1.png" medium="image">
			<media:title type="html">resources-nginx-4workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-nginx_1-0-2workers.png" medium="image">
			<media:title type="html">plot-nginx_1.0-2workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-nginx_1-0-2workers.png" medium="image">
			<media:title type="html">resources-nginx_1.0-2workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-nginx_1-0-4workers.png" medium="image">
			<media:title type="html">plot-nginx_1.0-4workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-nginx_1-0-4workers.png" medium="image">
			<media:title type="html">resources-nginx_1.0-4workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-lighttpd-2worker.png" medium="image">
			<media:title type="html">plot-lighttpd-2worker</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-lighttpd-2worker.png" medium="image">
			<media:title type="html">resources-lighttpd-2worker</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-lighttpd-4workers.png" medium="image">
			<media:title type="html">plot-lighttpd-4workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-lighttpd-4workers.png" medium="image">
			<media:title type="html">resources-lighttpd-4workers</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-trafficserver1.png" medium="image">
			<media:title type="html">plot-trafficserver</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-trafficserver1.png" medium="image">
			<media:title type="html">resources-trafficserver</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/plot-gwan.png" medium="image">
			<media:title type="html">plot-gwan</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/resources-gwan.png" medium="image">
			<media:title type="html">resources-gwan</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/min2.png" medium="image">
			<media:title type="html">min</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/avg2.png" medium="image">
			<media:title type="html">avg</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/max2.png" medium="image">
			<media:title type="html">max</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/cpu2.png" medium="image">
			<media:title type="html">cpu</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/mem2.png" medium="image">
			<media:title type="html">mem</media:title>
		</media:content>
	</item>
		<item>
		<title>Serving static files: a comparison between Apache, Nginx, Varnish and G-WAN</title>
		<link>http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/</link>
		<comments>http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 11:47:06 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[benchmark]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cherokee]]></category>
		<category><![CDATA[gwan]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[static]]></category>
		<category><![CDATA[varnish]]></category>

		<guid isPermaLink="false">http://nbonvin.wordpress.com/?p=233</guid>
		<description><![CDATA[Update 1 (Mar 16, 2011): Apache MPM-Event benchmark added Update 2 (Mar 16, 2011): Second run of Varnish benchmark added Update 3 (Mar 16, 2011): Cherokee benchmark added Update 4 (Mar 25, 2011): New benchmark with the optimized settings is available Introduction Apache is the de facto web server on Unix system. Nginx is nowadays a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=233&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><strong>Update 1 (Mar 16, 2011):</strong> Apache MPM-Event benchmark added<br />
<strong>Update 2  (Mar 16, 2011):</strong> Second run of Varnish benchmark added<br />
<strong>Update 3 (Mar 16, 2011):</strong> Cherokee benchmark added<br />
<strong>Update 4 (Mar 25, 2011):</strong> New benchmark with the optimized settings is <a href="http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/">available</a></p>
<h2>Introduction</h2>
<p><a href="http://httpd.apache.org/">Apache</a> is the de facto web server on Unix system. <a href="http://wiki.nginx.org/">Nginx</a> is nowadays a popular and performant web server for serving static files (i.e. static html pages, CSS files, Javascript files, pictures, &#8230;). On the other hand, <a href="http://www.varnish-cache.org/">Varnish Cache</a> is increasingly used to make websites &#8220;fly&#8221; by caching static content in memory. Recently, I came across a new application server called <a href="http://gwan.ch/">G-WAN</a>. I&#8217;m only interested here in serving static content, even if G-WAN is also able to serve dynamic content, using ANSI C scripting. Finally, I also included <a href="http://www.cherokee-project.com/">Cherokee</a> in the benchmark.</p>
<p><span id="more-233"></span></p>
<h3>Setup</h3>
<p>The following version of the software are used for this benchmark:</p>
<ul>
<li>Apache MPM-worker: ﻿2.2.16-1ubuntu3.1 (64 bit)</li>
<li>Apache MPM-event: 2.2.16-1ubuntu3.1 (64 bit)</li>
<li>Nginx: ﻿0.7.67-3ubuntu1 (64 bit)</li>
<li>Varnish:  ﻿2.1.3-7ubuntu0.1 (64 bit)</li>
<li>G-WAN: ﻿2.1.20 (32 bit)</li>
<li>Cherokee: 1.2.1-1~maverick~ppa1 (64 bit)</li>
</ul>
<p>All tests are performed on an ASUS U30JC (﻿Intel Core i3 &#8211; 370M @﻿ 2.4 Ghz, Hard drive 5400 rpm, Memory: 4GB DDR3 1066MHz)﻿ running Ubuntu 10.10 64 bit (kernel ﻿2.6.35).</p>
<p><strong>Benchmark setup</strong></p>
<ul>
<li>HTTP Keep-Alives: <em>enabled</em></li>
<li>TCP/IP settings: <em>OS default</em></li>
<li>Server settings:<em> default</em></li>
<li>Concurrency: <em>from 0 to 1&#8217;000, step 10</em></li>
<li>Requests: <em>1&#8217;000&#8217;000</em>﻿</li>
</ul>
<p>The following file of 100 byte is used as static content: <em>/var/www/100.html</em></p>
<p><pre class="brush: bash;">
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
</pre></p>
<p><strong>Disclaimer</strong></p>
<p>Doing a correct benchmark is clearly not an easy task. There are many walls (TCP/IP stack, OS settings, the client, &#8230;) that may corrupt the results, and there is always the risk to compare apples with oranges (e.g. benchmarking the ﻿TCP/IP stack instead of the server itself).</p>
<p>In this benchmark, every server is tested using its default settings. The same applies for the OS. Of course, on a production environment, each setting will be optimized. This has been done in a <a href="http://nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/">second benchmark</a>. If you have comments, improvements, ideas, please feel free to contact me, I&#8217;m always open to improve myself and to learn new things.</p>
<h3>Client</h3>
<p>The client (available here: <a rel="nofollow" href="http://gwan.ch/source/ab.c.txt" target="_blank">http://gwan.ch/source/ab.c.txt</a>) relies on <a href="http://httpd.apache.org/docs/2.0/programs/ab.html">ApacheBench</a> (ab). The client as well as the web server tested are hosted on the same computer.</p>
<h2>Apache (MPM-worker)</h2>
<h3>Configuration</h3>
<p>Relevant part of file <em>/etc/apache2/apache2.conf</em></p>
<p><pre class="brush: bash;">

    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0

</pre></p>
<h3>Benchmark results</h3>
<p>The benchmark took 1174 seconds in total.</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/test-apache-mpm-worker.png"><img class="aligncenter size-full wp-image-281" title="test-apache-mpm-worker" src="http://nbonvin.files.wordpress.com/2011/03/test-apache-mpm-worker.png?w=652" alt=""   /></a></p>
<h2>Apache (MPM-event)</h2>
<h3>Configuration</h3>
<p>Relevant part of file <em>/etc/apache2/apache2.conf</em></p>
<p><pre class="brush: bash;">

    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0

</pre></p>
<h3>Benchmark results</h3>
<p>The benchmark took 1904 seconds in total.<br />
<a href="http://nbonvin.files.wordpress.com/2011/03/test-apache-mpm-event.png"><img class="aligncenter size-full wp-image-299" title="test-apache-mpm-event" src="http://nbonvin.files.wordpress.com/2011/03/test-apache-mpm-event.png?w=652" alt=""   /></a></p>
<h2>Nginx</h2>
<h3>Configuration</h3>
<p>File <em>/etc/nginx/nginx.conf </em></p>
<p><pre class="brush: bash;">
user www-data;
worker_processes  1;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
    # multi_accept on;
}
http {
    include       /etc/nginx/mime.types;
    access_log  /var/log/nginx/access.log;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;
    gzip  on;
    gzip_disable &quot;MSIE [1-6]\.(?!.*SV1)&quot;;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
</pre></p>
<p>File <em>/etc/nginx/sites-enabled/default</em></p>
<p><pre class="brush: bash;">
server {
        listen   80; ## listen for ipv4
        server_name  localhost;
        access_log  /var/log/nginx/localhost.access.log;
        location / {
                root   /var/www;
                index  index.html index.htm;
        }
}
</pre></p>
<h3>Benchmark results</h3>
<p>The benchmark took 1048 seconds in total.</p>
<p style="text-align:center;"><a href="http://nbonvin.files.wordpress.com/2011/03/test-nginx-1worker.png"><img class="size-full wp-image-260 aligncenter" title="nginx-1worker" src="http://nbonvin.files.wordpress.com/2011/03/test-nginx-1worker.png?w=652" alt=""   /></a></p>
<h2>Varnish</h2>
<p>Varnish uses Nginx as backend. However, only one request every 2 minutes hits Nginx, the other requests are served directly by Varnish.</p>
<h3>Configuration</h3>
<p>File <em>/etc/varnish/default.vcl</em></p>
<p><pre class="brush: bash;">
backend default {
   .host = &quot;127.0.0.1&quot;;
   .port = &quot;80&quot;;
}
</pre></p>
<p>File <em>/etc/default/varnish</em></p>
<p><pre class="brush: bash;">
START=yes
NFILES=131072
MEMLOCK=82000
INSTANCE=$(uname -n)
DAEMON_OPTS=&quot;-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G&quot;
</pre></p>
<h3>Benchmark results</h3>
<p><strong>Run: 1</strong><br />
The benchmark took 1297 seconds in total.</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/test-varnish1.png"><img class="aligncenter size-full wp-image-266" title="test-varnish" src="http://nbonvin.files.wordpress.com/2011/03/test-varnish1.png?w=652" alt=""   /></a><br />
<strong>Run: 2</strong><br />
The benchmark took 1313 seconds in total.</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/test-varnish2.png"><img class="aligncenter size-full wp-image-301" title="test-varnish2" src="http://nbonvin.files.wordpress.com/2011/03/test-varnish2.png?w=652" alt=""   /></a></p>
<p>As some people requested more details regarding the benchmark of Varnish, here is the output of ﻿<em>varnishstat -1</em>:</p>
<p><pre class="brush: bash;">
client_conn            504664       281.31 Client connections accepted
client_drop                 0         0.00 Connection dropped, no sess/wrk
client_req           20245482     11285.11 Client requests received
cache_hit            20245471     11285.10 Cache hits
cache_hitpass               0         0.00 Cache hits for pass
cache_miss                 11         0.01 Cache misses
backend_conn               11         0.01 Backend conn. success
backend_unhealthy            0         0.00 Backend conn. not attempted
backend_busy                0         0.00 Backend conn. too many
backend_fail                0         0.00 Backend conn. failures
backend_reuse               0         0.00 Backend conn. reuses
backend_toolate            10         0.01 Backend conn. was closed
backend_recycle            11         0.01 Backend conn. recycles
backend_unused              0         0.00 Backend conn. unused
fetch_head                  0         0.00 Fetch head
fetch_length                0         0.00 Fetch with Length
fetch_chunked              11         0.01 Fetch chunked
fetch_eof                   0         0.00 Fetch EOF
fetch_bad                   0         0.00 Fetch had bad headers
fetch_close                 0         0.00 Fetch wanted close
fetch_oldhttp               0         0.00 Fetch pre HTTP/1.1 closed
fetch_zero                  0         0.00 Fetch zero len
fetch_failed                0         0.00 Fetch failed
n_sess_mem               2963          .   N struct sess_mem
n_sess                   1980          .   N struct sess
n_object                    0          .   N struct object
n_vampireobject             0          .   N unresurrected objects
n_objectcore              393          .   N struct objectcore
n_objecthead              393          .   N struct objecthead
n_smf                       2          .   N struct smf
n_smf_frag                  0          .   N small free smf
n_smf_large                 2          .   N large free smf
n_vbe_conn                  1          .   N struct vbe_conn
n_wrk                     396          .   N worker threads
n_wrk_create              500         0.28 N worker threads created
n_wrk_failed                0         0.00 N worker threads not created
n_wrk_max              118979        66.32 N worker threads limited
n_wrk_queue                 0         0.00 N queued work requests
n_wrk_overflow         133755        74.56 N overflowed work requests
n_wrk_drop                  0         0.00 N dropped work requests
n_backend                   1          .   N backends
n_expired                  11          .   N expired objects
n_lru_nuked                 0          .   N LRU nuked objects
n_lru_saved                 0          .   N LRU saved objects
n_lru_moved               557          .   N LRU moved objects
n_deathrow                  0          .   N objects on deathrow
losthdr                  7470         4.16 HTTP header overflows
n_objsendfile               0         0.00 Objects sent with sendfile
n_objwrite           20215571     11268.43 Objects sent with write
n_objoverflow               0         0.00 Objects overflowing workspace
s_sess                 504664       281.31 Total Sessions
s_req                20245482     11285.11 Total Requests
s_pipe                      0         0.00 Total pipe
s_pass                      0         0.00 Total pass
s_fetch                    11         0.01 Total fetch
s_hdrbytes         5913383706   3296200.51 Total header bytes
s_bodybytes         526382532    293412.78 Total body bytes
sess_closed            382711       213.33 Session Closed
sess_pipeline               0         0.00 Session Pipeline
sess_readahead              0         0.00 Session Read Ahead
sess_linger          20245482     11285.11 Session Linger
sess_herd              124222        69.24 Session herd
shm_records         689986796    384608.02 SHM records
shm_writes           21885539     12199.30 SHM writes
shm_flushes                 0         0.00 SHM flushes due to overflow
shm_cont               282730       157.60 SHM MTX contention
shm_cycles                200         0.11 SHM cycles through buffer
sm_nreq                    22         0.01 allocator requests
sm_nobj                     0          .   outstanding allocations
sm_balloc                   0          .   bytes allocated
sm_bfree           1073741824          .   bytes free
sma_nreq                    0         0.00 SMA allocator requests
sma_nobj                    0          .   SMA outstanding allocations
sma_nbytes                  0          .   SMA outstanding bytes
sma_balloc                  0          .   SMA bytes allocated
sma_bfree                   0          .   SMA bytes free
sms_nreq                    0         0.00 SMS allocator requests
sms_nobj                    0          .   SMS outstanding allocations
sms_nbytes                  0          .   SMS outstanding bytes
sms_balloc                  0          .   SMS bytes allocated
sms_bfree                   0          .   SMS bytes freed
backend_req                11         0.01 Backend requests made
n_vcl                       1         0.00 N vcl total
n_vcl_avail                 1         0.00 N vcl available
n_vcl_discard               0         0.00 N vcl discarded
n_purge                     1          .   N total active purges
n_purge_add                 1         0.00 N new purges added
n_purge_retire              0         0.00 N old purges deleted
n_purge_obj_test            0         0.00 N objects tested
n_purge_re_test             0         0.00 N regexps tested against
n_purge_dups                0         0.00 N duplicate purges removed
hcb_nolock           20219699     11270.74 HCB Lookups without lock
hcb_lock                    1         0.00 HCB Lookups with lock
hcb_insert                  1         0.00 HCB Inserts
esi_parse                   0         0.00 Objects ESI parsed (unlock)
esi_errors                  0         0.00 ESI parse errors (unlock)
accept_fail                 0         0.00 Accept failures
client_drop_late            0         0.00 Connection dropped late
uptime                   1794         1.00 Client uptime
</pre></p>
<h2>G-WAN</h2>
<h3>Configuration</h3>
<p>The configuration of G-WAN is done through the file hierarchy. Therefore, unzipping the G-WAN archive was enough to have a fully working server.</p>
<h3>Benchmark results</h3>
<p>The benchmark took 607 seconds in total.</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/test-gwan.png"><img class="aligncenter size-full wp-image-267" title="test-gwan" src="http://nbonvin.files.wordpress.com/2011/03/test-gwan.png?w=652" alt=""   /></a></p>
<h2>Cherokee</h2>
<h3>Configuration</h3>
<p>Relevant part of file <em>/etc/cherokee/cherokee.conf</em></p>
<p><pre class="brush: bash;">
# Server
#
server!bind!1!port = 80
server!timeout = 15
server!keepalive = 1
server!keepalive_max_requests = 500
server!server_tokens = full
server!panic_action = /usr/share/cherokee/cherokee-panic
server!pid_file = /var/run/cherokee.pid
server!user = www-data
server!group = www-data

# Default virtual server
#
vserver!1!nick = default
vserver!1!document_root = /var/www
vserver!1!directory_index = index.html
</pre></p>
<h3>Benchmark results</h3>
<p>The benchmark took 1068 seconds in total.</p>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/test-cherokee.png"><img class="aligncenter size-full wp-image-303" title="test-cherokee" src="http://nbonvin.files.wordpress.com/2011/03/test-cherokee.png?w=652" alt=""   /></a></p>
<h2>Discussion</h2>
<p>Let&#8217;s now compare the minimum, the average and the maximum requests per second rate of each server.</p>
<h3>Minimum RPS</h3>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/min1.png"><img class="aligncenter size-full wp-image-282" title="min" src="http://nbonvin.files.wordpress.com/2011/03/min1.png?w=652" alt=""   /></a></p>
<h3>Average RPS</h3>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/avg1.png"><img class="aligncenter size-full wp-image-283" title="avg" src="http://nbonvin.files.wordpress.com/2011/03/avg1.png?w=652" alt=""   /></a></p>
<h3>Maximum RPS</h3>
<p><a href="http://nbonvin.files.wordpress.com/2011/03/max1.png"><img class="aligncenter size-full wp-image-284" title="max" src="http://nbonvin.files.wordpress.com/2011/03/max1.png?w=652" alt=""   /></a></p>
<h2>Conclusion</h2>
<p>G-WAN is the clear winner of this benchmark, while Nginx and Varnish have simliar average performance. It&#8217;s not a real surprise to see Apache at the last position.</p>
<ul>
<li>G-WAN can serve 2.25 times more requests per second on average compared to Cherokee, from 4.25 to 6.5 times compared to Nginx and Varnish, and from 9 to 13.5 times more than Apache.</li>
<li>Nginx / Varnish can serve 2.1 times more requests per second on average compared to Apache.</li>
<li>Nginx needs 1.73 more time to serve the same amount of requests compared to G-WAN.</li>
<li>Varnish needs 2.14 more time to serve the same amount of requests compared to G-WAN.</li>
<li>Apache ﻿needs 1.93 more time to serve a similar amount of requests compared to G-WAN (i.e. Apache sometimes replied with an error 503 and didn&#8217;t serve the exact same amount of requests).</li>
</ul>
<p>Again, keep in mind that this benchmark compares only the servers with their out of the box settings locally (no networking is involved), and therefore the results might be misleading.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/233/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=233&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/test-apache-mpm-worker.png" medium="image">
			<media:title type="html">test-apache-mpm-worker</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/test-apache-mpm-event.png" medium="image">
			<media:title type="html">test-apache-mpm-event</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/test-nginx-1worker.png" medium="image">
			<media:title type="html">nginx-1worker</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/test-varnish1.png" medium="image">
			<media:title type="html">test-varnish</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/test-varnish2.png" medium="image">
			<media:title type="html">test-varnish2</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/test-gwan.png" medium="image">
			<media:title type="html">test-gwan</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/test-cherokee.png" medium="image">
			<media:title type="html">test-cherokee</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/min1.png" medium="image">
			<media:title type="html">min</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/avg1.png" medium="image">
			<media:title type="html">avg</media:title>
		</media:content>

		<media:content url="http://nbonvin.files.wordpress.com/2011/03/max1.png" medium="image">
			<media:title type="html">max</media:title>
		</media:content>
	</item>
		<item>
		<title>Convert WMA to MP3</title>
		<link>http://nbonvin.wordpress.com/2010/07/27/convert-wma-to-mp3/</link>
		<comments>http://nbonvin.wordpress.com/2010/07/27/convert-wma-to-mp3/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 10:58:24 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[mp3]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[wma]]></category>

		<guid isPermaLink="false">http://skorage.org/?p=227</guid>
		<description><![CDATA[Here is a simple script I&#8217;m using to convert wma music files to mp3:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=227&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Here is a simple script I&#8217;m using to convert wma music files to mp3:<br />
<pre class="brush: bash;">
#!/bin/bash

current_directory=$( pwd )

#remove spaces
for i in *.wma; do mv &quot;$i&quot; `echo $i | tr ' ' '_'`; done

#remove uppercase
for i in *.[Ww][Mm][Aa]; do mv &quot;$i&quot; `echo $i | tr '[A-Z]' '[a-z]'`; done

#Rip with Mplayer / encode with LAME
for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader $i &amp;&amp; lame -m s audiodump.wav -o $i; done

#convert file names
for i in *.wma; do mv &quot;$i&quot; &quot;`basename &quot;$i&quot; .wma`.mp3&quot;; done

rm audiodump.wav
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=227&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2010/07/27/convert-wma-to-mp3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>
	</item>
		<item>
		<title>On Designing and Deploying Internet-Scale Services</title>
		<link>http://nbonvin.wordpress.com/2010/05/31/on-designing-and-deploying-internet-scale-services/</link>
		<comments>http://nbonvin.wordpress.com/2010/05/31/on-designing-and-deploying-internet-scale-services/#comments</comments>
		<pubDate>Mon, 31 May 2010 09:42:46 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://skorage.org/?p=223</guid>
		<description><![CDATA[Very interesting paper by James Hamilton. The paper gives a set of best practices for designing and developing operations-friendly services. ABSTRACT The system-to-administrator ratio is commonly used as a rough metric to understand adminis- trative costs in high-scale services. With smaller, less automated services this ratio can be as low as 2:1, whereas on industry leading, highly [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=223&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Very interesting <a href="http://www.mvdirona.com/jrh/talksAndPapers/JamesRH_Lisa.pdf">paper</a> by James Hamilton. The paper gives a set of best practices for designing and developing operations-friendly services.</p>
<blockquote>
<div id="_mcePaste">ABSTRACT</div>
<div id="_mcePaste">The system-to-administrator ratio is commonly used as a rough metric to understand adminis-</div>
<div id="_mcePaste">trative costs in high-scale services. With smaller, less automated services this ratio can be as low as</div>
<div id="_mcePaste">2:1, whereas on industry leading, highly automated services, we’ve seen ratios as high as 2,500:1.</div>
<div id="_mcePaste">Within Microsoft services, Autopilot [1] is often cited as the magic behind the success of the Win-</div>
<div id="_mcePaste">dows Live Search team in achieving high system-to-administrator ratios. While auto-administration</div>
<div id="_mcePaste">is important, the most important factor is actually the service itself. Is the service efficient to auto-</div>
<div id="_mcePaste">mate? Is it what we refer to more generally as operations-friendly? Services that are operations-</div>
<div id="_mcePaste">friendly require little human intervention, and both detect and recover from all but the most obscure</div>
<div id="_mcePaste">failures without administrative intervention. This paper summarizes the best practices accumulated</div>
<div id="_mcePaste">over many years in scaling some of the largest services at MSN and Windows Live.</div>
</blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=223&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2010/05/31/on-designing-and-deploying-internet-scale-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>
	</item>
		<item>
		<title>7 lessons learned while building REDDIT (270 mio page views a month)</title>
		<link>http://nbonvin.wordpress.com/2010/05/18/7-lessons-learned-while-building-reddit-270-mio-page-views-a-month/</link>
		<comments>http://nbonvin.wordpress.com/2010/05/18/7-lessons-learned-while-building-reddit-270-mio-page-views-a-month/#comments</comments>
		<pubDate>Tue, 18 May 2010 08:47:38 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[storage]]></category>
		<category><![CDATA[reddit]]></category>

		<guid isPermaLink="false">http://skorage.org/?p=220</guid>
		<description><![CDATA[Very interesting article.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=220&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Very interesting <a href="http://highscalability.com/blog/2010/5/17/7-lessons-learned-while-building-reddit-to-270-million-page.html">article</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/220/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=220&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2010/05/18/7-lessons-learned-while-building-reddit-270-mio-page-views-a-month/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>
	</item>
		<item>
		<title>Scalability, Availability &amp; Stability Patterns</title>
		<link>http://nbonvin.wordpress.com/2010/05/16/scalability-availability-stability-patterns/</link>
		<comments>http://nbonvin.wordpress.com/2010/05/16/scalability-availability-stability-patterns/#comments</comments>
		<pubDate>Sun, 16 May 2010 16:23:44 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://skorage.org/?p=214</guid>
		<description><![CDATA[197 slides from Jonas Boner covering a very wide range of scalability topics.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=214&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<div id="__ss_4062682" style="width:425px;">197 slides from Jonas Boner covering a very wide range of scalability topics.</div>
<div style="width:425px;"></div>
<div style="width:425px;"><iframe src='http://www.slideshare.net/slideshow/embed_code/4062682' width='652' height='534'></iframe></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=214&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2010/05/16/scalability-availability-stability-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>
	</item>
		<item>
		<title>Another real-time search and indexing system built on Apache Lucene.</title>
		<link>http://nbonvin.wordpress.com/2010/02/20/another-real-time-search-and-indexing-system-built-on-apache-lucene/</link>
		<comments>http://nbonvin.wordpress.com/2010/02/20/another-real-time-search-and-indexing-system-built-on-apache-lucene/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 10:24:18 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[lucene]]></category>

		<guid isPermaLink="false">http://skorage.org/?p=212</guid>
		<description><![CDATA[From their website: Zoie is a mature open source project and has been deployed in a real-time large-scale consumer website: LinkedIn.com handling millions of searches as well as hundreds of thousands of updates daily. All Zoie releases have gone through extensive functional and performance testing by LinkedIn before made public. All major versions are released [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=212&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>From their <a href="http://sna-projects.com/zoie/">website</a>:</p>
<blockquote><p><a href="http://sna-projects.com/zoie/">Zoie</a> is a mature open source project and has been deployed in a real-time large-scale consumer website: LinkedIn.com handling millions of searches as well as hundreds of thousands of updates daily.</p>
<p>All Zoie releases have gone through extensive functional and performance testing by LinkedIn before made public. All major versions are released after a trial period on the production environment.</p>
<p>In a real-time search/indexing system, a document is made available as soon as it is added to the index. This functionality is especially important to time-sensitive information such as news, job openings, tweets etc.</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=212&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2010/02/20/another-real-time-search-and-indexing-system-built-on-apache-lucene/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>
	</item>
		<item>
		<title>Scalability library</title>
		<link>http://nbonvin.wordpress.com/2010/02/15/scalability-library/</link>
		<comments>http://nbonvin.wordpress.com/2010/02/15/scalability-library/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 15:12:21 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[scalabilty]]></category>

		<guid isPermaLink="false">http://skorage.org/?p=208</guid>
		<description><![CDATA[Interesting links related to ﻿large-scale web architectures.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=208&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Interesting <a href="http://www.royans.net/arch/library/">links</a> related to ﻿large-scale web architectures.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=208&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2010/02/15/scalability-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>
	</item>
		<item>
		<title>Top 10 Internet Startup Scalability Killers</title>
		<link>http://nbonvin.wordpress.com/2009/12/22/top-10-internet-startup-scalability-killers/</link>
		<comments>http://nbonvin.wordpress.com/2009/12/22/top-10-internet-startup-scalability-killers/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 14:22:50 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[scalabilty]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://skorage.org/?p=206</guid>
		<description><![CDATA[Strategies taken from The Art of Scalability: 1. Thinking Scalability Is Just About Technology; 2. Overuse of Synchronous Calls; 3. Failure to Weed or Seed Soon Enough; 4. Inappropriate Use of Databases; 5. Cesspools Instead of Swim Lanes; 6. Reliance on Vertical Scale; 7. Failure to Learn from History; 8. Changing Development Methodologies to Fix [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=206&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://gigaom.com/2009/12/20/top-10-internet-startup-scalability-killers/">Strategies</a> taken from <a href="http://www.amazon.com/Art-Scalability-Architecture-Organizations-Enterprise/dp/0137030428/">The Art of Scalability</a>:</p>
<p><em>1. Thinking Scalability Is Just About Technology; </em></p>
<p><em>2. Overuse of Synchronous Calls; </em></p>
<p><em>3. Failure to Weed or Seed Soon Enough;</em></p>
<p><em> 4. Inappropriate Use of Databases; </em></p>
<p><em>5. Cesspools Instead of Swim Lanes; </em></p>
<p><em>6. Reliance on Vertical Scale; </em></p>
<p><em>7. Failure to Learn from History; </em></p>
<p><em>8. Changing Development Methodologies to Fix Problems; </em></p>
<p><em>9. Too Little Caching, Too Late;</em></p>
<p><em> 10. Overreliance on Third Parties to Scale.</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/206/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=206&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2009/12/22/top-10-internet-startup-scalability-killers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>
	</item>
		<item>
		<title>Serving Data from Multiple Datacenters: the Google way</title>
		<link>http://nbonvin.wordpress.com/2009/08/28/serving-data-from-multiple-datacenters-the-google-way/</link>
		<comments>http://nbonvin.wordpress.com/2009/08/28/serving-data-from-multiple-datacenters-the-google-way/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 10:24:40 +0000</pubDate>
		<dc:creator>nbonvin</dc:creator>
				<category><![CDATA[distributed computing]]></category>

		<guid isPermaLink="false">http://skorage.org/?p=202</guid>
		<description><![CDATA[Interesting video. Some more details are given here.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=202&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Interesting <a href="http://code.google.com/intl/fr/events/io/sessions/TransactionsAcrossDatacenters.html">video</a>. Some more details are given<a href="http://highscalability.com/how-google-serves-data-multiple-datacenters"> here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nbonvin.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nbonvin.wordpress.com/202/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nbonvin.wordpress.com&#038;blog=6647879&#038;post=202&#038;subd=nbonvin&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://nbonvin.wordpress.com/2009/08/28/serving-data-from-multiple-datacenters-the-google-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cdb6cdfdbd4a2ebdb4122a6aa6f2be60?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">nbonvin</media:title>
		</media:content>
	</item>
	</channel>
</rss>
