Design – Build – Run: Applied Practices and Principles for Production-Ready Software Development
by Dave Ingram
Chapter 19. Designing for Resilience
Although resilience comes in many forms, in the purest terms it refers to an application's ability to deal with adverse conditions and still provide an acceptable level of service. Adverse conditions can be caused by the user — and as you've seen already, many different users could be interacting with the system. System failure, whether software-related or hardware-related, is another area where issues can arise. And then, of course, there's the infrastructure, load balancers, routers, network, connectivity, and so on. This chapter looks at some practices you can employ to provide resilience against typical (and unexpected) incidents in the solution. I'm not going to cover every possible scenario, as that is beyond the scope of the book; rather, I'm going to focus on a couple of key areas where the solution can provide robustness and, as a result, provide a level of service to the consumer. Incidents can occur in all areas of the solution, including the core application, the batch solution, and even in the reporting components. It is important that all components be resilient and robust to reduce down-time and unnecessary outages.
This chapter is organized into the following sections:
Human Error and User Behavior — Examines some of the typical failures and scenarios that can be caused by human error. This section also discusses supporting and controlling user behavior.
Handling System Failure — Examines the exception-handling techniques you ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access