This chapter talks about how modern applications are becoming more data-intensive rather than compute-intensive. It also defines reliability, scalability and maintainability more concretely, which are terms that are commonly thrown about when we talk about applications today.
Definitions:
Reliability: A system should continue to work correctly even in the face of adversity
Scalability: As the system grows, there should be reasonable ways of dealing with that growth
Maintainability: Over time, many different people will work on the system, and they should all be able to work on it productively
It also goes into more detail for each term about the factors that affect them and how to potentially improve in each area
Reliability
Hardware Faults
Fixed by
Redundancy of hardware components
Prioritise flexibility and elasticity over single-machine reliability
Software Errors
Caused by
Software makes some kind of assumption about its environment that stops being true
Human Errors
Caused by
Unreliable humans
Fixed by
Designing systems in a way that minimises opportunities for error
Decoupling places where people make the most mistakes from places where they can cause failures
Test thoroughly
Setting up quick, easy recovery
Setting up detailed and clear monitoring
Implementing good management practices
Scalability
Measuring Load
Load parameters are dependent on the architecture of the system
Measuring Performance
Should look at percentiles rather than average
Coping with Load
Discussion between Scaling up vs Scaling out
Maintainability
Operability: Making it easy for operations teams to keep the system running smoothly
Simplicity: Making it easy for new engineers to understand the system
Evolvability: Making it easy for engineers to make changes to the system in the future
My thoughts:
The first chapter of the book was really interesting to me by exposing the topics that would be covered in more detail in the rest of the book. Defining the common terms of Reliability, Scalability and Maintainability concretely was helpful as someone who desires to create applications that exhibit these traits as now I am more able to tell when an application is in the right direction of reaching these states. It also exposed the complexity and how much consideration I have to put in to create an application that meets those standards and is not something that occurs by chance. This chapter has made me excited to continue reading the book to explore patterns and techniques that can help me achieve these goals in different types of systems.
Book: Designing Data-Intensive Applications Chapter: 1. Reliable, Scalable and Maintainable Applications
Summary:
This chapter talks about how modern applications are becoming more data-intensive rather than compute-intensive. It also defines reliability, scalability and maintainability more concretely, which are terms that are commonly thrown about when we talk about applications today.
Definitions:
It also goes into more detail for each term about the factors that affect them and how to potentially improve in each area
My thoughts: The first chapter of the book was really interesting to me by exposing the topics that would be covered in more detail in the rest of the book. Defining the common terms of Reliability, Scalability and Maintainability concretely was helpful as someone who desires to create applications that exhibit these traits as now I am more able to tell when an application is in the right direction of reaching these states. It also exposed the complexity and how much consideration I have to put in to create an application that meets those standards and is not something that occurs by chance. This chapter has made me excited to continue reading the book to explore patterns and techniques that can help me achieve these goals in different types of systems.