# Why do we need distributed systems?

DevFeed: [Why do we need distributed systems?](<https://devfeed.tech/articles/why-do-we-need-distributed-systems-12490.md>)

Original publisher: [Read original article](<http://brooker.co.za/blog/2020/01/02/why-distributed.html>)

Author: Marc Brooker

Published: 2020-01-02T00:00:00Z

Content type: article

Language: en

Sources: [Marc Brooker's Blog](<https://devfeed.tech/sources/marc-brooker-s-blog.md>), [Marc Brooker's Blog](<https://devfeed.tech/sources/marc-brooker-s-blog-2.md>)

Topics: [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [Availability](<https://devfeed.tech/topics/availability.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [availability](<https://devfeed.tech/tags/availability.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [cost](<https://devfeed.tech/tags/cost.md>), [datacenter](<https://devfeed.tech/tags/datacenter.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [performance](<https://devfeed.tech/tags/performance.md>), [python](<https://devfeed.tech/tags/python.md>), [recovery](<https://devfeed.tech/tags/recovery.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [server](<https://devfeed.tech/tags/server.md>), [systems](<https://devfeed.tech/tags/systems.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tooling](<https://devfeed.tech/tags/tooling.md>)

## AI overview

This article argues that distributed systems remain necessary despite their greater complexity, cost, and lower efficiency compared with monolithic designs. Their key benefit is improved availability: by avoiding dependence on one server and continuously managing system state, distributed systems can reduce recovery work and time-to-recovery. The author also argues that better services, tooling, and technology should make distributed computing easier to build and operate.

## Source excerpt

Why do we need distributed systems? Building distributed systems is hard. It's expensive. It's complex. But we do it anyway. I grew up reading John Carmack's .plan file. His stories about the development of Doom, Quake and the rest were a formative experience for me, and a big reason I was interested in computers beyond just gaming1. I was a little bit disappointed to see this tweet: My formative memory of Python was when the Quake Live team used it for the back end work, and we wound up having serious performance problems with a few million users. My bias is that a lot (not all!) of complex "scalable" systems can be done with a simple, single C++ server. -- John Carmack (@ID_AA_Carmack) December 28, 2019 This isn't an isolated opinion, but I don't think it's a particularly good one. To be fair, there are a lot of good reasons not to build distributed systems. Complexity is one: distributed systems are legitimately harder to build, and significantly harder to understand and operate. Efficiency is another. As McSherry et al point out in Scalability! But at what COST?, single-system designs can have great performance and efficiency. Modern computers are huge and fast. I was not so much disappointed in John, as in our success at building distributed systems tools that make this untrue. Distributed computing could be much easier, and needs to be much easier. We need to get to a point, with services, tooling and technology, that monolithic systems aren't a good default. To understand why, let me answer the question in the post's title. Distributed systems offer better availability The availability of a monolithic system is limited to the availability of the piece of hardware it runs on. Modern hardware is pretty great, and combined with a good datacenter and good management practices servers can be expected to fail with an annual failure rate (AFR) in the single-digit percentages. That's OK, but not great in two ways. First, if you run a lot of systems fixing these server