DDIA Summary: Chapter 1 — Reliable, Scalable, and Maintainable Applications

Designing Data-Intensive Applications

Sunny, Lee
Sunny’s Life in CMU 🔅
3 min readJan 8, 2024

--

Agenda

1. Introduction

2. Reliability

3. Scalability

4. Maintainability

5. Conclusion

1. Introduction

An application has to meet various requirements in order to be useful. There are functional requirements (what it should do), and some nonfunctional requirements (security, reliability, compliance, scalability, compatibility, and maintainability).

2. Reliability

  • Reliability means making systems work correctly, even when faults occur.
  • Faults can be in hardware, software, and humans.
  • Fault-tolerance techniques can hide certain types of faults from the end user.

3. Scalability

  • Scalability means having strategies for keeping performance good, even when load increases.
  • First need ways of describing load and performance quantitatively.
  • Example: Twitter Home’s Timeline — Combine query and fan-out.

1. Query: Look up all the people they follow, find all the tweets for each of those users, and merge them.

SELECT tweets.*, users.* FROM tweets
JOIN users ON tweets.sender_id = users.id JOIN follows ON follows.followee_id = users.id WHERE follows.follower_id = current_user

2. Fan-out: Maintain a cache for each user’s home timeline

  • Most users’ tweets continue to be fanned out to home timelines at the time when they are posted, but a small number of users with a very large number of followers (i.e., celebrities) are excepted from this fan-out beacuse this process requires extra work. Tweets from any celebrities that a user may follow are fetched separately and merged with that user’s home timeline when it is read.

4. Maintainability

  • Maintainability has many facets, but in essence it’s about making life better for the engineering and operations teams who need to work with the system.
  • Good abstractions can help reduce complexity and make the system easier to modify and adapt for new use cases.
  • Good operability means having good visibility into the system’s health, and having effective ways of managing it.

5. Conclusion

In Chapter 1 of “Designing Data-Intensive Applications,” the foundational requirements for applications are explored, covering both functional and nonfunctional aspects. The chapter underscores the importance of reliability in maintaining correct system functionality despite faults, scalability strategies for optimal performance under increased loads, and the significance of maintainability, focusing on good abstractions and operability for effective system management and modification.

If you found this chapter helpful, give it a round of applause! 👏

Dive into the next chapter on “Data Models and Query Languages” for further exploration.

--

--

Sunny, Lee
Sunny’s Life in CMU 🔅

CMU Master of Software Engineering student who loves outdoor activities