Availability and reliability are two similar but different concepts. When building a highly scaled, highly available web application, it is important to understand the difference between the two.
Reliability generally refers to the quality of a system. Typically, it means the ability of a system to consistently perform according to specifications. You speak of software as reliable if it passes its test suites, and does generally what you think it should do. Reliability answers questions such as “Did the response to my query contain the correct answer?”
Availability generally refers to the ability of your system to perform the tasks it is capable of doing. Is the system around? Is it operational? Is it responding? If the answer is “yes,” it is available. Availability answers questions such as “Did I get a response, any response, from the application?” and “Did the response I requested arrive in time for me to use it?”
A system that adds 2 + 3 and gets 6 has poor reliability. A system that adds 2 + 3 and never returns a result at all has poor availability.
As you can see, availability and reliability are somewhat related. Certainly, it’s not possible for an application to be available if it is not reliable, and it is difficult for an application to be reliable if it is not also available.
The difference between these two concepts is important to understand since the actions you might take to improve reliability are different from those you might take to improve availability. Reliability can often be fixed by testing, but availability is usually much harder to solve.
Things you can do to improve reliability:
- Build better test suites.
- Perform beta testing.
- Validate the results of a system with typical users.
Things you can do to improve availability:
- Add redundancy.
- Add reserve capacity.
- Build better processes and procedures in your operations organization.
Understanding the difference between these two concepts will help you to build and operate highly scaled, highly available web applications.
Want to learn more about availability vs. reliability?
If you want to read more about this topic, check out my book Architecting for Scale from O’Reilly Media. Now in its second edition, the book gives you a high-level framework for how to design and manage your organization, so you can build and operate highly scalable, highly available web applications. The newly updated edition provides an expanded view on modern architecture paradigms, such as microservices and cloud computing, that you can use to build highly scalable modern applications.
More articles from Lee Atchison:
- Building Right-Sized Application Services: The Goldilocks Calculation
- 8 Things You Don’t Know About Architecting Your Business Infrastructure for Scale
- What Model Airplanes Teach Us About Avoiding Application Failures