<?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/"
	>

<channel>
	<title>StyleFeeder Tech Blog &#187; HTTP</title>
	<atom:link href="http://blog.tech.stylefeeder.com/category/http/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tech.stylefeeder.com</link>
	<description>Bitheads Invade the Fashion World</description>
	<lastBuildDate>Mon, 02 Nov 2009 17:01:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CDN Evaluation Criteria</title>
		<link>http://blog.tech.stylefeeder.com/2009/09/24/cdn-evaluation-criteria/</link>
		<comments>http://blog.tech.stylefeeder.com/2009/09/24/cdn-evaluation-criteria/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 15:20:31 +0000</pubDate>
		<dc:creator>Philip Jacob</dc:creator>
				<category><![CDATA[Cloud computing]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://blog.tech.stylefeeder.com/?p=239</guid>
		<description><![CDATA[A friend asked me about StyleFeeder&#8217;s experience using CDNs, so I sent him the list of criteria that we use to evaluate the various content delivery networks that we have tried.  We&#8217;re currently using Akamai, Cloudfront and Panther for various types of content.  I&#8217;ve talked to pretty much everybody in the CDN space over the [...]]]></description>
			<content:encoded><![CDATA[<p>A friend asked me about <a href="http://www.stylefeeder.com/">StyleFeeder</a>&#8217;s experience using CDNs, so I sent him the list of criteria that we use to evaluate the various content delivery networks that we have tried.  We&#8217;re currently using Akamai, Cloudfront and Panther for various types of content.  I&#8217;ve talked to pretty much everybody in the CDN space over the years and I think that this list of questions is pretty solid.  If you think otherwise, I&#8217;d be happy to update this list with any new ideas you have.</p>
<p>Note that if you&#8217;re streaming large audio or video files, this list may not be a good one for you.  The questions are biased towards StyleFeeder&#8217;s needs, namely the fact that we have tens of millions of small product images floating around.</p>
<p><strong>CDN Evaluation Criteria:</strong></p>
<ol>
<li>Do you support HTTP compression?  Does content have to exceed a minimum size in order to be compressed?  (i.e. content less than 2Kb is not compressed)</li>
<li>Do you allow us to override the Expires headers being sent by the origin?</li>
<li>Will you obey long Expires headers (5 years) and cache content accordingly?</li>
<li>Once a piece of content has been cached on your network, under what conditions would your CDN re-request that content from the origin?</li>
<li>Do you allow full and partial (based on regexes) cache flushes?</li>
<li>Can you demonstrate that you&#8217;re better than one of the &#8220;value&#8221; CDNs?</li>
<li>How many nodes do you have?</li>
<li>Do you have a lazy-loading caching proxy scheme (like Akamai, Panther, Voxel) to allow for easy deployment?</li>
<li>Is there an API we can use to add or flush content?</li>
</ol>
<p>Let me know if you have other questions that should be on the list!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tech.stylefeeder.com/2009/09/24/cdn-evaluation-criteria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Singing the praises of Nginx</title>
		<link>http://blog.tech.stylefeeder.com/2007/10/05/singing-the-praises-of-nginx/</link>
		<comments>http://blog.tech.stylefeeder.com/2007/10/05/singing-the-praises-of-nginx/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 02:19:41 +0000</pubDate>
		<dc:creator>Philip Jacob</dc:creator>
				<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.tech.stylefeeder.com/2007/10/05/singing-the-praises-of-nginx/</guid>
		<description><![CDATA[ We recently switched over our static content webserver over to Nginx, easily the most impressive webserver I&#8217;ve seen in years.  We&#8217;re running it on a machine with 8Gb of memory (along with some other stuff), but the nginx process is only using a ridiculously small 1.4Mb.  In other words, it barely registers [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: right; padding-left: 8px; padding-bottom: 8px" src="http://blog.tech.stylefeeder.com/wp-content/uploads/2007/10/nginx.gif" alt="Nginx logo" /> We recently switched over our static content webserver over to <a href="http://nginx.net/">Nginx</a>, easily the most impressive webserver I&#8217;ve seen in years.  We&#8217;re running it on a machine with 8Gb of memory (along with some other stuff), but the nginx process is only using a ridiculously small 1.4Mb.  In other words, it barely registers in any measurable way.  I&#8217;ve seen reports of it handling tens of thousands of concurrent connections on a single box, well beyond where the venerable <a href="http://www.apache.org/">Apache</a> will scale to.</p>
<p>One unique feature of Nginx is the notion of <a href="http://hostingfu.com/article/nginx-and-mirror-demand">mirror-on-demand</a>, which I recently explained to a friend as caching but without a removal policy.   What we wanted was our static asset server to do was exactly this.  We&#8217;re using this as a way to get content from our backend app server and then to cache it forever in the filesystem that our nginx servers can read from.  It turns out that both Apache and Squid simply cannot do this 100% of the time.  Various combinations of Cache-control headers and non-conditional GET requests will cause requests going to the backend, which, in our case, was exactly what we were trying to avoid.  Plus, I was also looking for <a href="http://www.webreference.com/internet/software/servers/http/compression/">HTTP compression</a> for text/* mime-types.  <a href="http://www.squid-cache.org/">Squid</a> doesn&#8217;t do compression, period.  It does, however, do de-compression, so you can get gzipped content from a backend server and then serve it up uncompressed, which may be useful in some arcane cases.</p>
<p>I should mention here that our first choice was actually to use <a href="http://www.lighttpd.net/">Lighttpd</a> with mod_cache, which is capable of doing this kind of &#8220;only retrieve this content from the backend exactly once&#8221; caching.  However, within literally minutes of deploying, we ran into corruption issues with some Javascript and CSS content that we didn&#8217;t detect during our testing.  I saw many instances of corrupted cache content during the time that we used Lighttpd and <a href="http://trac.lighttpd.net/trac/wiki/Docs:ModCache">mod_cache</a> and quickly decided that I needed to explore other options.</p>
<p>Our experience with nginx was great from the start.  Most of the docs are in Russian, but the <a href="http://wiki.codemongers.com/Main">English docs</a> are very well done and quite adequate all around.  Configuration is a cinch and deployment was easy as pie.  The only hiccup was that I noticed that nginx does not set a Content-length header on content that has undergone HTTP compression (gzip).  This is minor for our purposes.</p>
<p>In short, nginx rocks hard.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tech.stylefeeder.com/2007/10/05/singing-the-praises-of-nginx/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
