<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Availability on Brave New Geek</title><link>https://bravenewgeek.com/tag/availability/</link><description>Recent content in Availability on Brave New Geek</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 23 Dec 2016 12:05:50 -0600</lastBuildDate><atom:link href="https://bravenewgeek.com/tag/availability/index.xml" rel="self" type="application/rss+xml"/><item><title>Take It to the Limit: Considerations for Building Reliable Systems</title><link>https://bravenewgeek.com/take-it-to-the-limit-considerations-for-building-reliable-systems/</link><pubDate>Tue, 20 Dec 2016 19:55:52 -0600</pubDate><guid>https://bravenewgeek.com/take-it-to-the-limit-considerations-for-building-reliable-systems/</guid><description>&lt;p&gt;Complex systems usually operate in failure mode. This is because a complex system typically consists of many discrete pieces, each of which can fail in isolation (or in concert). In a microservice architecture where a given function potentially comprises several independent service calls, &lt;em&gt;high&lt;/em&gt; availability hinges on the ability to be &lt;em&gt;partially&lt;/em&gt; available. This is a core tenet behind resilience engineering. If a function depends on three services, each with a reliability of 90%, 95%, and 99%, respectively, partial availability could be the difference between 99.995% reliability and 84% reliability (assuming failures are independent). Resilience engineering means designing with failure as the normal.&lt;/p&gt;</description></item><item><title>You Own Your Availability</title><link>https://bravenewgeek.com/you-own-your-availability/</link><pubDate>Tue, 22 Sep 2015 11:12:16 -0500</pubDate><guid>https://bravenewgeek.com/you-own-your-availability/</guid><description>&lt;p&gt;There’s been a lot of discussion around “availability” lately. It’s often trumpeted with phrases like “&lt;a href="http://www.whoownsmyavailability.com/"&gt;you own your availability&lt;/a&gt;,” meaning there is no buck-passing when it comes to service uptime. The &lt;a href="http://venturebeat.com/2015/09/20/amazons-aws-outage-takes-down-netflix-reddit-medium-and-more/"&gt;AWS outage&lt;/a&gt; earlier this week served as a stark reminder that, while owning your availability is a commendable ambition, for many it’s still largely owned by Amazon and the like.&lt;/p&gt;
&lt;p&gt;In order to “own” your availability, it’s important to first understand what “availability” really means. Within the context of distributed-systems theory, availability is usually discussed in relation to the &lt;a href="https://bravenewgeek.com/cap-and-the-illusion-of-choice/"&gt;CAP theorem&lt;/a&gt;. &lt;a href="https://www.comp.nus.edu.sg/~gilbert/pubs/BrewersConjecture-SigAct.pdf"&gt;Formally&lt;/a&gt;, CAP defines availability as a &lt;em&gt;liveness&lt;/em&gt; property: “every request received by a non-failing node in the system must result in a response.” This is a weak definition for two reasons. First, the proviso “every request received by a &lt;em&gt;non-failing&lt;/em&gt; node” means that a system in which &lt;em&gt;all&lt;/em&gt; nodes have failed is trivially available.  Second, Gilbert and Lynch stipulate no upper bound on latency, only that operations &lt;em&gt;eventually&lt;/em&gt; return a response. This means an operation could take weeks to complete and availability would not be violated.&lt;/p&gt;</description></item><item><title>Designed to Fail</title><link>https://bravenewgeek.com/designed-to-fail/</link><pubDate>Tue, 21 Jul 2015 20:17:17 -0500</pubDate><guid>https://bravenewgeek.com/designed-to-fail/</guid><description>&lt;p&gt;When it comes to reliability engineering, people often talk about things like fault injection, monitoring, and operations runbooks. These are all critical pieces for building systems which can withstand failure, but what’s less talked about is the need to design systems which &lt;em&gt;deliberately&lt;/em&gt; fail.&lt;/p&gt;
&lt;p&gt;Reliability design has a natural progression which closely follows that of architectural design. With monolithic systems, we care more about preventing failure from occurring. With service-oriented architectures, controlling failure becomes less manageable, so instead we learn to anticipate it. With highly distributed microservice architectures where failure is all but guaranteed, we &lt;em&gt;embrace&lt;/em&gt; it.&lt;/p&gt;</description></item><item><title>From Mainframe to Microservice: An Introduction to Distributed Systems</title><link>https://bravenewgeek.com/from-mainframe-to-microservice-an-introduction-to-distributed-systems/</link><pubDate>Sat, 01 Nov 2014 18:12:38 -0600</pubDate><guid>https://bravenewgeek.com/from-mainframe-to-microservice-an-introduction-to-distributed-systems/</guid><description>&lt;p&gt;I gave a talk at &lt;a href="http://iowacodecamp.com/"&gt;Iowa Code Camp&lt;/a&gt; this weekend on distributed systems. It was primarily an introduction to them, so it explored some core concepts at a high level.  We looked at why distributed systems are difficult to build (right), the CAP theorem, consensus, scaling shared data and CRDTs.&lt;/p&gt;
&lt;p&gt;There was some interest in making the slides available online. I’m not sure how useful they are without narration, but here they are anyway for posterity.&lt;/p&gt;</description></item></channel></rss>