<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7972664440078980714</id><updated>2016-04-11T20:50:07.010-07:00</updated><category term="pre-OP"/><category term="philosophy"/><category term="theology"/><category term="navel gazing"/><category term="critical realism"/><category term="politics"/><category term="ethics"/><category term="fyi"/><category term="education"/><category term="art"/><category term="science"/><category term="analytic"/><category term="economics"/><category term="violence"/><category term="sysadmin"/><category term="metaphysics"/><category term="modernism"/><category term="neocalvinism"/><category term="sex"/><category term="conferences"/><category term="emergency medicine"/><category term="intelligent design"/><category term="consecration"/><category term="inequality"/><category term="myth"/><category term="physics"/><category term="theatre"/><category term="argumentation"/><category term="debate"/><category term="business"/><category term="chemistry"/><category term="travel"/><category term="benedict option"/><category term="mathematics"/><category term="nondualism"/><category term="sailing"/><title type='text'>Buckingham Inquirer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/-/sysadmin'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/search/label/sysadmin'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ryan Thomas-Martin Miller</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7972664440078980714.post-3330317142688413679</id><published>2012-09-16T23:38:00.000-07:00</published><updated>2016-04-11T07:48:21.164-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="business"/><category scheme="http://www.blogger.com/atom/ns#" term="pre-OP"/><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin"/><title type='text'>Ecosystem Niches</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Reading &lt;a href=&quot;http://www.reddit.com/r/sysadmin/comments/zycxq/sysadmin_rant_why_im_an_idiot_but_refuse_to/&quot;&gt;this recent argument on Reddit&lt;/a&gt; made me reflect on the different expectations of sysadmins in web and non-web (yes, every business has a website, but if your website is down and nobody thinks it&#39;s an emergency, you&#39;re not a web company) businesses of different sizes. &amp;nbsp;I think a lot of the sysadmin blogging I read, while very good, comes too narrowly from the perspective of medium and large non-web businesses, since smaller companies don&#39;t tend to have a full time sysadmin on staff and web businesses rely more on their programmers for sysadminry due to scale (and since they already have a bunch of developers in house). &amp;nbsp;Basically, I worry that while sysadmins are right to emphasize professionalism and working for the needs of the business (over&amp;nbsp;idiosyncrasy), they&#39;re too quick to assume that every businesses needs are like theirs. &lt;br /&gt;&lt;br /&gt;Small businesses are different in that they actually need to take life and death (of the business, I mean!) risks. &amp;nbsp;There are so many things that can go wrong at this scale that beyond good backups, focusing on them just removes energy from the main problems. &amp;nbsp;Yes, you might go under if you get some bad IT breaks, but you might go under from sheer bad luck in any number of areas. &amp;nbsp;The vast majority of small businesses fail, and the ones that succeed are not the ones that spend more time worrying about outlier problems, even when those problems are quite real and ignoring them in a larger business would be deeply unprofessional.&amp;nbsp;Web businesses are different in that change velocity is at an absolute premium. &amp;nbsp;So while the usual best practices for any size of business definitely apply, the order of affairs should be &quot;automate, then make sure the automation incorporates best practices&quot; rather than the reverse. &amp;nbsp;If you don&#39;t automate first, you&#39;re so underwater keeping up with changes that nothing else will ever happen.&lt;br /&gt;&lt;br /&gt;So here are what I would lay out as reasonable expectations for each category of business (as defined by its IT needs, rather than headcount or revenue):&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Small business (&amp;lt;1 admin): &amp;nbsp;not generally willing to pay for redundancy or sysadmin time outside of new setups and crises. &amp;nbsp;If you name things clearly, follow best practices for environment setup, and have tested backups, you&#39;re doing it right. &amp;nbsp;Don&#39;t expect to get beyond putting out fires.&lt;/li&gt;&lt;li&gt;Small web business (&amp;lt;1 admin): &amp;nbsp;here the devs probably do all of the sysadmin work for the (probably cloudy) deployed infrastructure. &amp;nbsp;The good part is that things will probably be reasonably automated. &amp;nbsp;The bad part is that they probably won&#39;t do much research and will spend a lot of time reinventing the wheel (which produces brittle infrastructure as well as sucking up time). &amp;nbsp;As long as you have working backups, don&#39;t worry about the hackery--just &lt;a href=&quot;http://theleanstartup.com/&quot;&gt;focus on growing&lt;/a&gt; until you can afford a full time devops person to help with build/deploy, database, and sysadmin knowledge (and do hire one as soon as you can afford it--definitely before your tenth developer).&lt;/li&gt;&lt;li&gt;Medium business (1 admin team): &amp;nbsp;This is the time to read &lt;a href=&quot;http://everythingsysadmin.com/the-test.htmlhttp://everythingsysadmin.com/the-test.html&quot;&gt;all of those classic sysadmin books&lt;/a&gt;. &amp;nbsp;You can afford some redundancy and professionalism, and downtime gets expensive with all of those people on the payroll who can&#39;t do their jobs. &amp;nbsp;Planned downtime is probably not a big deal. &amp;nbsp;&lt;a href=&quot;http://www.standalone-sysadmin.com/blog/2010/03/flashback-infrastructure-upgrades-through-forest-fires/&quot;&gt;If your hair is always on fire, you&#39;re doing it wrong&lt;/a&gt;. &amp;nbsp;If you have new user and new server setup pretty automated, you&#39;re ahead of the curve, but automated client rollout is no longer optional.&lt;/li&gt;&lt;li&gt;Medium web enterprise (no whole racks of identical servers yet): &amp;nbsp;focus on getting complete monitoring and &lt;a href=&quot;http://buckinghaminquirer.blogspot.com/2012/08/high-availability-means-14-copies-of.html&quot;&gt;complete redundancy, first within and then across datacenters&lt;/a&gt;; completely automated server rollouts; &lt;a href=&quot;http://www.planetdevops.net/?cat=86&quot;&gt;infrastructure as code&lt;/a&gt;; and &lt;a href=&quot;http://www.startuplessonslearned.com/2009/06/why-continuous-deployment.html&quot;&gt;painless deploys&lt;/a&gt;. &amp;nbsp;Downtime is failure. &amp;nbsp;Painful builds/deploys are failure. &amp;nbsp;In addition to following all of the classic sysadmin best practices (except with more automation) you need to help your developers understand and apply best practices, too, because the software is the business and you need to support it.&lt;/li&gt;&lt;li&gt;Large nonweb (meaning heterogeneous, not that big companies don&#39;t care about their websites) enterprise: &amp;nbsp;this is basically medium business, except with multiple business units, division among network, systems, and storage teams, and big budgets. &amp;nbsp;You probably have lots of EMC and Cisco stuff. &amp;nbsp;You probably also have lots of bureaucracy. &amp;nbsp;The priorities here have to be avoiding vendor lockin and retaining the benefits of bureaucracy (change control) without its evils (silos). &amp;nbsp;Time to read those &lt;a href=&quot;http://www.jedi.be/blog/&quot;&gt;devops culture books&lt;/a&gt;. &amp;nbsp;You might be able to make your business more like a large web business with a private cloud.&lt;/li&gt;&lt;li&gt;Large web enterprise (whole racks of identical servers--not that anyone at this level is relying on me for advice): &amp;nbsp;focus on getting infrastructure costs down and self-healing software, since you don&#39;t have time to manage even the emergencies on a per-machine basis. &amp;nbsp;At this level, infrastructure teams start to need C and Java programmers and &lt;a href=&quot;http://www.standalone-sysadmin.com/blog/2012/09/and-if-every-fortune-50-company-jumped-off-a-bridge/&quot;&gt;hardware engineers&lt;/a&gt;. &amp;nbsp;Success means low costs per end user and very few rolling outages (usually caused by errant self-healing code in your software). &amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/3330317142688413679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/09/ecosystem-niches.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/3330317142688413679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/3330317142688413679'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/09/ecosystem-niches.html' title='Ecosystem Niches'/><author><name>Ryan Thomas-Martin Miller</name><uri>https://plus.google.com/104719749855625600679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7972664440078980714.post-353661288079545313</id><published>2012-08-04T09:33:00.000-07:00</published><updated>2016-04-11T07:48:21.167-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pre-OP"/><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin"/><title type='text'>High Availability Means 14 Copies of Your Data</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;There&#39;s been a lot of grumbling lately about wasted disk in Cassandra replication, as if this is a fault of the software rather than an inherent constraint, so I&#39;d like to review what is possible with perfect software. &lt;br /&gt;Assumptions:&lt;br /&gt;&lt;br /&gt;1. &amp;nbsp;The software is perfectly topology-aware, perfectly load-balanced, has no bugs, and no unnecessary overhead.&lt;br /&gt;2. &amp;nbsp;All servers and disks are identical. &lt;br /&gt;3. &amp;nbsp;One server with one spinning disk (or RAID0 set) perfectly handles peak traffic at the desired QoS. &lt;br /&gt;4. &amp;nbsp;There are no issues with DDoS or unanticipated traffic peaks. &amp;nbsp;We assume the client-side is perfectly understood and uniform, and merely seek to understand the implications of server-side faults.&lt;br /&gt;5. &amp;nbsp;High availability is &lt;a href=&quot;http://omniti.com/surge/2012/speakers/miklas_andrew&quot;&gt;actually important&lt;/a&gt;, not just a slogan, so we&#39;re ok with Availability and Partition-tolerance in the CAP theorem iron triangle.&lt;br /&gt;6. &amp;nbsp;This is a web-service or somesuch, not a bottomless-budget government program, so we won&#39;t build totally parallel software systems to guard against that level of human error.&lt;br /&gt;&lt;br /&gt;So let&#39;s follow the logic and see where it takes us:&lt;br /&gt;&lt;br /&gt;1. &amp;nbsp;One disk in one server in one datacenter is clearly inadequate. &amp;nbsp;Any fault causes unavailability.&lt;br /&gt;2. &amp;nbsp;What about two disks in two servers in two datacenters? &amp;nbsp;Now we&#39;re protected against a known fault at any level of the system, but have no way to recover from a partition, as rebuilding a copy of the data would take our existing server over its maximum possible load.&lt;br /&gt;3. &amp;nbsp;What of three disks in three servers in three datacenters? &amp;nbsp;This approach seems solid, but quorum will require cross-datacenter-reads, and synchronous cross-datacenter-writes would be required to avoid loss of data with a simple disk-failure. &amp;nbsp;Furthermore, recovering from disk failures (frequent) would require cross-data-center reads, which take a long time, meaning the cluster would frequently be in a highly-degraded state, and the odds of an &lt;a href=&quot;http://www.standalone-sysadmin.com/blog/2012/08/i-come-not-to-praise-raid-5/&quot;&gt;unrecoverable read error during recovery&lt;/a&gt; are high.&lt;br /&gt;4. &amp;nbsp;Four disks in four servers in two datacenters? &amp;nbsp;Losing a disk still requires cross-datacenter-reads for recovery. &amp;nbsp;Losing a datacenter will require a long time to recovery even if you can instantly spin up a third (e.g. EC2).&lt;br /&gt;5. &amp;nbsp;Asymmetric datacenters don&#39;t get you anywhere, since you don&#39;t know which one you&#39;ll be running from when failure happens. &lt;br /&gt;6. &amp;nbsp;Six disks in six servers in two or three datacenters. &amp;nbsp;With two datacenters, you now don&#39;t need to read across datacenters just because you lose a disk on the active side. &amp;nbsp;With three, you would, except you can just fail over the traffic while you rebuild, and if you have a failure in datacenter B while A is rebuilding, you can just fail over to C. &amp;nbsp;The choice of two or three datacenters would probably depend on your fixed costs and the replication characteristics of your software. &amp;nbsp;Either of these solutions could work, until you bring in human error, the most frequent cause of downtime. &amp;nbsp;To provide reasonable amelioration against human error, you need a non-live backup system.&lt;br /&gt;7. &amp;nbsp;Nope, your odds of unrecoverable error on read from backups are too high.&lt;br /&gt;8. &amp;nbsp;Ok, two backup servers, or at least two disks. &amp;nbsp;If you&#39;re convinced by the vendor numbers or you don&#39;t mind having to &lt;a href=&quot;http://buckinghaminquirer.blogspot.co.uk/2011/11/black-boxes-and-overfitting-twin-cases.html&quot;&gt;choose between data loss and availability when in extremis&lt;/a&gt;. &amp;nbsp;This seems to be where Amazon and Google live, which probably makes sense given the low profitability of their transactions, and in Google&#39;s case &lt;a href=&quot;http://buckinghaminquirer.blogspot.co.uk/2012/01/cluster-filesystems-some-people-still.html&quot;&gt;strong segmentation&lt;/a&gt; such that problems on all six copies of a given set of data only cause availability problems for a vanishingly small subset of their users. &amp;nbsp;If your business makes twice as much per transaction as Google, however (most incorporated businesses not named Facebook), or you require only a handful of modern servers to handle your peak traffic (the vast majority of businesses period--remember we&#39;re talking about the database layer here) then those painful decisions will be more painful for you, and you&#39;ll want them to be correspondingly rarer. &amp;nbsp;Small clusters are also more subject to bad luck (getting shipped a bad batch of disks) which doesn&#39;t show up in the vendor or Google&#39;s overall failure rates.&lt;br /&gt;14. &amp;nbsp;The above, with RAID. &amp;nbsp;This is the real world concession to high disk failure rates, correlated failures in small batches, lower tolerance for partial outages, and slow replacements for failures. &lt;br /&gt;24. &amp;nbsp;Three symmetrical datacenters with three RAID10 servers + backup. &amp;nbsp;This can make new datacenter buildouts easier (just power down a set of servers and move them, while keeping online redundancy), and might allow you to serve active-active from datacenters closer to customers most of the time. &amp;nbsp;It also makes taking a whole datacenter down for network or power upgrades much less painful. &amp;nbsp;However, in the real world many businesses find it easier to buy new servers when they open a new datacenter, and many popular databases (MySQL, PostgreSQL) don&#39;t well-support active-active or three-master replication triangles. &amp;nbsp;If, however, your read load is a lot higher than your write load, and QoS requirements are tighter for it, you may want to use this model rather than buying more servers in each of two datacenters, since you can go active-active for reads, and buy operational flexibility and availability in addition to capacity without spending much more money (if your per-datacenter costs are low). &amp;nbsp;This can also lower your costs by making it easier to negotiate with hosts, since you have a more credible threat to leave any particular provider and already have relationships with three of them. &amp;nbsp;That all said, human errors are the greatest cause of downtime, and complexity is the mother of human error, so I tend to think RAID10 is more valuable than expected since the complexity is all hidden, and a third datacenter is less valuable than expected since the complexity needs to be handled by human architects at the application and network levels as well as in systems.&lt;br /&gt;&lt;br /&gt;So whether you have 8, 14, or 24 copies of your data depends on particular real-world concerns beyond any simplistic model, but the idea that a replication of 3(!) might be too much just means that you&#39;re not really in a high-availability world, in the sense that you&#39;re not very worried about the impact of hardware-level issues. &amp;nbsp;That&#39;s ok--modern hardware is pretty reliable, and RAID10+backup (still at least 3 disks!) might be adequate for many revenue-producing uses where recovery has been well-planned, scheduled downtime for upgrades is possible, and blaming upstream providers is feasible in case of a major outage.&lt;br /&gt;&lt;br /&gt;UPDATE: &amp;nbsp;&lt;a href=&quot;http://www.mysqlperformanceblog.com/2013/03/13/mysql-backup-tools-used-by-percona-remote-dba-for-mysql/&quot;&gt;Percona has some thoughts on failures and backups worthy of a read&lt;/a&gt;. &amp;nbsp;Yes, their advice and expertise are targeted to MySQL, but remember that &lt;a href=&quot;http://www.percona.com/about-us/customers&quot;&gt;they support more web services than you can shake a stick at&lt;/a&gt;, so it&#39;s worth paying attention to what they have to say. &amp;nbsp;First, &quot;what kind of outages can happen?&quot;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Someone runs UPDATE or DELETE and forgets the where clause or filters weren’t quite right&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The application had a bug causing data to be removed or overwritten&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;A table (or entire schema) was dropped accidentally&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Your InnoDB table was corrupt and mysql shuts down&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Your server or RAID controller crashes and all data is lost on that server&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;A disk failed, and RAID array does not recover&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;You run into a InnoDB corruption bug that propagates via replication (not common, but does happen)&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;You lose your entire SAN and all your DB servers were located there. Let’s hope your backups are somewhere else!&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;You lose a PSU or network switch in your datacenter and some or all of your servers go down in that location&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Your entire datacenter loses power and the generators do not start, which happens more often than you might think&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;I&#39;d like to draw attention to three of these in particular: &amp;nbsp;infrastructure corruption that propagates through replication, losing your entire SAN, and a &quot;fully redundant&quot; datacenter that goes down and does not come back. &amp;nbsp;Stop thinking these things can&#39;t happen to you! &amp;nbsp; They absolutely do happen; you cannot trust your software or your hardware. &amp;nbsp;So what is to be done about it? &amp;nbsp;Percona&#39;s &quot;philosophy on backups:&quot;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;It is a good idea to schedule both logical and binary backups. They each have their use cases and add redundancy to your backups. If there is an issue with your backup, it’s likely not to affect the other tool.&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Store your backups on more than one server.&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;In addition to local copies, store backups offsite. Look at the cost of S3 or S3+Glacier, it’s worth the peace of mind!&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Test your backups, and if you have a test environment, load them there periodically. You can also spin up an EC2 instance to load your backups onto. In addition, you can binlog rollforward 24 hours of binlogs as a good test.&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Store your binlogs off your primary server so you can perform point in time recovery.&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Store your binlogs offsite for disaster recovery scenarios.&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Run pt-table-checksum periodically (i.e. once a month) and make sure your servers data stays consistent. Checksumming is important, as backups are typically pulled off a slave and it’s vital that it has the same data.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;Note how half of these boil down to &quot;test, test, test&quot; but the other half are simply &quot;store more copies of your data.&quot; &amp;nbsp;And this is all just backups, with no provision for high availability, and no guarantees of a quick restore: &amp;nbsp;&quot;Typically we upload mydumper backups to s3 vs xtrabackup given the time needed to upload/download. Though it depends on the available bandwidth and should be factored into your restore time.&quot; &amp;nbsp;&quot;Often the limiter of how fast this can be restored to another server, is how fast you can transfer data over your network. If you have 1GB network and you have 1TB of data, it could take awhile.&quot; &amp;nbsp;How long do you think it will take from S3?&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/353661288079545313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/08/high-availability-means-14-copies-of.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/353661288079545313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/353661288079545313'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/08/high-availability-means-14-copies-of.html' title='High Availability Means 14 Copies of Your Data'/><author><name>Ryan Thomas-Martin Miller</name><uri>https://plus.google.com/104719749855625600679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7972664440078980714.post-6258501127610135940</id><published>2012-04-20T11:22:00.003-07:00</published><updated>2016-04-11T07:47:18.931-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="business"/><category scheme="http://www.blogger.com/atom/ns#" term="navel gazing"/><category scheme="http://www.blogger.com/atom/ns#" term="pre-OP"/><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin"/><title type='text'>Lessons Learned</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;For the last six months, I have been employed half-time as an IT project manager, systems analyst, data scientist, and SQL developer. &amp;nbsp;Small company, many hats--but that&#39;s not exactly new for me considering that my first full-time job was at a YCombinator startup of four where I did not only all of the sysadmin work, but also the importer, the exporter, the mobile device integration, the manual frontend testing, and answered the customer service email. &amp;nbsp;What was new for me was having an IT job without root, and what a learning experience that was. &amp;nbsp;All of you who worked at places where I was the sysadmin will probably be saying &quot;it&#39;s about time!&quot; but better late than never. &amp;nbsp;I now have a new appreciation for the following:&lt;br /&gt;&lt;br /&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Hardware matters. &amp;nbsp;If developers ever once think &quot;this would be faster on my home computer&quot; then any hardware expenditure you&#39;ve supposedly saved is totally illusory given the cost of your developers&#39; time. &amp;nbsp;Not only is one gigabyte of RAM wholly inadequate for analysis of even medium-sized (~1MM records) datasets, but given that most modern tools are built with the expectation of local development, hardware frequently needs to be adequate to run servers, test databases, and client virtual machines.&lt;/li&gt;&lt;li&gt;OS matters. &amp;nbsp;Windows XP is not a modern OS, and frequently gets into states where it can&#39;t update due to obscure conflicts, making it a wildly insecure OS as well. &amp;nbsp;Installing libraries required by applications can be a nightmare. &amp;nbsp;This doesn&#39;t mean you should let developers install whatever they want, as that&#39;s not only a security risk, but also makes each developer reinvent the wheel on getting local development up and running, but you need to use something current and well supported.&lt;/li&gt;&lt;li&gt;&amp;nbsp;Permissions matter. &amp;nbsp;The traditional administrator/user distinction is wholly inadequate for developers. &amp;nbsp;On Windows, they&#39;ll need to be local administrators, though you can still impose most domain policies as long as they aren&#39;t intrusive (IE only or somesuch nonsense). &amp;nbsp;On Linux, use sudoers aggressively, or use Puppet to control what permanent changes root users can actually make, or both. &amp;nbsp;&lt;/li&gt;&lt;li&gt;Tools matter. &amp;nbsp;Yes, in the end Excel gives you a complete SQL shell and Turing-complete programming environment. &amp;nbsp;However compared to Ruby (or Perl or Python) for data munging and R for data analysis, it&#39;s a trainwreck where everything takes massively longer to write, test, and run. &amp;nbsp;Also, using 2007 with its row limits rather than 2010 can mean a ten-fold increase in effort as whole sheets get devoted to intermediate summary functions.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;And of course in addition to the new lessons, some old ones were heavily reinforced:&lt;br /&gt;&lt;br /&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;You don&#39;t always get what you pay for with employees, but you rarely if ever get more. &amp;nbsp;If you can&#39;t find good people, or are afraid to fire bad people because you can&#39;t replace them, then either your HR director needs to be the first one to go or you&#39;re not offering adequate compensation. &amp;nbsp;Don&#39;t forget that working for a prestigious company or in a great place or one with low cost of living or on a great project or for a famous person or whatever are their own forms of compensation--you both over and under-estimate them at your peril.&lt;/li&gt;&lt;li&gt;Confusion and indirectness are multiplicative. &amp;nbsp;A person or department with two bosses will get half as much done. &amp;nbsp;Software that has to be payed for by a third party or installed by a &quot;value-added&quot; reseller will only deliver half of the value. &amp;nbsp;If the professional services division of your vendor and its software developers are in different countries, they might as well be separate businesses.&lt;/li&gt;&lt;li&gt;There&#39;s no substitute for agile delivery of software if it involves any custom code or professional installation whatsoever. &amp;nbsp;Waterfall Does Not Work. &amp;nbsp;Nobody knows in advance what all of the right questions are, so your software will inevitably actually be delivered in stages. &amp;nbsp;Why not just plan it that way? &amp;nbsp;If you think the &quot;minimum viable product&quot; is really, really large, then think harder about whether you can deliver some piece of that product first to some part of the team, even if it can&#39;t yet face an end-customer.&lt;/li&gt;&lt;li&gt;If you haven&#39;t automated enforcement of your policies, you have no policy. &amp;nbsp;This (combined with 2 &amp;amp; 3 to be sure) is why all &quot;enterprise&quot; software takes forever to pay off: &amp;nbsp;the business logic delivered in the code isn&#39;t actually your business logic because before you had code nobody actually knew what your business logic was. &amp;nbsp;No systems analyst, team thereof, or procedure can fix this. &amp;nbsp;Agile software directly payed for by the people who use it, who themselves have a clear chain of command, is the only solution.&lt;/li&gt;&lt;li&gt;Test environments matter. &amp;nbsp;Agile development helps with this, because if development is agile then HEAD and PROD should always be close enough together to easily port production data back and forth, and nobody can pretend that test and production will happen on the same system since they&#39;re contemporaneous.&lt;/li&gt;&lt;li&gt;There&#39;s no substitute for courageous management. &amp;nbsp;The sooner the pain happens, the less painful it is.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/6258501127610135940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/04/lessons-learned.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/6258501127610135940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/6258501127610135940'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/04/lessons-learned.html' title='Lessons Learned'/><author><name>Ryan Thomas-Martin Miller</name><uri>https://plus.google.com/104719749855625600679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7972664440078980714.post-1952872567757669404</id><published>2012-01-20T13:34:00.000-08:00</published><updated>2016-04-11T07:47:18.877-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pre-OP"/><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin"/><title type='text'>Cluster Filesystems:  Some people still don&#39;t get HA</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;HA is about, more than anything, transparency and defined behavior. &amp;nbsp;I don&#39;t lose any sleep over switches, loadbalancers, NetApps, or DRBD systems that take 30s to come up after failover. &amp;nbsp;An issue where I would need to go physically swap a piece of hardware, or manually intervene to fail over between datacenters, might cause an hour of downtime, but at least it&#39;s well-bounded. &amp;nbsp;The things that really kill you are the ones where you shoot yourself or lose data. &amp;nbsp;Restoring backups on fresh hardware might take long enough that most people wouldn&#39;t describe it as HA, but it takes a lot less time than manual data recovery and change reconciliation.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://buckinghaminquirer.blogspot.com/2011/11/black-boxes-and-overfitting-twin-cases.html&quot;&gt;Wide area block devices aren&#39;t transparent and they don&#39;t have defined behavior&lt;/a&gt;. &amp;nbsp;That makes them a much worse choice than distributed databases, and a bit of setup complexity on the sysadmin and application sides doesn&#39;t change that. &amp;nbsp;I like Jonathan Ellis, but I think &lt;a href=&quot;http://pl.atyp.us/wordpress/index.php/2012/01/scaling-filesystems-vs-other-things/&quot;&gt;he just doesn&#39;t get it here&lt;/a&gt;. &amp;nbsp;He&#39;s focused on the technical possibilities at a particular layer of the stack (you can build a distributed filesystem on Cassandra, after all), rather than the performance of the stack as a whole (the only reason you&#39;d do that is if you had an app that only understood filesystems, and then your app can&#39;t make the decisions it needs to make given a distributed backend). &amp;nbsp;Developers who think that they can get HA resilience for free on top of someone else&#39;s abstractions are dangerously kidding themselves and need to stop. &amp;nbsp;Build your app within the constraints of someone&#39;s PaaS, build your own CAS tradeoff logic, or tell the business they can&#39;t afford HA. &amp;nbsp;Welcome to reality, folks.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/1952872567757669404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/01/cluster-filesystems-some-people-still.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/1952872567757669404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/1952872567757669404'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/01/cluster-filesystems-some-people-still.html' title='Cluster Filesystems:  Some people still don&#39;t get HA'/><author><name>Ryan Thomas-Martin Miller</name><uri>https://plus.google.com/104719749855625600679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7972664440078980714.post-4664896869785888928</id><published>2012-01-20T12:29:00.000-08:00</published><updated>2016-04-11T07:47:18.909-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pre-OP"/><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin"/><title type='text'>Glad Tidings</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Just a quick post which I&#39;d hoped to have out for Christmas highlighting some of the best recent software releases from a sysadmin perspective. &lt;br /&gt;&lt;br /&gt;First, &lt;a href=&quot;http://www.jedi.be/blog/2011/12/05/puppet-unit-testing-like-a-pro/&quot;&gt;unit testing tools for Puppe&lt;/a&gt;t. &amp;nbsp;Turning your infrastructure into code is an amazing development for about 50,000,000 reasons, but you&#39;ll only fully capitalize if you&#39;re willing to learn from the best practices of software development, like version control, peer review, modularization, and testing. &amp;nbsp;Up to now, testing tools for Puppet had been rather clunky, but this looks like a significant improvement.&lt;br /&gt;&lt;br /&gt;Second, &lt;a href=&quot;http://www.mysqlperformanceblog.com/2011/12/05/announcing-pam-authentication-plugin-for-mysql-early-access-release/&quot;&gt;PAM authentication for MySQL&lt;/a&gt;. &amp;nbsp;I&#39;m definitely a fan of Postgres, Cassandra, or HBase over MySQL, depending on the application requirements, but if you&#39;re stuck with a legacy MySQL deployment this is a security godsend. &amp;nbsp;I&#39;d keep my application passwords in the legacy system for performance and robustness, but elevated privileges should be strictly the domain of human beings, and this allows you to easily manage those accounts with whatever LDAP or Puppet tooling you&#39;ve already built for system accounts. &amp;nbsp;Welcome to access rights on day one and clean shutoff for departures. &amp;nbsp;You might think that my MySQL pick would be Percona&#39;s synchronous replication, but I have serious performance and robustness misgivings about that arrangement: &amp;nbsp;it&#39;s more complicated than simple failover, but doesn&#39;t give you the performance advantages of sharding.&lt;br /&gt;&lt;br /&gt;Third, &lt;a href=&quot;http://nosql.mypopescu.com/post/13540497716/netflix-open-sources-curator-zookeeper-library&quot;&gt;Netflix released their zookeeper library&lt;/a&gt;. &amp;nbsp;Multi-tier applications need a way to keep track of what cluster members are live in each tier, and traditional solutions like Puppet and DNS are too slow and asynchronous for large deployments. &amp;nbsp;Zookeeper is perfectly built for this problem, but adoption was limited since the interface was a pain unless you had a homogenous java stack. &amp;nbsp;Now solved :).&lt;br /&gt;&lt;br /&gt;Fourth, a set of &lt;a href=&quot;http://sysadvent.blogspot.com/2011/12/day-2-strategies-for-java-deployment.html&quot;&gt;tools for making java deployments&lt;/a&gt; easier. &amp;nbsp;I guess Java and the JVM platform are great for developers, with lots of tooling support for rapid development but a reasonable level of access to networking, data structures, and algorithms for performance. &amp;nbsp;It also allows hacked together Mac and Windows development environments. &amp;nbsp;For sysadmins, though, Java has basically been a nightmare, with its supposed portability meaning that it doesn&#39;t fit in cleanly with native Linux tools for deployment, configuration, and monitoring. &amp;nbsp;The last may still be a major issue, but the first seems to have made a major step forward with the projects mentioned above.&lt;br /&gt;&lt;br /&gt;Fifth, &lt;a href=&quot;http://aws.amazon.com/dynamodb/&quot;&gt;Amazon DynamoDB&lt;/a&gt;. &amp;nbsp;No, it doesn&#39;t have the features large users of Cassandra and HBase, or even clustered/sharded SQL, have come to expect. &amp;nbsp;It&#39;s probably not much cheaper, either. &amp;nbsp;But for many good and bad reasons, lots of OLTP webapps are committed to running in the cloud, and for those (read: &amp;nbsp;nearly all) where SimpleDB wasn&#39;t enough, this is a massive improvement over &lt;a href=&quot;http://buckinghaminquirer.blogspot.com/2011/11/black-boxes-and-overfitting-twin-cases.html&quot;&gt;the disaster of running your own SQL or NoSQL databases on block storage&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Happy 2012, sysadmins!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/4664896869785888928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/01/glad-tidings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/4664896869785888928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/4664896869785888928'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/2012/01/glad-tidings.html' title='Glad Tidings'/><author><name>Ryan Thomas-Martin Miller</name><uri>https://plus.google.com/104719749855625600679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7972664440078980714.post-5903309989751374725</id><published>2011-11-13T11:16:00.000-08:00</published><updated>2016-04-11T07:47:18.924-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pre-OP"/><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin"/><title type='text'>Puppet &amp; Cross-Cutting Concerns</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;One of the hardest things about managing a &lt;a href=&quot;http://puppetlabs.com/blog/&quot;&gt;Puppet&lt;/a&gt; installation for a complex infrastructure is handling cross-cutting concerns (servers that need to get a piece of configuration data based on the cartesian join of location, role, project/cluster, etc.). &amp;nbsp;Currently supported ways of doing this all have serious drawbacks. &amp;nbsp;You can do all the assignment manually in LDAP or some other directory, but that defeats the point of automation. &amp;nbsp;You can use extlookup, but it only supports a single hierarchy of overrides. &amp;nbsp;You can just have separate puppet instances for each cluster and reuse your modules, but what if you have servers that are in multiple clusters? (Such things are often dismissed by small shops with a single project or large shops with many servers in each role, but many real medium-size businesses with multiple products have such problems, and more or less inevitably so.) &amp;nbsp;I think Puppet needs to seriously look at &lt;a href=&quot;http://stackoverflow.com/questions/1708992/what-are-the-different-methods-for-injecting-cross-cutting-concerns&quot;&gt;decorators or some other method&lt;/a&gt; of handling this organically, which would require some aspect-oriented-programming support in the language.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/5903309989751374725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://buckinghaminquirer.blogspot.com/2011/11/puppet-cross-cutting-concerns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/5903309989751374725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/5903309989751374725'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/2011/11/puppet-cross-cutting-concerns.html' title='Puppet &amp; Cross-Cutting Concerns'/><author><name>Ryan Thomas-Martin Miller</name><uri>https://plus.google.com/104719749855625600679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7972664440078980714.post-6589082993438241289</id><published>2011-11-13T07:59:00.000-08:00</published><updated>2016-04-11T07:47:18.942-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="economics"/><category scheme="http://www.blogger.com/atom/ns#" term="pre-OP"/><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin"/><title type='text'>Black Boxes and Overfitting:  The Twin Cases of EBS and CDOs</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Edit: &amp;nbsp;lest you think EBS had solved its issues, it&#39;s still the AWS component with the most &lt;a href=&quot;https://aws.amazon.com/message/680342/&quot;&gt;frequent availability-zone-wide outages&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I think there are some instructive comparisons to be made between the motivations, technologies, and failure modes of Amazon Web Services&amp;nbsp;&lt;a href=&quot;http://blog.rightscale.com/2008/08/20/amazon-ebs-explained/&quot;&gt;Elastic Block Store&lt;/a&gt;&amp;nbsp;(EBS) and investment banks&#39;&amp;nbsp;&lt;a href=&quot;http://www.khanacademy.org/video/collateralized-debt-obligation--cdo?playlist=Credit+Crisis&quot;&gt;collateralized debt obligations&lt;/a&gt;&amp;nbsp;(CDOs). &amp;nbsp;With luck, elucidating those similarities will help lessons learned in each area mitigate risk in the other and maybe even help technical workers better understand financial risk and financial workers better understand technical risk (in the spirit of&amp;nbsp;&lt;a href=&quot;http://martinfowler.com/bliki/TechnicalDebt.html&quot;&gt;technical debt&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. &amp;nbsp;EBS and CDOs were both born from the insight that sharing can reduce risk. &amp;nbsp;&lt;/b&gt;Before EC2/EBS, companies could either bet on high usage, with the attendant risk of having lots of capital tied up in non-productive assets if traffic was lower than expected or efficiency was higher, or bet on low usage and fail to serve customers if traffic was higher than expected or efficiency lower. &amp;nbsp;EC2/EBS uses a shared infrastructure, so capacity projection can happen at the (hopefully more stable) level of the internet as a whole, with resources dynamically allocated to whoever needs them at a given time. &lt;br /&gt;&lt;br /&gt;Before CDOs, financial institutions tended to have large exposures to the risk of those regions or industries where their market presence was highest, and since particular regions and industries tend to have more volatile economic profiles than the world as a whole, they either needed to carry excess non-productive (reserve) capital to offset that risk, or potentially go bankrupt in a sectoral downturn (e.g. Dustbowl banks during the Great Depression). &amp;nbsp;CDOs allow each financial institution to package risk in a standard way, so that they can buy and sell whatever portions are necessary to achieve an optimum risk profile within their budgets, rather than being hostile to the vagaries of the markets in which they operate. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. &amp;nbsp;EBS and CDOs are both marketed by trusted vendors of other products who ask for more faith.&lt;/b&gt;&amp;nbsp; Whatever you personally think of them, both Amazon and the major investment banks (Goldman, Merrill, Morgan, Bear, Lehman) were broadly trusted for all kinds of transactions before they started to push EBS and CDOs. &amp;nbsp;Not only unrelated kinds of business (retail brokerage, Christmas presents) but also more direct precursors in the sharing of risk: &amp;nbsp;asset backed securities and S3.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. &amp;nbsp;EBS and CDOs are both driven by concerns about time to market, transaction costs, and labor costs.&lt;/b&gt;&amp;nbsp; In addition to chasing lower risk, businesses also want to cut expenses, and having standardized structures in which somebody else does the legwork that you can buy and sell on the open market at any time seemed like a great way of doing that. &amp;nbsp;Tech companies could stop hiring sysadmins and purchasing agents. &amp;nbsp;Banks could stop trying to grow and acquire their way into more diversified markets. &amp;nbsp;Risk and computer time could be bought and sold whenever the business required, rather than waiting for some difficult logistics or paperwork chain to swing into action.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. &amp;nbsp;EBS and CDOs are both an attempt to make features from an old paradigm available in a new one.&lt;/b&gt;&amp;nbsp; I can&#39;t really think of anyone who would deny my first three claims, but this one is more subtle and possibly contentious. &amp;nbsp;Cloud services promised a new world of abstraction, ephemerality, and explicit guarantees. &amp;nbsp;The upside made companies desperate to move their web operations onto the platform, but their entrenched data models didn&#39;t fit into Dynamo&#39;s simple key/value paradigm and their legacy databases didn&#39;t replicate well enough for ephemeral storage to be sufficient. &amp;nbsp;Amazon wanted to please their customers (and increase profits) so they put a lot of duct tape and bailing wire around iSCSI, DRBD, and LVM and called it EBS. &amp;nbsp;All of the cloudy resource sharing, but now with permanent* block storage to accommodate legacy databases, carved out of some set of disks transparently mirrored and replicated behind the scenes. &amp;nbsp;Users then began to rely on&lt;a href=&quot;http://joyeur.com/2011/04/24/magical-block-store-when-abstractions-fail-us/&quot;&gt; that leaky abstraction&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Investment banks did something similar with CDOs. &amp;nbsp;In the new world of high frequency trading and complex computer models, once the mortgages were standardized into pools buyers could theoretically have bought any cross-section of a deal that they wanted, tailored to their needs, and subsequently saleable on the open market at whatever appreciation or depreciation then applied, just like equities. &amp;nbsp;Less sophisticated investors, however, like retirement funds, weren&#39;t equipped (or potentially allowed by statute) to run complex computer models on each segment of a transaction. &amp;nbsp;Instead, they demanded large blocks rated by the agencies (e.g. Standard &amp;amp; Poor, Fitch, etc) at discrete ratings (e.g. AAA or investment-grade). &amp;nbsp;So, like Amazon, the investment banks listened to their customers and their bottom lines and delivered. Standardized mortgage pools were&lt;a href=&quot;http://en.wikipedia.org/wiki/Tranche&quot;&gt; tranched&lt;/a&gt; into more &lt;a href=&quot;http://en.wikipedia.org/wiki/Securitization&quot;&gt;complex structures&lt;/a&gt;&amp;nbsp;that allowed large investment blocks to be declared AAA.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. &amp;nbsp;EBS and CDOs both provide incredible value in good times--which are most of the time.&lt;/b&gt;&amp;nbsp;&lt;a href=&quot;http://www.xaprb.com/blog/2010/06/01/under-provisioning-the-curse-of-the-cloud/&quot;&gt;Baron Schwartz explains&lt;/a&gt;&amp;nbsp;why virtualization has a very steep normal/worst-case performance curve, and why it&#39;s difficult to even find out what the worst case performance is. &amp;nbsp;Given that, the median performance will be well above the average performance, which makes cloud service seem like a very good value. &amp;nbsp;That&#39;s&amp;nbsp;&lt;a href=&quot;http://www.mysqlperformanceblog.com/2011/02/21/death-match-ebs-versus-ssd-price-performance-and-qos/&quot;&gt;even more true&lt;/a&gt;&amp;nbsp;of EBS, where the &lt;a href=&quot;http://perfcap.blogspot.com/2011/03/understanding-and-using-amazon-ebs.html&quot;&gt;additive variation occurs at each level&lt;/a&gt; of the stack that is virtualized (cpu, network, storage), and thus has even fatter tails. &lt;br /&gt;&lt;br /&gt;CDOs worked similarly: &amp;nbsp;having achieved a AAA rating with better yields than treasury bonds or similarly-rated corporate debt, during non-severe-recession years there was no way to detect hidden risk, and only the higher income stream was evident. &amp;nbsp;Public pension funds and private &lt;a href=&quot;http://www.gladwell.com/2002/2002_04_29_a_blowingup.htm&quot;&gt;hedge funds both looked flush with cash, but were really just lucky&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6. &amp;nbsp;EBS and CDOs both created environments where users were hyper-aware of luck at a micro-scale, while completely ignoring it at a macro-scale, so hedging strategies were actually counter-productive.&lt;/b&gt;&amp;nbsp; EBS users are so aware of randomness in the loading of particular parts of the infrastructure that they often&amp;nbsp;&lt;a href=&quot;http://joyeur.com/2011/04/22/on-cascading-failures-and-amazons-elastic-block-store/&quot;&gt;create new volumes, test them, and discard them if performance is poor&lt;/a&gt;. &amp;nbsp;They&amp;nbsp;&lt;a href=&quot;http://www.migrate2cloud.com/blog/resolving-the-degraded-instance-scenario-of-aws-ec2&quot;&gt;devise best practices around hardware failures&lt;/a&gt;. &amp;nbsp;As that first article explains, however, performance failures turned out to be correlated, and as both AWS itself and its users tried to find enough working sections of the system to remirror their data, more and &lt;a href=&quot;http://www.xaprb.com/blog/2011/04/25/the-bigger-they-are-the-harder-they-fall/&quot;&gt;more sections became overloaded and failed&lt;/a&gt;. &amp;nbsp;In fact,&lt;a href=&quot;http://blog.reddit.com/2011/03/why-reddit-was-down-for-6-of-last-24.html&quot;&gt; the more users tried to spread data across volumes, the more pain they felt&lt;/a&gt;. &amp;nbsp;User behavior in attempting to account for local risk actually changed the way the service was being used enough to generate increased global risk.&lt;br /&gt;&lt;br /&gt;CDOs work similarly. &amp;nbsp;If particular mortgages and bonds weren&#39;t risky, there would be no point in securitizing them. &amp;nbsp;It turns out that securitization is &lt;a href=&quot;http://www.wired.com/techbiz/it/magazine/17-03/wp_quant?currentPage=all&quot;&gt;highly dependent on the correlation factor of the underlying assets&lt;/a&gt;, however, which of course turned out to be higher than expected. &amp;nbsp;So the creation of CDOs lowered the expectation of risk, but didn&#39;t actually lower risk, meaning that lots of perceived value was destroyed when they crumbled. &amp;nbsp;Furthermore, as banks tried to further hedge their risks with credit default swaps (CDS) on those CDOs, sellers of credit default swaps, like &lt;a href=&quot;http://newyorkfed.org/markets/maidenlane.html&quot;&gt;AIG, would go bankrupt&lt;/a&gt; in a bust even if they had no exposure at all to the original loans. &amp;nbsp;Worse, the very creation of CDOs allowed credit to flow more effectively, creating a bubble in housing prices which changed the assumptions on which the CDOs were based.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7. &amp;nbsp;EBS and CDOs both create abstractions which are not amenable to performance observation or prediction in crises.&lt;/b&gt;&amp;nbsp; Much of the pain suffered by customers around EBS is because the abstraction&#39;s developer contract is so broad and opaque. &amp;nbsp;Amazon can restore an S3 bucket sans one file, and you have most of your life back. &amp;nbsp;Amazon can&#39;t restore an EBS volume without a certain stripe because your filesystem won&#39;t mount. &amp;nbsp;Conversely, the end user doesn&#39;t know when snapshotting and moving to a new volume will help (because the contention is purely local and random) or hurt (because the whole system is experiencing pain). &amp;nbsp;Since neither party knows what data is actually where, &lt;a href=&quot;http://joyeur.com/2011/04/25/network-storage-in-the-cloud-delicious-but-deadly/&quot;&gt;neither party knows what&#39;s really going on&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://freerisk.org/wiki/index.php/CDO_regulation#Transparency_of_structured_finance_products&quot;&gt;CDOs suffer a similar problem with lack of transparency&lt;/a&gt;. &amp;nbsp;Since the companies who deal with mortgage customers don&#39;t actually own the loans, and in fact many entities may own shares of a single loan under different contact terms, &lt;a href=&quot;http://www.businessweek.com/magazine/content/09_08/b4120034100121.htm&quot;&gt;preventing effective loan modifications&lt;/a&gt;. &amp;nbsp;&lt;a href=&quot;http://www.financialmodelingguide.com/financial-modeling-tips/tips/financial-modelers-manifesto/&quot;&gt;CDO default correlations&lt;/a&gt; are the outputs of models with enormous numbers of variables, each with uknown distributions, making it impossible for different parties to agree on valuations during periods of market volatility--which is why &lt;a href=&quot;http://www.fdic.gov/regulations/examinations/supervisory/insights/sisum08/article01_transparency.html&quot;&gt;CDOs were so illiquid during the crash&lt;/a&gt;, and basically solvent banks had to accept government assistance to pay their daily bills.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lessons learned?&lt;/b&gt;&amp;nbsp; In both cases, some major firms, like&amp;nbsp;&lt;a href=&quot;http://techblog.netflix.com/2011/04/lessons-netflix-learned-from-aws-outage.html&quot;&gt;Netflix&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;http://www.thenation.com/article/153929/aig-bailout-scandal?page=full&quot;&gt;Goldman Sachs&lt;/a&gt;&amp;nbsp;understood the underlying architectures well enough to avoid using those parts which were not sufficiently transparent for their needs, unlike &lt;a href=&quot;http://blog.arkesystems.com/post/2011/03/20/The-law-of-leaky-abstractions-and-Redditrsquo3bs-experience-with-the-cloud.aspx&quot;&gt;Reddit&lt;/a&gt; and AIG which suffered mightily from failing to do so. &amp;nbsp;The obvious lesson is that if you&#39;re making money but you &lt;a href=&quot;http://www.joelonsoftware.com/articles/LeakyAbstractions.html&quot;&gt;don&#39;t really understand the underlying models&lt;/a&gt; that power your business, you&#39;re probably unwittingly taking on a lot of risk, perhaps at someone else&#39;s gain. &amp;nbsp;&lt;span style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-auto;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/There_ain&#39;t_no_such_thing_as_a_free_lunch&quot;&gt;TANSTAAFL&lt;/a&gt;, as I believe &lt;a href=&quot;http://www.bookingbuddy.com/&quot;&gt;Smarter Travel Media&lt;/a&gt;&amp;nbsp;may have found out in the online advertising department.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-auto;&quot;&gt;&lt;b&gt;The more effective your business is at optimizing to a set of constraints, the more important it is that you understand the forward validity of those constraints.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-auto;&quot;&gt;On the provider end, realize that most of your &lt;a href=&quot;http://sourcemaking.com/antipatterns/the-grand-old-duke-of-york&quot;&gt;users don&#39;t know what abstractions are actually helpful&lt;/a&gt;. &amp;nbsp;You have to&amp;nbsp;&lt;a href=&quot;http://jasonmbaker.com/how-to-come-up-with-good-abstractions&quot;&gt;trust your gut&lt;/a&gt;&amp;nbsp;to come up with good ones--and you&#39;ll remember that AWS didn&#39;t ship with EBS, and no other cloud provider has anything like it. &amp;nbsp;I wonder why? &amp;nbsp;Similarly, Goldman hedged their CDO risk instead of banking on it, and most investment bankers are &lt;a href=&quot;http://www.lateralthinking.biz/bonuses-wrong-incentive.html&quot;&gt;incentivized to ignore their instincts on risk&lt;/a&gt;. &amp;nbsp;If you&#39;re pressured by customers/profit into offering an abstraction that your gut knows is wrong, prepare technically and legally for assured future pain.&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/6589082993438241289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://buckinghaminquirer.blogspot.com/2011/11/black-boxes-and-overfitting-twin-cases.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/6589082993438241289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/6589082993438241289'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/2011/11/black-boxes-and-overfitting-twin-cases.html' title='Black Boxes and Overfitting:  The Twin Cases of EBS and CDOs'/><author><name>Ryan Thomas-Martin Miller</name><uri>https://plus.google.com/104719749855625600679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7972664440078980714.post-4379550225759514006</id><published>2011-11-11T20:57:00.000-08:00</published><updated>2016-04-11T07:47:18.905-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pre-OP"/><category scheme="http://www.blogger.com/atom/ns#" term="sysadmin"/><title type='text'>Why You Shouldn&#39;t Use MongoDB for OLTP</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;UPDATE4: &amp;nbsp;&lt;a href=&quot;https://aphyr.com/posts/284-call-me-maybe-mongodb&quot;&gt;Still broken on the Jepsen network partition test&lt;/a&gt;; many users report *weekly* cluster crashes.&lt;br /&gt;&lt;br /&gt;UPDATE3: &amp;nbsp;&lt;a href=&quot;http://hackingdistributed.com/2013/02/03/when-data-is-worthless/&quot;&gt;Don&#39;t use Mongo for OLAP either&lt;/a&gt;. &amp;nbsp;I used to think Mongo was fine for OLAP, because if you lost a disk or something you could just reload all of your data. &amp;nbsp;But if your OLAP setup is big enough to actually need a replicated datastore, it&#39;s big enough that you can&#39;t afford to reload everything everytime you lose a disk and/or crash a process.&lt;br /&gt;&lt;br /&gt;UPDATE2: &amp;nbsp;If you thought Mongo2.2, getLastError, or writeConcern would solve these problems, &lt;a href=&quot;http://hackingdistributed.com/2013/01/29/mongo-ft/&quot;&gt;they don&#39;t&lt;/a&gt;. &amp;nbsp;Yes, that&#39;s a flame by a competitor, but the arguments from the code aren&#39;t rebutted anywhere. &amp;nbsp;Even with all of the options turned on, you can still lose data in a single disk crash.&lt;br /&gt;&lt;br /&gt;UPDATE: &amp;nbsp;Obviously this post is a little dated, but this&amp;nbsp;&lt;a href=&quot;http://news.ycombinator.org/item?id=4252270&quot;&gt;post and comments at Hacker News&lt;/a&gt;&amp;nbsp;substantiates all the same concerns about Mongo (and MySQL-like architectures in general) in production settings. &amp;nbsp;If you need availability, you need a true P2P architecture, and if you need performance you need to focus on durable write speed and scalability. &amp;nbsp;The other way around turns into ops-hell just when your business takes off.&lt;br /&gt;&lt;br /&gt;Why is MongoDB a popular option?&lt;br /&gt;1.&amp;nbsp;&amp;nbsp;The developer libraries are really easy to use and standalone systems are easy to install. &amp;nbsp;Many database projects are developed by extremely talented people who think that because writing a connection library is easy compared to the database internals, end users would really just want to write their own custom stuff anyway. &amp;nbsp;Mongo and MySQL succeed in no small part because they fully recognize that developers are expected to have a working prototype yesterday.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;It seems to offer the scalability and power of HBase/Cassandra with the ease of use of CouchDB/MySQL. Of course you can&#39;t get something for nothing, but &quot;something for me now&quot; at the cost of &quot;maybe something for somebody else later&quot; is often an attractive tradeoff. &amp;nbsp;Additionally, 10gen try really hard to gloss over/ignore/propagandize over those &lt;a href=&quot;http://nosql.mypopescu.com/post/21709726563/mongodb-memory-mapped-files-and-data-access&quot;&gt;tradeoffs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;3. &amp;nbsp;Mongo is the best way of solving the unsolvable problem of running a high volume Web 2.0 OLTP database on EC2, due to the horrific storage latency of EBS.&lt;br /&gt;&lt;br /&gt;So let me take those in order.&lt;br /&gt;&lt;br /&gt;1. &amp;nbsp;That&#39;s just true, and is a lesson that lots of infrastructure developers should bear in mind. &amp;nbsp;It&#39;s what made Steve Jobs rich. &amp;nbsp;Usability matters, whether we like it or not. &amp;nbsp;One thing organizations can do to keep this from skewing their judgment too much is to take on the DevOps model, where the production sysadmins are right in there with the prototyping developers, and can hopefully help them get environments up and running quickly while also accelerating the production sysadmin&#39;s understanding of the platform. &amp;nbsp;Win/win. &amp;nbsp;Of course in purely exploratory use cases this may be the only thing that matters, but I think part of the lesson of the agile movement is that there basically aren&#39;t any of those. &amp;nbsp;If they wanted the prototype yesterday, they&#39;ll want the production implementation yesterday too, so you&#39;ll reuse the prototype.&lt;br /&gt;&lt;br /&gt;2. &amp;nbsp;This is the big one. &amp;nbsp;&lt;a href=&quot;http://nosql.mypopescu.com/post/12466059249/anonymous-post-dont-use-mongodb&quot;&gt;Alex Popescu passes on an anonymous rant&lt;/a&gt;&amp;nbsp;that summarizes the issues. &amp;nbsp;The rant itself may be a hoax, but the design complaints echoed by Alex&#39;s commenters are no less trenchant for that:&lt;br /&gt;a. &amp;nbsp;&lt;a href=&quot;http://nosql.mypopescu.com/post/45763370004/10gens-mongodb-following-the-steps-of-mysql&quot;&gt;Like MySQL&lt;/a&gt;, Mongo&#39;s performance benchmarks are all done with the safety features turned off (immediate writes, writeahead log). &amp;nbsp;You either get (drastically) less performance than you expected when you flip the production switch, or you cross your fingers and pray.&lt;br /&gt;b. &amp;nbsp;&lt;a href=&quot;http://nosql.mypopescu.com/post/45763370004/10gens-mongodb-following-the-steps-of-mysql&quot;&gt;Like MySQL&lt;/a&gt;, Mongo is optimized for reads (everything in RAM) and not writes (global write lock!)--except writes are the hard problem, writes are the problem that doesn&#39;t occur in dev and is hard to simulate in test, and reads can usually be papered over with caches.&lt;br /&gt;c. &amp;nbsp;&lt;a href=&quot;http://nosql.mypopescu.com/post/45763370004/10gens-mongodb-following-the-steps-of-mysql&quot;&gt;Like MySQL&lt;/a&gt;, Mongo relies on a master/slave arrangement for availability. &amp;nbsp;Anyone who has dealt with MySQL replication at scale, like say Mark Callaghan, knows this is a nightmare. &amp;nbsp;&lt;a href=&quot;http://www.mysqlperformanceblog.com/2009/10/16/finding-your-mysql-high-availability-solution-%E2%80%93-the-questions/&quot;&gt;Percona estimates the approach at only three nines of uptime.&lt;/a&gt;&amp;nbsp; Making replication truly crash-safe is a really hard problem. &amp;nbsp;Making sure that you have a known window of data loss during slave failover is also a hard problem. &amp;nbsp;Both need to be baked in from the beginning--databases need to be fundamentally clustered (this is of course why things like HBase/Cassandra/Oracle RAC are harder to get going in the first place).&lt;br /&gt;d. &amp;nbsp;&lt;a href=&quot;http://nosql.mypopescu.com/post/45763370004/10gens-mongodb-following-the-steps-of-mysql&quot;&gt;Like MySQL&lt;/a&gt;, resharding is a bolt-on feature of Mongo, instead of being baked in from the beginning. &amp;nbsp;Given that this is basically the hardest thing to get right in a clustered database, that&#39;s a recipe for disaster.&lt;br /&gt;&lt;br /&gt;In general, 10gen like MySQL looks good on Wiki pages and RFP responses because all the boxes are checked, but fails in real life where you want all of the boxes checked at the same time. &amp;nbsp;Not only is that borderline dishonest, it&#39;s a terrible way to write software since it&#39;s almost impossible to fix later on. &amp;nbsp;Beyond that, the CAP theorem is a harsh mistress, and as the people who actually write this stuff keep telling you, the only way to make an accurate tradeoff is to know your data really well (what&#39;s the locality for reads and writes, does the distribution work well for bloom filtering, etc.). &amp;nbsp;When Mongo offers a schema-free solution that offers great query performance without knowing anything about your data, you can be sure that CAP is going to bite you later in ways you didn&#39;t expect.&lt;br /&gt;&lt;br /&gt;3. &amp;nbsp;This is also probably true. &amp;nbsp;&lt;a href=&quot;https://www.joyent.com/blog/magical-block-store-when-abstractions-fail-us&quot;&gt;EBS is a lie, which is to say inevitably brittle&lt;/a&gt;, and like with Mongo and MySQL, it&#39;s a design level problem that implementation fixes won&#39;t help. &amp;nbsp;So your options right now are:&lt;br /&gt;a. &amp;nbsp;Magically force your data into a pure key/value system and use SimpleDB.&lt;br /&gt;b. &amp;nbsp;Use Mongo (or RDS if your volume is low) and live with lost data and downtime. With&amp;nbsp;&lt;a href=&quot;http://www.mysqlperformanceblog.com/2011/02/21/death-match-ebs-versus-ssd-price-performance-and-qos/&quot;&gt;latency like this&lt;/a&gt;&amp;nbsp;you can&#39;t afford to doublewrite or synchronously replicate anyway. &amp;nbsp;If your business is FourSquare, that might be ok.&lt;br /&gt;c. &amp;nbsp;Buy servers.&lt;br /&gt;d. &amp;nbsp;Fork over the substantial operating cost for&amp;nbsp;&lt;a href=&quot;http://aws.amazon.com/dynamodb/&quot;&gt;DynamoDB&lt;/a&gt;.&lt;br /&gt;e. &amp;nbsp;Run &lt;a href=&quot;http://blog.reddit.com/2011/03/why-reddit-was-down-for-6-of-last-24.html&quot;&gt;Cassandra on ephemeral node storage&lt;/a&gt;&amp;nbsp;like Reddit. &amp;nbsp;This works ok if you have a lot of nodes (&amp;gt;6, minimum) across availability zones and highly automated bootstrapping (e.g. if you&#39;re big enough that you could probably afford your own servers anyway). &amp;nbsp;But this is a reasonable upgrade path from DynamoDB.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buckinghaminquirer.blogspot.com/feeds/4379550225759514006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://buckinghaminquirer.blogspot.com/2011/11/why-you-shouldnt-use-mongodb-for-oltp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/4379550225759514006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7972664440078980714/posts/default/4379550225759514006'/><link rel='alternate' type='text/html' href='http://buckinghaminquirer.blogspot.com/2011/11/why-you-shouldnt-use-mongodb-for-oltp.html' title='Why You Shouldn&#39;t Use MongoDB for OLTP'/><author><name>Ryan Thomas-Martin Miller</name><uri>https://plus.google.com/104719749855625600679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-MiFx5yFUvb0/AAAAAAAAAAI/AAAAAAAATSE/wReeKrkfVkc/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>