<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Server on Stefano Chiodino</title>
    <link>https://stefano.chiodino.uk/tags/server/</link>
    <description>Recent content in Server on Stefano Chiodino</description>
    <generator>Hugo -- 0.147.7</generator>
    <language>en</language>
    <lastBuildDate>Sat, 14 May 2016 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://stefano.chiodino.uk/tags/server/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Server load test</title>
      <link>https://stefano.chiodino.uk/posts/server-load-test/</link>
      <pubDate>Sat, 14 May 2016 00:00:00 +0000</pubDate>
      <guid>https://stefano.chiodino.uk/posts/server-load-test/</guid>
      <description>Load testing a $5 Digitalocean server</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve recently tried <a href="https://m.do.co/c/875cd23a5c97" target="_blank">Digitalocean</a> hosting and decided to host this blog on it. I&rsquo;m running a $5 / month server, or droplet as they call it, with 1 CPU, 512 MB of ram, 20 GB SSD and 1 TB of bandwidth. You even get $10 credit when you sign up, sweet!</p>
<p>You may look down on a $5 machine but I&rsquo;ve found it to be more than enough for my need.</p>
<p>I&rsquo;m serving &ldquo;static&rdquo; content that has been generated by <a href="https://gohugo.io" target="_blank">Hugo</a></p>
<p>I recently ran some load testing at work for a newly launched website so I decided to test this $5 server. I&rsquo;ve been using <a href="https://loader.io" target="_blank">loader.io</a> since its basic usage is free.</p>
<h2 id="the-test">The test</h2>
<p>The server responds to a certain number of clients every second for a full minute.</p>
<p>The majority of the users must receive the page in &lt; 5 secs. Only the html is loaded.</p>
<h2 id="plain-html">Plain HTML</h2>
<p>10.000 requests a second! (that is the maximum that loaded.io goes on a free plan)</p>
<h2 id="enable-strong-https">Enable strong HTTPS</h2>
<p><a href="https://www.ssllabs.com/ssltest/analyze.html?d=https%3A%2F%2Fstefano.chiodino.uk" target="_blank" data-vivaldi-spatnav-clickable="1">How strong you say?</a></p>
<p>As expected enabling https is taking its toll. The server can&rsquo;t accommodate less than half of the requests, &ldquo;just&rdquo; 4.000.</p>
<h2 id="full-on-pagespeed-on-strong-https">Full on PageSpeed on strong HTTPS</h2>
<p>I&rsquo;ve then enabled Google&rsquo;s PageSpeed module for Nginx and enabled every performance related filter!</p>
<p>I&rsquo;ve enabled 27 extra filters on top of the 34 enabled by default, leaving just 7 out that were just for compatibility or counterproductive, hell I&rsquo;ve even enabled the filter to make the G analytics script async when it&rsquo;s already implemented that way.</p>
<p>Result: a quite dramatic 150 clients/sec 😀</p>
<p>Here is the list of filters that I&rsquo;ve enabled:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nginx" data-lang="nginx"><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">responsive_images</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">outline_css</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">outline_javascript</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">move_css_above_scripts</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">move_css_to_head</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">rewrite_style_attributes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">prioritize_critical_css</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">make_google_analytics_async</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">canonicalize_javascript_libraries</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">inline_google_font_css</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">local_storage_cache</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">convert_to_webp_animated</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">insert_image_dimensions</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">inline_preview_images</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">resize_mobile_images</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">remove_comments</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">collapse_whitespace</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">elide_attributes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">extend_cache_pdfs</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">sprite_images</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">rewrite_domains</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">trim_urls</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">remove_quotes</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">defer_javascript</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">dedup_inlined_images</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">lazyload_images</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">pagespeed</span> <span class="s">EnableFilters</span> <span class="s">insert_dns_prefetch</span><span class="p">;</span>
</span></span></code></pre></div><h2 id="brotli-max-compression">Brotli (max compression)</h2>
<p>Just add Accept-Encoding: br to loader.io request headers and&hellip; 75 clients / sec. Not bad considering that I&rsquo;ve enabled the maximum (11) level of compression!</p>
<p>..and, if you are curious about the compression, my homepage file sizes are (method from <a href="https://hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli" target="_blank">Mozilla&rsquo;s brotli post </a>):</p>
<table>
<thead>
<tr>
<th>Algorithm</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>none</td>
<td>9508</td>
</tr>
<tr>
<td>gzip</td>
<td>3344</td>
</tr>
<tr>
<td>brotli</td>
<td>2732</td>
</tr>
</tbody>
</table>
]]></content:encoded>
    </item>
  </channel>
</rss>
