<?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>Microservices on Brave New Geek</title><link>https://bravenewgeek.com/tag/microservices/</link><description>Recent content in Microservices on Brave New Geek</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 06 Oct 2021 09:44:55 -0600</lastBuildDate><atom:link href="https://bravenewgeek.com/tag/microservices/index.xml" rel="self" type="application/rss+xml"/><item><title>SRE Doesn’t Scale</title><link>https://bravenewgeek.com/sre-doesnt-scale/</link><pubDate>Wed, 06 Oct 2021 09:44:55 -0600</pubDate><guid>https://bravenewgeek.com/sre-doesnt-scale/</guid><description>&lt;p&gt;&lt;a href="https://bravenewgeek.com/wp-content/uploads/2021/10/sre-book.jpeg"&gt;&lt;img loading="lazy" src="https://bravenewgeek.com/wp-content/uploads/2021/10/sre-book.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We encounter &lt;em&gt;a lot&lt;/em&gt; of organizations talking about or attempting to implement SRE as part of our consulting at Real Kinetic. We’ve even discussed and debated ourselves, ad nauseam, how we can apply it at our own product company, &lt;a href="https://witful.com/"&gt;Witful&lt;/a&gt;. There’s a brief, unassuming section in the &lt;a href="https://sre.google/sre-book/table-of-contents/"&gt;SRE book&lt;/a&gt; tucked away towards the tail end of &lt;a href="https://sre.google/sre-book/evolving-sre-engagement-model/"&gt;chapter 32&lt;/a&gt;, “The Evolving SRE Engagement Model.” Between the SLIs and SLOs, the error budgets, alerting, and strategies for handling change management, it’s probably one of the most overlooked parts of the book. It’s also, in my opinion, one of the most important.&lt;/p&gt;</description></item><item><title>Microservice Observability, Part 2: Evolutionary Patterns for Solving Observability Problems</title><link>https://bravenewgeek.com/microservice-observability-part-2-evolutionary-patterns-for-solving-observability-problems/</link><pubDate>Fri, 03 Jan 2020 14:18:10 -0600</pubDate><guid>https://bravenewgeek.com/microservice-observability-part-2-evolutionary-patterns-for-solving-observability-problems/</guid><description>&lt;p&gt;In &lt;a href="https://bravenewgeek.com/microservice-observability-part-1-disambiguating-observability-and-monitoring/"&gt;part one&lt;/a&gt; of this series, I described the difference between monitoring and observability and why the latter starts to become more important when dealing with microservices. Next, we’ll discuss some strategies and patterns for &lt;em&gt;implementing&lt;/em&gt; better observability. Specifically, we’ll look at the idea of an &lt;a href="https://bravenewgeek.com/the-observability-pipeline/"&gt;observability pipeline&lt;/a&gt; and how we can start to iteratively improve observability in our systems.&lt;/p&gt;
&lt;p&gt;To recap, observability can be described simply as the ability to ask questions of your systems without knowing those questions in advance. This requires capturing a variety of signals such as logs, metrics, and traces as well as tools for interpreting those signals like log analysis, SIEM, data warehouses, and time-series databases. A number of challenges surface as a result of this. &lt;a href="https://twitter.com/clintsharp"&gt;Clint Sharp&lt;/a&gt; does a great job &lt;a href="https://cribl.io/blog/the-observability-pipeline/"&gt;discussing&lt;/a&gt; the key problems, which I’ll summarize below along with some of my own observations.&lt;/p&gt;</description></item><item><title>Microservice Observability, Part 1: Disambiguating Observability and Monitoring</title><link>https://bravenewgeek.com/microservice-observability-part-1-disambiguating-observability-and-monitoring/</link><pubDate>Thu, 03 Oct 2019 10:55:23 -0500</pubDate><guid>https://bravenewgeek.com/microservice-observability-part-1-disambiguating-observability-and-monitoring/</guid><description>&lt;p&gt;“Pets versus cattle” has become something of a standard vernacular for describing the shift in how we build systems. It alludes to the elastic and dynamic nature of these (typically, but not necessarily) container-based systems with on-demand scaling and more transparent fault-tolerance. I’ve &lt;a href="https://bravenewgeek.com/the-observability-pipeline/"&gt;talked before about this transition&lt;/a&gt; before and specifically how it relates to monitoring. In particular, with these more dynamic, microservice-based systems, the conversation starts to shift away from traditional &lt;em&gt;monitoring&lt;/em&gt; toward &lt;em&gt;observability&lt;/em&gt;. In this series, I’ll describe that distinction, explain why it matters, and share some concrete tactical items for implementing observability in a microservice environment.&lt;/p&gt;</description></item><item><title>The Observability Pipeline</title><link>https://bravenewgeek.com/the-observability-pipeline/</link><pubDate>Wed, 12 Sep 2018 11:37:24 -0500</pubDate><guid>https://bravenewgeek.com/the-observability-pipeline/</guid><description>&lt;p&gt;The rise of cloud and containers has led to systems that are much more distributed and dynamic in nature. Highly elastic microservice and serverless architectures mean containers spin up on demand and scale to zero when that demand goes away. In this world, servers are very much cattle, not pets. This shift has exposed deficiencies in some of the tools and practices we used in the world of servers-as-pets. It has also led to new tools and services created to help us support our systems.&lt;/p&gt;</description></item><item><title>More Environments Will Not Make Things Easier</title><link>https://bravenewgeek.com/more-environments-will-not-make-things-easier/</link><pubDate>Wed, 11 Apr 2018 15:49:47 -0500</pubDate><guid>https://bravenewgeek.com/more-environments-will-not-make-things-easier/</guid><description>&lt;p&gt;Microservices are &lt;a href="https://bravenewgeek.com/service-disoriented-architecture/"&gt;hard&lt;/a&gt;. They require extreme discipline. They require a lot more upfront thinking. They introduce integration challenges and complexity that you otherwise wouldn’t have with a monolith, but service-oriented design is an important part of scaling organization structure. Hundreds of engineers all working on the same codebase will only lead to angst and the inability to be nimble.&lt;/p&gt;
&lt;p&gt;This requires a pretty significant change in the way we think about things. We’re creatures of habit, so if we’re not careful, we’ll just keep on applying the same practices we used before we did services. And that will end in frustration.&lt;/p&gt;</description></item><item><title>Thrift on Steroids: A Tale of Scale and Abstraction</title><link>https://bravenewgeek.com/thrift-on-steroids-a-tale-of-scale-and-abstraction/</link><pubDate>Thu, 30 Nov 2017 19:49:24 -0600</pubDate><guid>https://bravenewgeek.com/thrift-on-steroids-a-tale-of-scale-and-abstraction/</guid><description>&lt;p&gt;&lt;a href="https://thrift.apache.org/"&gt;Apache Thrift&lt;/a&gt; is an RPC framework developed at Facebook for building “scalable cross-language services.” It consists of an interface definition language (IDL), communication protocol, API libraries, and a code generator that allows you to build and evolve services independently and in a polyglot fashion across a wide range of languages. This is nothing new and has been around for over a decade now.&lt;/p&gt;
&lt;p&gt;There are a number of notable users of Thrift aside from Facebook, including Twitter (mainly by way of &lt;a href="https://twitter.github.io/finagle/"&gt;Finagle&lt;/a&gt;), Foursquare, Pinterest, Uber (via &lt;a href="https://uber.github.io/tchannel/"&gt;TChannel&lt;/a&gt;), and Evernote, among others—and for good reason, Thrift is mature and battle-tested.&lt;/p&gt;</description></item><item><title>Smart Endpoints, Dumb Pipes</title><link>https://bravenewgeek.com/smart-endpoints-dumb-pipes/</link><pubDate>Thu, 29 Jun 2017 19:02:46 -0500</pubDate><guid>https://bravenewgeek.com/smart-endpoints-dumb-pipes/</guid><description>&lt;p&gt;I read an interesting article recently called &lt;a href="http://programmingisterrible.com/post/162346490883/how-do-you-cut-a-monolith-in-half"&gt;How do you cut a monolith in half?&lt;/a&gt; There are a lot of thoughts in the article that resonate with me and some that I disagree with, prompting this response.&lt;/p&gt;
&lt;p&gt;The overall message of the article is don’t use a message broker to break apart a monolith because it’s like a cross between a load balancer and a database, with the disadvantages of both and the advantages of neither. The author argues that message brokers are a popular way to pull apart components over a network because they have low setup cost and provide easy service discovery, but they come at a high operational cost. My response to that is the same advice the author puts forward: &lt;em&gt;it depends&lt;/em&gt;.&lt;/p&gt;</description></item><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>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>Service-Disoriented Architecture</title><link>https://bravenewgeek.com/service-disoriented-architecture/</link><pubDate>Sun, 07 Jun 2015 16:03:22 -0500</pubDate><guid>https://bravenewgeek.com/service-disoriented-architecture/</guid><description>&lt;p&gt;&lt;em&gt;“You can have a second computer once you’ve shown you know how to use the first one.” -Paul Barham&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The first rule of distributed systems is don’t distribute your system until you have an observable reason to. Teams break this rule on the regular. People have been talking about service-oriented architecture for a long time, but only recently have microservices been receiving the hype.&lt;/p&gt;
&lt;p&gt;The problem, as &lt;a href="http://martinfowler.com/bliki/MicroservicePremium.html"&gt;Martin Fowler observes&lt;/a&gt;, is that teams are becoming too eager to adopt a microservice architecture without first understanding the &lt;a href="http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html"&gt;inherent overheads&lt;/a&gt;. A contributing factor, I think, is you only hear the success stories from companies who did it right, like Netflix. However, what folks often fail to realize is that these companies—in almost all cases—didn’t start out that way. There was a long and winding path which led them to where they are today. The inverse of this, which some refer to as &lt;a href="http://www.thoughtworks.com/radar/techniques/microservice-envy"&gt;microservice envy&lt;/a&gt;, is causing teams to rush into microservice hell. I call this service-&lt;em&gt;disoriented&lt;/em&gt; architecture (or sometimes disservice-oriented architecture when the architecture is DOA).&lt;/p&gt;</description></item><item><title>If State Is Hell, SOA Is Satan</title><link>https://bravenewgeek.com/if-state-is-hell-soa-is-satan/</link><pubDate>Sun, 08 Mar 2015 12:33:18 -0600</pubDate><guid>https://bravenewgeek.com/if-state-is-hell-soa-is-satan/</guid><description>&lt;p&gt;More and more companies are describing their &lt;a href="http://nginx.com/blog/microservices-at-netflix-architectural-best-practices/"&gt;success stories&lt;/a&gt; regarding the switch to a service-oriented architecture. As with any technological upswing, there’s a clear and palpable hype factor involved (Big Data™ or The Cloud™ anyone?), but obviously it’s not just puff.&lt;/p&gt;
&lt;p&gt;While microservices and SOA have seen a staggering &lt;a href="http://www.enterprisecioforum.com/en/blogs/enadhan/secrets-behind-rapid-growth-soa"&gt;rate of adoption&lt;/a&gt; in recent years, the mindset of developers often seems to be stuck in the past. I think this is, at least in part, because we seek a mental model we can reason about. It’s why we build abstractions in the first place. In a sense, I would argue there’s a comparison to be made between the explosion of OOP in the early 90’s and today’s SOA trend. After all, &lt;strong&gt;SOA is as much about people scale as it is about workload scale&lt;/strong&gt;, so it makes sense from an organizational perspective.&lt;/p&gt;</description></item></channel></rss>