For the last couple of weeks I have been going over articles and videos in the Amazon Builder library. They cover useful patterns that Amazon uses to build and operate software. Below are the important points I captured while going over the material.
Reliability, constant work, and a good cup of coffee – Link
- Amazon systems strive to solve problems using reliable constant work patterns. These work patterns have three key features:
- One, they don’t scale up or slow down with load or stress.
- Two, they don’t have modes, which means they do the same operations in all conditions.
- Three, if they have any variation, it’s to do less work in times of stress so they can perform better when you need them most.
- There are not many problems that can be efficiently designed using constant work patterns.
- For example, If you’re running a large website that requires 100 web servers at peak, you could choose to always run 100 web servers. This certainly reduces a source of variance in the system, and is in the spirit of the constant work design pattern, but it’s also wasteful. For web servers, scaling elastically can be a better fit because the savings are large. It’s not unusual to require half as many web servers off peak time as during the peak.
- Based on the examples given in the post it seems that a constant work pattern is suitable for use cases where system reliability, stability, and self-healing are primary concerns. It is fine if the system does some wasteful work and costs more. These are essential concerns for systems which others use to build their systems on. I think control plane systems fall under this category. The example of such a system mentioned in the post is a system that applies configuration changes to foundational AWS components like AWS Network load balancer. The solution can be designed using both the push and pull based approach. The pull based constant work pattern approach lends to a simpler and reliable design.
- Although not mentioned in the post, constant work that the system is doing should be idempotent in nature.