<?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>stu.mp</title>
	<atom:link href="http://stu.mp/feed" rel="self" type="application/rss+xml" />
	<link>http://stu.mp</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 01 Apr 2010 20:18:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Why I&#8217;ll never own another server</title>
		<link>http://stu.mp/2010/04/why-ill-never-own-another-server.html</link>
		<comments>http://stu.mp/2010/04/why-ill-never-own-another-server.html#comments</comments>
		<pubDate>Thu, 01 Apr 2010 20:18:55 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[clustering]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4275</guid>
		<description><![CDATA[When Matt and I started SimpleGeo I made a decision early on to use Amazon&#8217;s AWS services to run our infrastructure. A lot of people basically think I&#8217;m nuts for a lot of reasons for this, but I generally get two major questions/concerns when I mention that we run on AWS/EC2.

AWS is slow!
AWS is expensive!

I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>When Matt and I started SimpleGeo I made a decision early on to use Amazon&#8217;s AWS services to run our infrastructure. A lot of people basically think I&#8217;m nuts for a lot of reasons for this, but I generally get two major questions/concerns when I mention that we run on AWS/EC2.</p>
<ol>
<li>AWS is slow!</li>
<li>AWS is expensive!</li>
</ol>
<p><a href="/2009/12/disk-io-and-throughput-benchmarks-on-amazons-ec2.html">I&#8217;ve covered IO performance on EC2 in-depth before</a> and have compared the IO benchmarks, favorably, against numbers from Digg and Media Temple&#8217;s systems engineers. The notion that AWS is too slow for your application is, largely, not supported by the numbers and comparisons. The second point I often make with regards to performance on AWS is that Amazon uses this to run large portions of their own infrastructure. Trust me, if it&#8217;s good enough for the largest online retailer in the world, it&#8217;s good enough for you.</p>
<p>The second point is a bit harder to defend sometimes. Amazon&#8217;s AWS can be cheaper than running your own hardware and vice versus. If you run huge amounts of servers AWS can be a few hundred thousand more by comparison on raw numbers that compare cost of your own hardware to cost of AWS. The problem with this vanilla comparison is it forgets one extremely important cost for startups – opportunity cost.</p>
<p>I have a few rhetorical questions as to why people are not using AWS.</p>
<ul>
<li>How many people does it take to maintain your own DC? People have to wrangle hardware, travel around to various DCs, RMA hardware, etc. If they weren&#8217;t doing those things, or you didn&#8217;t need those people, what could you be doing with those resources if they weren&#8217;t wiring your DC?</li>
<li>How much time, money, effort, and overhead is it going to take to create multiple data centers? Have you negotiated bandwidth contracts before? Do they have power from multiple providers? Do they have power and bandwidth failover? Amazon has amazing economies of scales and has spent thousands of man hours (years?) preparing for power/bandwidth failover, floods/natural disasters, etc.</li>
<li>Managing multiple data centers requires a small army of highly trained network operations people. Have you built DC failover before? Have you implemented load balancing across multiple DCs? It took me about 30 minutes to set up an Elastic Load Balancer that spread traffic across three Availability Zones (Amazon&#8217;s term for DCs).</li>
<li>Have you thought about building your own automation and self-service APIs for the DC you want to build? Fabric/Chef/Puppet/Capistrano combined with AWS&#8217;s automation API is an extremely potent combination for automating large clusters. For instance, we use Fabric and Boto to automate the creation of all nodes in our cluster. I can run a command in Fabric that creates an API server out of thin air, bootstraps it, and puts it into our ELB. This takes about five or so minutes.</li>
<li>Have you ever set up a DC in Europe? What about Asia? Would you even know where to start? I can spin up a server in Europe in a matter of seconds. How much might you spend on flying your network operations folks to and fro all of these DCs you plan on building?</li>
</ul>
<p>These are just a few of the nooks and crannies that people often forget when comparing running their own data centers that I think are extremely important. The two biggest costs, in my opinion, that people forget are opportunity cost and cost of creating automation systems.</p>
<p>To expound a bit on opportunity cost, I&#8217;d like to quote the ever-thoughtful Joi Ito.</p>
<blockquote><p>&#8220;If you want to increase the pace of innovation, you need to lower the cost of failure.&#8221; &#8212; <a href="http://joi.ito.com/">Joi Ito</a></p></blockquote>
<p>I can fire up an entire DC for SimpleGeo with a 20-30 node cluster with a few commands, totally automated, run load/consumption/system tests against it, find flaws in my system, and iterate in a matter of hours at a cost of a few hundred dollars.</p>
<p>The simple fact is, SimpleGeo wouldn&#8217;t be anywhere near as robust, indeed it might not even exist, as it is without leveraging the cloud.</p>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2010/04/why-ill-never-own-another-server.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: Maintain a Rock Star Culture</title>
		<link>http://stu.mp/2010/03/howto-maintain-a-rock-star-culture.html</link>
		<comments>http://stu.mp/2010/03/howto-maintain-a-rock-star-culture.html#comments</comments>
		<pubDate>Sun, 28 Mar 2010 21:25:49 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[hiring]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4270</guid>
		<description><![CDATA[In a recent post I described a few bullet points on how I&#8217;ve managed to go about recruiting great engineers. That&#8217;s all and good, but what happens when you manage to land a few of these people? A common retort to my recruiting efforts at SimpleGeo has been, &#8220;How are you going to get them [...]]]></description>
			<content:encoded><![CDATA[<p>In a recent post I described a few bullet points on how I&#8217;ve <a href="/2010/03/howto-recruit-rock-stars.html">managed to go about recruiting great engineers</a>. That&#8217;s all and good, but what happens when you manage to land a few of these people? A common retort to my recruiting efforts at SimpleGeo has been, &#8220;How are you going to get them to work together without killing each other?&#8221; It&#8217;s a common misperception that all top engineers are also prima donnas who are impossible to work with. I&#8217;d argue that the truly talented engineers are far from prima donnas.</p>
<p>So here is a small list of things you&#8217;re going to have to prepare yourself to do if you want to hire, encourage, and foster a team of top engineers.</p>
<ul>
<li>Don&#8217;t skimp on making them comfortable. You&#8217;re paying this person over $100,000 a year so why cheap out on their hardware, desk, chair, snacks, etc.? What we do at SimpleGeo is we tell them they have about a $3000 budget to purchase an Apple MacBook Pro of their choice and whatever monitor setup they desire. We make sure there&#8217;s plenty of water in the water cooler, soda in the fridge, nice chairs, whiteboards, etc. in the office as well.</li>
<li>You need to be prepared to fire a great engineer. There are going to be great engineers on your team who, for one reason or another, are not going to work out. They&#8217;re causing more harm than good – act quickly and decisively when you identify this. Yes, I just told you to fire great engineers.</li>
<li>Do not allow language and other technology zealotry to take hold amongst your engineers. Truly great engineers will run benchmarks, be pragmatic in their technology choices, and abide by bake-offs. I hate Java with a passion, but if it will pull five times more jobs a second off of RabbitMQ than Python then we&#8217;re using Java for our queue processors.</li>
<li>Allow ample time for proper development and, if that&#8217;s not possible due to arbitrary deadlines, allow developers to circle back after the fact to clean up. Great developers loath writing shitty code; at least give them the opportunity to revisit quickly/poorly written code. They&#8217;ve got a reputation to uphold you know!</li>
<li>Institute and promote proper development cycles and practices. Great engineers will naturally do this on their own and, when they do, get out of their way or figure out how to help with the process.</li>
<li>Hire or promote a great engineer to manage them. Great engineers, for lots of reasons, tend not to trust non-engineers to ensure their voices are heard within the company. If you think about it, engineering is one of the only disciplines where people who were not trained in the vocation are allowed to manage a trained team. You wouldn&#8217;t put a marketing person in charge of accounting would you?</li>
<li>This is a personal preference of mine, but I don&#8217;t think you should hire or have any dedicated product/project managers.</li>
<li>Your engineers should, for the most part, drive new feature development. You&#8217;ve just hired a small army of the best technologists on the planet. Nobody in your company knows technology trends better. This is where it becomes crucial that you&#8217;re adequately communicating your vision for the product and company. If your engineers buy into that vision they&#8217;ll dream up and program things you never thought possible. If they don&#8217;t they&#8217;ll tell you they don&#8217;t and why; listen to them carefully as your business&#8217;s success might depend on it.</li>
<li>Within reason, give them flexibility in where, when, and how they work. It&#8217;s true that face-to-face time and pair programming lead to better code, but sometimes an engineer just wants to walk to his favorite cafe and work with IM turned off. Let them.</li>
<li>The phrase is &#8220;Work hard. Play hard.&#8221; not &#8220;Work hard and then work hard some more.&#8221; This applies generally to the entire team, but especially so with highly cognitive vocations such as accounting, engineering, etc. Give your team ample vacation time and encourage them to use it. I&#8217;ve gone so far as to enforce reasonable hours at the office. Your engineers simply aren&#8217;t producing great code if you&#8217;re forcing them to work 12 hours a day, 7 days a week. Some engineers will resist this, if they do, read <a href="http://al3x.net/2010/01/09/dont-be-a-hero.html">Alex Payne&#8217;s great post on not being a hero</a>.</li>
<li>Promote a culture amongst engineers where their first response to a technical question is, &#8220;I don&#8217;t know.&#8221; A good way to tell a good engineer from a great engineer after you&#8217;ve hired them is a willingness to quickly admit when they don&#8217;t know something.</li>
</ul>
<p>The above is just a small list of things I&#8217;m actively doing in an attempt to maintain a team solely built of great engineers that are producing great products at a very rapid rate. The usual caveat being that your mileage may vary when you attempt to do this yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2010/03/howto-maintain-a-rock-star-culture.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NoSQL vs. RDBMS: Let the flames begin!</title>
		<link>http://stu.mp/2010/03/nosql-vs-rdbms-let-the-flames-begin.html</link>
		<comments>http://stu.mp/2010/03/nosql-vs-rdbms-let-the-flames-begin.html#comments</comments>
		<pubDate>Fri, 26 Mar 2010 17:25:32 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[clustering]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4262</guid>
		<description><![CDATA[I&#8217;ve been getting solidly flamed recently, as have my former coworkers at Digg, my friends at Twitter, etc. about our adoption and promotion of various NoSQL storage systems. It seems that some DBAs are very, very upset that us internet kids are considering abandoning SQL&#8217;s ship. I&#8217;m not here to throw out a bunch of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been getting solidly flamed recently, as have my former coworkers at Digg, my friends at Twitter, etc. about our adoption and promotion of various NoSQL storage systems. It seems that some DBAs are very, very upset that us internet kids are considering abandoning SQL&#8217;s ship. I&#8217;m not here to throw out a bunch of insane numbers, benchmarks, or flame back, but I did want to point out why SimpleGeo and others are jumping onto the NoSQL bandwagon.</p>
<p>First, and foremost, I haven&#8217;t heard of anyone saying MySQL or PostgreSQL on comparable hardware is faster than NoSQL options. The best I&#8217;ve heard is that <a href="http://www.yafla.com/dforbes/The_Impact_of_SSDs_on_Database_Performance_and_the_Performance_Paradox_of_Data_Explodification/">MS SQL setups on SSD drives with lots of RAM could do 6,100 result sets a second</a>. I guess, based on these posts, I&#8217;d like to ask a few questions to the people who honestly think RDBMSs can compete with NoSQL solutions at large scale.</p>
<ul>
<li>Do you honestly think that the PhDs at Google, Amazon, Twitter, Digg, and Facebook created Cassandra, BigTable, Dynamo, etc. when they could have just used a RDBMS instead?</li>
<li>Has anyone ran RDBMS benchmarks with highly heterogeneous datasets with lots of varying indexes on them? At Digg we had probably a hundred or so tables, each table had varying indexes (a char here, an integer there, a date+time here). Disk IO becomes a serious problem when indexes for different tables are stored on different parts of disks and you have concurrent reads/writes. I know that people have found ways around this, such as 37Signals systems guy putting 15 x 15k RPM drives on his DB server. Assuming $500 a disk (15k disks range from $300 to $800 on Newegg) that&#8217;s $7,500 just for disks.</li>
<li>Anyone out there running an EC2 large instance with a RDBMS on it that&#8217;s doing 1,800 reads/second? I&#8217;ve got a Cassandra node that was getting hammered with a load of 6 serving that much traffic without falling over, which I think is pretty decent when you consider each node could easily do that and adding more nodes to handle more load is trivial.</li>
<li>How much are you spending on those MS SQL servers with SSD drives that serve up 6,100 results a second? <a href="http://www.microsoft.com/sqlserver/2008/en/us/pricing.aspx">MS SQL is $5,999 per processor</a>. <a href="http://www.microsoft.com/windowsserver2008/en/us/pricing.aspx">Windows Server 2008 is another $1029</a>. Decent 128GB SSDs appear to cost around $450 each. You see where I&#8217;m going with this. Nobody is arguing you can&#8217;t get RDBMSs to scale up to a few thousand reads/writes a second if you can afford to spend $50,000 or $100,000 per server. The problem is that very few startups can spend that much money on a single server.</li>
<li>How much time are your DBAs spending administering your RDBMSs? How much time are they in the data centers? How much do those data centers cost? How much do DBAs cost a year? Let&#8217;s say you have 10 monster DB servers and 1 DBA; you&#8217;re looking at about $500,000 in database costs.</li>
<li>How easy is it to add a new server to your cluster? If we identify a hot spot in our Cassandra cluster, we can have a new node bootstrapped into our cluster in about five minutes. And I mean it&#8217;s in production taking writes and serving reads.</li>
<li>Does your RDBMS automatically rebalance the entire cluster when a new node is bootstrapped into it?</li>
<li>I&#8217;m running a 50 node cluster, which spans three data centers, on Amazon&#8217;s EC2 service for about $10,000 a month. Furthermore, this is an operational expense as opposed to a capital expense, which is a bit nicer on the books. In order to scale a RDBMS to 6,000 reads/second I&#8217;d need to spend on the order of five months of operation of my 50 node cluster.</li>
<li>Has anyone ran benchmarks with MySQL or PostgreSQL in an environment that sees 35,000 requests a second? IO contention becomes a huge issue when your stack needs to serve that many requests simultaneously. I know of one company that&#8217;s managing to scale portions of their PostgreSQL servers by purchasing $250,000 servers. This would cover my 50 node EC2 cluster for <em>two years</em>.</li>
</ul>
<p>I guess what I&#8217;m saying is that my decision to use NoSQL, and I&#8217;m guessing others&#8217; decisions to do so, has less to do with the fact that we can&#8217;t squeeze a few thousand writes a second out of MySQL and more to do with management and cost overhead. NoSQL solutions allow us to serve absurd amounts of data for a really, really low price. I&#8217;m happy to put my $/write, $/read, and $/GB numbers for my NoSQL setup against anyone&#8217;s RDBMS numbers.</p>
<p>We&#8217;re not nearly as dumb as everyone thinks we are; I promise.</p>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2010/03/nosql-vs-rdbms-let-the-flames-begin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: Recruit Rock Stars</title>
		<link>http://stu.mp/2010/03/howto-recruit-rock-stars.html</link>
		<comments>http://stu.mp/2010/03/howto-recruit-rock-stars.html#comments</comments>
		<pubDate>Tue, 23 Mar 2010 16:16:41 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[hiring]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[recruiting]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4254</guid>
		<description><![CDATA[Yesterday, SimpleGeo announced the hiring of five new employees. Four will be engineers and one is an engineer moonlighting as a developer advocate for us. The feedback I&#8217;ve received about the team we&#8217;ve managed to put together in such a short period of time usually involves two statements:

How on earth did you manage to build [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, <a href="http://techcrunch.com/2010/03/22/simple-geo-staff-sf-office/">SimpleGeo announced the hiring of five new employees</a>. Four will be engineers and one is an engineer moonlighting as a developer advocate for us. The feedback I&#8217;ve received about the team we&#8217;ve managed to put together in such a short period of time usually involves two statements:</p>
<ol>
<li>How on earth did you manage to build a team like this in such a short period of time?</li>
<li>Will you please leave some engineers for the rest of us?</li>
</ol>
<p>The answer to #2 is easy; no. The answer to #1 is somewhat funny; I&#8217;m a better recruiter than I am a coder or architect. No, it&#8217;s true. Ask Jay if he was more sorry to see his lead architect or his top recruiter leave Digg. My guess is he&#8217;s more upset his top recruiter left (I recruited about 40% of engineering and over 10% of the company by the time I&#8217;d left). The simple fact is that I would have made more money as a recruiter for Digg than as their lead architect.</p>
<p>But, how do I do it? Good question. I honestly don&#8217;t know, but I am going to share some insights that might help you land your own rock star. Here&#8217;s an arbitrarily ranked list of do&#8217;s and don&#8217;t&#8217;s for finding, recruiting, and hiring great engineers.</p>
<ul>
<li>Make sure your ego is in check. My only rule in hiring is to hire people that are smarter than me. Top engineers like this <em>will be</em> smarter than you and most likely command a higher salary than you. You need to be fully prepared to pay handsomely for someone who will likely make you look and feel like a fool on a daily basis.</li>
<li>If you take nothing else away from this post, please remember this: amazing engineers are not perusing job boards for their next job. Do you honestly think <a href="http://al3x.net/">Alex Payne</a> or <a href="http://atomized.org/">Ian Eure</a> actively seek out employment?</li>
<li>Great engineers generally seek out two things when looking for new employment: interesting problems and awesome people. If your startup is &#8220;like Twitter plus blah&#8221;, you&#8217;re not likely going to be able to recruit top engineers.</li>
<li>Get involved in local meetups, bleeding edge protocols, open source, etc. I&#8217;ve found, and recruited, two of the best engineers I know via meetups (<a href="http://arin.me/blog/">Arin Sarkissian</a>) and open source projects (<a href="http://www.chrisgoffinet.com/">Chris Goffinet</a>).</li>
<li>Do not, under any circumstances, send a recruiter after an engineer you covet. Send your most senior technologist after them. Pitch them on your team. Pitch them on your problem sets. Tell them about your strict adherence to TDD and Agile. My point on this is you need to send in someone who can speak engineering and sell that aspect of your company.</li>
<li>Pay them what they&#8217;re worth. If <em>you</em> don&#8217;t, someone else <em>will</em>. You aren&#8217;t going to lure these guys in with dreams of IPO or M&amp;A riches. They&#8217;re smart enough to know that 1% of your company won&#8217;t lead to &#8220;fuck you money.&#8221; So don&#8217;t bicker over paying them an extra $10,000.</li>
</ul>
<p>I&#8217;ve got a lot more ideas on how to manage and foster such a team once it&#8217;s been built, but those will have to wait for another blog post.</p>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2010/03/howto-recruit-rock-stars.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I hate the AGPL</title>
		<link>http://stu.mp/2010/02/why-i-hate-the-agpl.html</link>
		<comments>http://stu.mp/2010/02/why-i-hate-the-agpl.html#comments</comments>
		<pubDate>Fri, 19 Feb 2010 18:52:47 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4247</guid>
		<description><![CDATA[I&#8217;ve been, shall we say, debating the AGPL with the Neo4j guys for a few weeks now. I&#8217;d originally reviewed Neo4j for some uses at SimpleGeo, but ended up excluding it as a possibility for three reasons.

It didn&#8217;t support replication.
There wasn&#8217;t any inherent support for partitioning. This means we&#8217;d have to use Memcached&#8217;esque hashing to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been, shall we say, debating the AGPL with the Neo4j guys for a few weeks now. I&#8217;d originally reviewed Neo4j for some uses at SimpleGeo, but ended up excluding it as a possibility for three reasons.</p>
<ol>
<li>It didn&#8217;t support replication.</li>
<li>There wasn&#8217;t any inherent support for partitioning. This means we&#8217;d have to use Memcached&#8217;esque hashing to partition our data, which might work for many, but won&#8217;t work for our use cases.</li>
<li>It was licensed under the <a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html">AGPL</a>.</li>
</ol>
<p>The first two precluded me from using it merely on technical reasons, which aren&#8217;t huge hurdles because I was looking for a foundation to build on and would have gladly built that into Neo4j and released it back. The AGPL, however, was a deal breaker.</p>
<p>For those who don&#8217;t know, the AGPL is an incredibly viral license that says that not only do you have to redistribute your code changes, as the GPL states, but you must also publicly release any code that <em>connects</em> to an AGPL piece of software over a network. I fear the day that an HTTP server is built using AGPL. Think about it.</p>
<p>I&#8217;m extremely opposed to viral software. Since when is the term &#8220;viral&#8221; a good thing? Ultimately, though, my biggest complaint is the blatant hypocrisy of companies using AGPL. They&#8217;re basically stating that they&#8217;re &#8220;open&#8221; and &#8220;free&#8221;, when in reality they&#8217;re outsourcing free labor while retaining the right to charge for a proprietary license. The hypocrisy comes from companies trumpeting this so-called freedom when, in reality, they&#8217;re forcing certain behavior on their users. Reminds me of pious people saying, &#8220;You can live your life however you want! As long as you live it according to our rules.&#8221;</p>
<p>You want <strong>real</strong> freedom in software? Then release your code into the public domain, use CC0, or a BSD/Apache/MIT license. That&#8217;s <strong>true</strong> freedom. Anyone who tells you otherwise is either lying or delusional.</p>
<p>So do I have an issue with proprietary software? No, because Microsoft isn&#8217;t trying to play me for a fool. They&#8217;re up front saying, &#8220;Hey, it&#8217;s $199 to install Windows.&#8221; I can respect that. They&#8217;ve spent a lot of time building a product. They think it&#8217;s worth something. Consumers think it&#8217;s worth something. Simple economics come into effect after that.</p>
<p>What about services like SimpleGeo and AWS? No, because it&#8217;s not that you&#8217;re buying software. You&#8217;re buying a <em>service</em>. The crucial differentiator here is if your <em>data</em> is free. You&#8217;re not paying for AWS software or SimpleGeo software, you&#8217;re paying for service, support, and knowledge. What you pay SimpleGeo for is our knowledge in scaling, managing large server clusters, our data agreements with our various partners, and ease-of-use. It&#8217;s the same reason you go to the restaurant for a dish you could make at home.</p>
<p>What about Twitter or Digg? No, because those are <em>communities</em>. The notion that the software that runs Digg or Twitter is what makes them so special is ludicrous. The reason people keep going back to those sites is to participate with like-minded people in an environment they find fun and interesting. It&#8217;s like going to the bar.</p>
<p>So, in conclusion, if you&#8217;re going to release software then grow a pair and truly set your code free. If not, that&#8217;s fine too. Just don&#8217;t release your code using some zealot&#8217;s license and pretend your code is truly free when it&#8217;s not.</p>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2010/02/why-i-hate-the-agpl.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fail fast and often</title>
		<link>http://stu.mp/2010/02/fail-fast-and-often.html</link>
		<comments>http://stu.mp/2010/02/fail-fast-and-often.html#comments</comments>
		<pubDate>Sat, 06 Feb 2010 18:19:29 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4244</guid>
		<description><![CDATA[I&#8217;m saddened to hear the news that EventVue has closed up shop. It&#8217;s never fun watching other entrepreneurs have an exit like this knowing full well how much of themselves they put into it. The good news is the EventVue guys clearly have learned huge lessons and will be in a much better position to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m saddened to hear the news that <a href="http://blog.eventvue.com/post/372936164/post-mortem">EventVue has closed up shop</a>. It&#8217;s never fun watching other entrepreneurs have an exit like this knowing full well how much of themselves they put into it. The good news is the EventVue guys clearly have learned huge lessons and will be in a much better position to win in round two.</p>
<p>The one point they brought up as a lessoned learned was that they didn&#8217;t focus on learning and failing fast until it was too late, which reminded me of a quote from Joi Ito I recently heard at a conference.</p>
<blockquote><p><a href="http://twitter.com/joestump/status/7810993952">&#8220;Want to increase innovation? Lower the cost of failure.&#8221;</a> &#8212; Joi Ito</p></blockquote>
<p>This is absolutely crucial. As a startup you need to fail and fail often. Not a lot of people know that SimpleGeo was, in fact, born of failure. Matt and I originally started the company as a location-based gaming company. Due to market realities (investors rarely invest in gaming companies in the seed stage), personnel realities (neither Matt nor I had built games), and other factors we had to have what I call our &#8220;come to Jesus&#8221; moment. Since then we&#8217;ve focused on small, quick iterations and quickly scrapping or moving on from our failures (or in many cases simply adjusting our assumptions).</p>
<p>Easy to say, but how are we doing it?</p>
<ol>
<li>We use a loose approach to Agile development with two week sprints. This means that, worst case scenario, we&#8217;ve wasted two weeks of effort in order to find out if a tweak, product, etc. is going to fail. I can&#8217;t emphasize how important this is. If you push your team 6 months and release a giant product only to find out users hate it or don&#8217;t use it, you&#8217;re screwed. 6 months is a lot of opportunity cost for a startup.</li>
<li>We actively engage our user feedback. If users don&#8217;t like something we abandon it. If users are demanding something we move it up the priority list. For instance, we thought for sure that people wanted location-based search first and foremost after storage. Turns out, users actually wanted better tools for accessing and managing the data they&#8217;re sending us. So we&#8217;ve focused on churning out more SDKs and tools for managing data.</li>
<li>We use Amazon EC2. Specifically, for testing and prototyping, we use spot instances. It&#8217;s an extremely cost efficient way to destroy servers during testing.</li>
<li>We start small. Our current product offering is probably only 10% of what users expect from us long-term as far as pure number of features go. That being said, we picked the initial use-case and, I think, nailed it. The reality is 60% or more of the use cases for our users is simply storing millions of points and running radius queries on those points quickly. It&#8217;s also the foundation that all of our other products will be built on. So we&#8217;ve spent time focusing on building and iterating on that use-case. As a result, we&#8217;re multi-homed in three datacenters (actively serving data from all three), redundant across all three (meaning your data is stored in every datacenter), searches are extremely fast (under 50ms in some cases if you&#8217;re on EC2), and all points are backed up to S3 in YOUR account (it&#8217;s your data after all).</li>
</ol>
<p>We&#8217;re not perfect by any means, but I think Matt and I realized early on that we need to be most efficient at recognizing and owning our failures and deficiencies. If you focus on minimally viable products, small iterations, and prioritizing user feedback you, too, can fail fast and often.</p>
<blockquote><p><a href="http://ycombinator.com/pagequotes.txt">&#8220;Failure is useful.&#8221;</a> &#8212; Larry Page</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2010/02/fail-fast-and-often.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating Nagios Plugins using Python</title>
		<link>http://stu.mp/2010/01/creating-nagios-plugins-using-python.html</link>
		<comments>http://stu.mp/2010/01/creating-nagios-plugins-using-python.html#comments</comments>
		<pubDate>Thu, 07 Jan 2010 02:02:30 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4239</guid>
		<description><![CDATA[Like just about everyone else on the planet, we use Nagios to monitor our servers. We needed to create a few plugins for Nagios to monitor some services that Nagios didn&#8217;t have plugins for; namely Cassandra and Gearman. I wanted to be able to easily create plugins and have them installed with setuptools.

The code above [...]]]></description>
			<content:encoded><![CDATA[<p>Like just about everyone else on the planet, we use Nagios to monitor our servers. We needed to create a few plugins for Nagios to monitor some services that Nagios didn&#8217;t have plugins for; namely Cassandra and Gearman. I wanted to be able to easily create plugins and have them installed with <a href="http://pypi.python.org/pypi/setuptools">setuptools</a>.</p>
<p><script src="http://gist.github.com/270889.js?file=gistfile1.py"></script></p>
<p>The code above is a simple class that will implement all of the option parsing and such to run a Nagios plugin from the command line. From there you need to implement a plugin. Below is the Gearman plugin that I created. It runs a simple job I created that sums numbers and returns the results. If all goes well then the job should run and the correct sum of the randomly selected numbers should be returned.</p>
<p><script src="http://gist.github.com/270893.js?file=gistfile1.py"></script></p>
<p>Once you&#8217;ve got all of that working it&#8217;s pretty simple to then add the following snippet of code to your <code>setup.py</code> file.</p>
<pre><code>
      entry_points = {
          'console_scripts': [
              'check_gearmand = path.to.nagios.plugins:check_gearmand',
          ]
      },
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2010/01/creating-nagios-plugins-using-python.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Distributed vs. Fault Tolerant Systems</title>
		<link>http://stu.mp/2009/12/distributed-vs-fault-tolerant-systems.html</link>
		<comments>http://stu.mp/2009/12/distributed-vs-fault-tolerant-systems.html#comments</comments>
		<pubDate>Sun, 27 Dec 2009 17:27:25 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[clustering]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4230</guid>
		<description><![CDATA[I&#8217;ve been researching implementations of distributed search technology for some things we want to do at SimpleGeo. It was about this time that I ran across a project called Katta, which is a &#8220;distributed&#8221; implementation of Lucene indexes. While perusing the documentation I ran across a diagram detailing the architecture of Katta. What struck me [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been researching implementations of distributed search technology for some things we want to do at SimpleGeo. It was about this time that I ran across a project called <a href="http://katta.sourceforge.net/">Katta</a>, which is a &#8220;distributed&#8221; implementation of <a href="http://lucene.apache.org/">Lucene</a> indexes. While perusing the documentation I ran across <a href="http://katta.sourceforge.net/wp-content/uploads/kattaoverview.jpg">a diagram detailing the architecture of Katta</a>. What struck me as odd was that Katta was purporting to be a distributed system, yet had a master/slave setup managing it. This led me to tweet out:</p>
<blockquote><p><span style="padding: 0px; margin: 0px;">Dear Engineers, It&#8217;s not a &#8220;distributed&#8221; system if you have a master/slave setup. That&#8217;s simply a &#8220;redundant&#8221; system. <a href="http://twitter.com/joestump/status/7093473122">#</a></span></p></blockquote>
<p>Not long after this I got a few inquiries along with some great input from the ever-wise Jan Lehnardt from the CouchDB project along with Christopher Brown:</p>
<blockquote><p>RT @joestump: “…It&#8217;s not a ‘distributed’ system if you have a master/slave setup. That’s simply ‘redundant’” — Same: distributed != sharding <a href="http://twitter.com/janl/status/7093712636">#</a></p>
<p>And it&#8217;s not &#8220;distributed&#8221; if it&#8217;s all hub-n-spokes.  Might as well have a central server with some extra storage. <a href="http://twitter.com/skeptomai/status/7094755736">#</a></p></blockquote>
<p>Basically, Jan and I are making the argument that redundancy or sharding/partitioning doesn&#8217;t really add up to a truly distributed system. Well, not in the sense of what I think of when I think of distributed. Going back to my old friend, the CAP Theorem, I think we can see why.</p>
<p>Redundancy could be argued to be the A in CAP; always available. I&#8217;d even argue that partitioning, in the sense that most people think of (e.g. partitioning 300m users across 100 MySQL servers), is the A in CAP. The P for partitioning in CAP is that a system is highly tolerant to <em>network</em> partitioning. Because of the master/slave setup of Katta, it really only implements the A in CAP.</p>
<p>Of course, CAP says that you can only have two in any distributed system. I&#8217;d make the argument that no system is truly distributed unless it fully implements two of the three properties in CAP. I&#8217;d further argue that if you had a highly available (A), highly consistent system (C) even it wouldn&#8217;t be distributed (lacking the ability to be highly tolerant to network partitioning).</p>
<p>The problem that I have with Katta&#8217;s definition of distributed is that I can&#8217;t truly distribute Katta in the raw sense of the word. For instance, I can&#8217;t spread Katta across three data centers and not worry about a data center going down. If I lose access to the master then Katta is worthless to me.</p>
<p>To have a truly distributed system I&#8217;d argue you need the following characteristics in your software:</p>
<ul>
<li>There can be no master (hub).</li>
<li>There must be multiple copies of data spread across multiple nodes in multiple data centers.</li>
<li>Software and systems must be tolerant of data center failures.</li>
</ul>
<p>My point is, I think the word &#8220;distributed&#8221; is applied too freely to systems that are, more appropriately, called &#8220;redundant&#8221; or &#8220;fault tolerant&#8221;.</p>
<p><strong>UPDATE:</strong> Seems I confused some people about my master/slave argument. You <em>can</em> build distributed systems that have master/slave pieces in the puzzle. Large distributed systems are rarely <em>one</em> cohesive piece of software, rather they tend to be a <em>series</em> of systems glued together. What I am saying is that a simple master/slave system is not distributed. Through a series of bolts, glue, add-ons, and duct tape you can make a master/slave system sufficiently distributed, but don&#8217;t confuse the totality of that system with the base master/slave system.</p>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2009/12/distributed-vs-fault-tolerant-systems.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Year in Review</title>
		<link>http://stu.mp/2009/12/year-in-review-5.html</link>
		<comments>http://stu.mp/2009/12/year-in-review-5.html#comments</comments>
		<pubDate>Wed, 23 Dec 2009 00:18:59 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[year in review]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4223</guid>
		<description><![CDATA[
The year began in Koh Phangan, Thailand with my friend Chris Lea. We spent a month laying on beaches, swinging in hammocks, and drinking booze out of buckets.
While in Thailand I got some more bamboo work done on my left arm.
In February I went down to Miami for Future of Web Apps to talk about [...]]]></description>
			<content:encoded><![CDATA[<ol>
<li>The year began in <a href="http://www.flickr.com/photos/joestump/sets/72157619430512345/">Koh Phangan, Thailand</a> with my friend <a href="http://chrislea.com/">Chris Lea</a>. We spent a month laying on beaches, swinging in hammocks, and drinking booze out of buckets.</li>
<li>While in Thailand I got some <a href="http://www.flickr.com/photos/joestump/3175574497/">more bamboo work done on my left arm</a>.</li>
<li>In February I went down to Miami for Future of Web Apps to talk about <a href="http://events.carsonified.com/fowa/2009/miami/videos/joe-stump-2">scaling your tech teams</a>.</li>
<li>Around my birthday I was able to score a copy of Netscape Navigator 2.0, still in the box, <a href="http://www.flickr.com/photos/joestump/3350437192/">signed by Marc Andreessen</a>.</li>
<li>March brought the usual trip down to Austin, TX for SXSW. I spoke on a panel titled, &#8220;Designers and Developers: Why can&#8217;t we all just get along?&#8221;</li>
<li>In April I attended the <a href="http://www.flickr.com/photos/joestump/3460573610/">Social Foo Camp</a>, which is an invite-only nerdfest put on by O&#8217;Reilly.</li>
<li>May was an insane month of travel in a year of insane travel. I spent a week in Michigan, a <a href="http://www.flickr.com/photos/joestump/sets/72157621124212780/">week in Prague</a>, a day in Phoenix, and a few days in Boulder, CO.</li>
<li>While I was in Michigan, Jonathan and I got <a href="http://www.flickr.com/photos/joestump/sets/72157617869861566/">our pictures taken</a> by my high school sweetheart, Erica, for our mom for Mother&#8217;s Day.</li>
<li>When I returned from Prague I&#8217;d made the <a href="http://stu.mp/2009/05/moving-on-to-the-next-chapter.html">big decision to leave Digg</a> and build a startup with <a href="http://twitter.com/mg">Matt Galligan</a>. Matt and I created a company called Crash Corp. that was going to build augmented reality and location-based games.</li>
<li><a href="http://www.flickr.com/photos/joestump/3658470657/">In June I got a new face</a>.</li>
<li>Matt and I agreed to each take a month off to clear our heads before jumping into startup mode. For unknown reasons he decided to spend his month in the Midwest. I, on the other hand, chose to go to Amsterdam, Denmark, <a href="http://www.flickr.com/photos/joestump/sets/72157620994422941/">Norway</a>, <a href="http://www.flickr.com/photos/joestump/sets/72157621688812140/">Ireland</a>, and London. This marked my second month off for the year, which was awesome.</li>
<li>I spent about ten days in Norway with my buddy Arne Fismen (Side note: His last name means &#8220;fart man&#8221; in Norwegian, which is definitely worse than my last name) and was able to fulfill a childhood dream of mine by <a href="http://www.flickr.com/photos/joestump/tags/fjords">visiting the world famous fjords of Norway</a>. I can&#8217;t express my appreciation enough for what Arne and his family did for me. It was truly a magical experience.</li>
<li>When I returned from Europe I spent a few days in San Francisco before heading down to San Diego for my buddy Dana&#8217;s bachelor party.</li>
<li>After Dana&#8217;s bachelor party I moved to Boulder, CO to get to work on Matt and I&#8217;s company.</li>
<li>Soon after getting on the ground and starting to work through things Matt and I realized we needed to change direction. As a result <a href="http://simplegeo.com/">SimpleGeo</a> was born, which provides location services to developers.</li>
<li>While building SimpleGeo I decided to, after 11 years, <a href="http://stu.mp/2009/09/why-i-switched-from-php-to-python.html">switch from PHP to Python</a> as my language of choice.</li>
<li>The change of direction was a watershed moment for the company. Things crystallized for both us and the investors we were pitching. It wasn&#8217;t long after this that First Round Capital agreed to be our lead investor.</li>
<li>October was mostly sent flying around to New York City and San Francisco pitching investors, VC&#8217;s, etc.</li>
<li>In November we closed a <a href="http://www.techcrunch.com/2009/11/30/simplegeo-funding/">$1.5m round of financing from some of tech&#8217;s most well-known investors</a>. I consider this to be the greatest achievement of my career so far.</li>
<li>Over Thanksgiving I spent a few days down in <a href="http://www.flickr.com/photos/joestump/sets/72157622920346926/">Tulum, Mexico</a>.</li>
<li>In December I flew up to Seattle, WA for a quick visit. It&#8217;s still home to me and I can&#8217;t wait to move back.</li>
</ol>
<p>According to TripIt and Dopplr I spent 142 days traveling this year. I don&#8217;t have complete numbers, but I&#8217;m guessing I logged over 80,000 miles this year on various airlines. As in the tradition of last year, I think it&#8217;s only appropriate that I create a list of my year in cities.</p>
<ul>
<li>Koh Samui, Thailand</li>
<li>Koh Phangan, Thailand</li>
<li>Bangkok, Thailand</li>
<li>Seattle, Washington</li>
<li>Miami, Florida</li>
<li>Austin, Texas</li>
<li>Sebastopol, California</li>
<li>Ypsiltanti, Michigan</li>
<li>Ann Arbor, Michigan</li>
<li>East Jordan, Michigan</li>
<li>San Francisco, California</li>
<li>Prague, Czech Republic</li>
<li>Phoenix, Arizona</li>
<li>Boulder, Colorado</li>
<li>Amsterdam, The Netherlands</li>
<li>Roskilde, Denmark</li>
<li>Oslo, Norway</li>
<li>Bergen, Norway</li>
<li>Askvoll, Norway</li>
<li>Dublin, Ireland</li>
<li>Cork, Ireland</li>
<li>London, United Kingdom</li>
<li>New York City, New York</li>
<li>San Diego, California</li>
<li>Minneapolis, Minnesota</li>
<li>Ashland, Wisconsin</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2009/12/year-in-review-5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disk IO and throughput benchmarks on Amazon&#8217;s EC2</title>
		<link>http://stu.mp/2009/12/disk-io-and-throughput-benchmarks-on-amazons-ec2.html</link>
		<comments>http://stu.mp/2009/12/disk-io-and-throughput-benchmarks-on-amazons-ec2.html#comments</comments>
		<pubDate>Wed, 09 Dec 2009 18:49:14 +0000</pubDate>
		<dc:creator>joestump</dc:creator>
				<category><![CDATA[benchmarks]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[ec2]]></category>

		<guid isPermaLink="false">http://stu.mp/?p=4192</guid>
		<description><![CDATA[When I told people that we were going to run our infrastructure on Amazon&#8217;s EC2 most people recoiled in disgust. I heard lots and lots of horror stories about how you simply couldn&#8217;t run production environments on EC2. Disk IO was horrible, throughput was bad, etc. Someone should seriously tell Amazon, since a lot of [...]]]></description>
			<content:encoded><![CDATA[<p>When I told people that we were going to run our infrastructure on Amazon&#8217;s EC2 most people recoiled in disgust. I heard lots and lots of horror stories about how you simply couldn&#8217;t run production environments on EC2. Disk IO was horrible, throughput was bad, etc. Someone should seriously tell Amazon, since a lot of their own infrastructure runs in EC2 and AWS. For the most part, Amazon&#8217;s AWS were internal tools that they released publicly.</p>
<p>We&#8217;ve been ironing out kinks in our production environment for the last few weeks and one of the things that worried me was if these assertions were true. So, I set out to run a fairly comprehensive test of Disk IO and throughput. I ran <code>hdparm -t</code>, <code>bonnie++</code>, and <code>iozone</code> against ephemeral drives in various configurations along with EBS volumes in various configurations.</p>
<p>For all of my tests I tested the regular ephemeral drives as they were installed (&#8221;Normal&#8221;), LVM in a JBOD setup (&#8221;LVM&#8221;), the two ephemeral drives in a software RAID0 setup (&#8221;RAID0&#8243;), a single 100GB EBS volume (&#8221;EBS&#8221;), and two 100GB EBS volumes in a software RAID0 setup (&#8221;EBS RAID0&#8243;). All of the tests were ran on large instances (m1.large). All tests were ran using the XFS file system.</p>
<p><strong><code>hdparm -t</code></strong></p>
<p><img class="alignleft size-full wp-image-4199" title="EC2_RAID_JBOD" src="http://stu.mp/wp-content/uploads/2009/12/EC2_RAID_JBOD.jpg" alt="EC2_RAID_JBOD" width="469" height="316" />While <code>hdparm -t</code> isn&#8217;t the most comprehensive test in the world, I think it&#8217;s a decent gut check for simple throughput. To give a little context, I remember Digg&#8217;s production servers, depending on setup, ranging from 180MB/sec. to 340MB/sec. I&#8217;m guessing if you upgraded to the XL instance type and did a RAID0 across the four drives it has you&#8217;d see even better numbers with the RAID0 ephemeral drives.</p>
<p>What I also found pretty interesting about these numbers is that the EBS volumes stacked up &#8220;okay&#8221; against the ephemeral drives and that the EBS volumes in a RAID0 didn&#8217;t gain us a ton of throughput. Considering that the EBS volumes run over the network, which I assume is gigabit ethernet, 94MB/sec. is pretty much saturating that network connection and, to say the least, impressive given the circumstances.</p>
<p>For most applications, I&#8217;d guess that EBS throughput is just fine. The raw throughput only becomes a serious requirement when you&#8217;re moving around lots of large files. Most applications move around lots of small files, which I&#8217;d likely use S3 for anyways. If your application needs to move around lots of large files I&#8217;d consider using a RAID0 ephemeral drive setup with redundancy (e.g. MogileFS spreading files across many nodes in various data centers).</p>
<p><strong><code>bonnie++</code></strong></p>
<p><img class="alignleft size-full wp-image-4196" title="20091209-cgq7p1my7mtm5wmsyrjpas5xqf" src="http://stu.mp/wp-content/uploads/2009/12/20091209-cgq7p1my7mtm5wmsyrjpas5xqf.jpeg" alt="20091209-cgq7p1my7mtm5wmsyrjpas5xqf" width="521" height="379" />Disregarding the Input/Output Block performance of the ephemeral RAID0 setup here, it&#8217;s extremely interesting to note that EBS IO performance is better than the ephemeral drives and that EBS in a RAID0 was better in almost every metric as the ephemeral drives.</p>
<p>That all being said, RAID0 ephemeral drives are the clear winner here. I do wonder, however, if you could set up a RAID0 EBS array that had, say, four or six or eight volumes that&#8217;d be faster than the RAID0 setup.</p>
<p>If your application is IO bound then I&#8217;d probably recommend using EBS volumes if you can afford it. Otherwise, I&#8217;d use RAID0. Again, the trick with the ephemeral drives is to ensure your data is replicated across multiple nodes. Of course, this is cloud computing we&#8217;re talking about, so you should be doing that anyways.</p>
<p><img style="float: left; border: 0px initial initial;" title="EC2_RAID_JBOD-1" src="http://stu.mp/wp-content/uploads/2009/12/EC2_RAID_JBOD-1.jpg" alt="EC2_RAID_JBOD-1" width="524" height="378" />Here&#8217;s the CPU numbers of the various configurations. One thing to note here is that EBS, LVM, and software RAID all come with CPU costs. Somewhat interesting to note is that the EBS has substantially less CPU usage in all areas except Input/Output Per Char.</p>
<p>If your application is both CPU and IO bound then I&#8217;d probably recommend upgrading your instance to an XL.</p>
<p><img class="alignleft size-full wp-image-4195" title="20091209-8kybaf7peu91m3puugxpr78reu" src="http://stu.mp/wp-content/uploads/2009/12/20091209-8kybaf7peu91m3puugxpr78reu.jpeg" alt="20091209-8kybaf7peu91m3puugxpr78reu" width="529" height="349" />The last <code>bonnie++</code> results are the random seeks per second and, wow, was I surprised. A single EBS runs pretty much dead even with the LVM JBOD and the EBS RAID0 is on par with the RAID0 ephemeral drives.</p>
<p>To say I was surprised by these numbers would be an understatement. The lesson here is that, if your application does lots of random seeking, you&#8217;ll want to use either EBS RAID0 volumes or RAID0 ephemeral drives.</p>
<p><strong><code>iozone</code></strong></p>
<p>Before running these tests I&#8217;d never even heard of this application, but it seemed to be used by quite a few folks so I thought I&#8217;d give it a shot.</p>
<p style="text-align: center;"><img class="size-full wp-image-4197 aligncenter" title="20091209-ejjcihfsn16hjdnrnfy1g2ptai" src="http://stu.mp/wp-content/uploads/2009/12/20091209-ejjcihfsn16hjdnrnfy1g2ptai.jpeg" alt="20091209-ejjcihfsn16hjdnrnfy1g2ptai" width="620" height="462" /></p>
<p>Again, some interesting numbers from EBS volumes. What I found pretty interesting here is that the EBS RAID0 setups actually ended up being slower in a few metrics than a single EBS volume. No idea why that may be.</p>
<p>The other thing to note is that the single EBS volume outperformed the ephemeral RAID0 setup in a few different metrics, most notably being random writes.</p>
<p><strong>Conclusions</strong></p>
<p>I think the overall conclusion here is that disk IO and throughput on EC2 is pretty darn good. I have a few other conclusions as well.</p>
<ul>
<li>If you can replicate your data across multiple nodes then the RAID0 ephemeral drives are the clear winners.</li>
<li>If you are just looking to store lots of small files and serve them up, then definitely use S3 with CloudFront.</li>
<li>You&#8217;d very likely get even more impressive numbers using the XL instances with RAID0 striped across four ephemeral drives.</li>
<li>Another potential disk setup would be to put different datasets on different ephemeral drives. For instance, put one MySQL database on one ephemeral drive and your other one on another.</li>
<li>If your setups are IO bound and you&#8217;re looking for lots of redundancy, then EBS volumes are likely the way to go. If you don&#8217;t need the super redundancy on a single box then use RAID0 on ephemeral drives.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://stu.mp/2009/12/disk-io-and-throughput-benchmarks-on-amazons-ec2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
