When we look at each of the individual components of our application, we need to consider whether they are designed for scaling.
We can try to ask each of the components the following questions:
- Does this component need to store and retrieve values that are bound to the server they run? For example, writing or reading in a file on the filesystem?
- Does this component need to synchronize anything with its peers?
- Does this component need an affinity to whoever was calling it before? Imagine that a particular instance always needs to handle the same request from the same customer/user/system.
- Can we stop this component at any time without affecting its peers, or the running requests?
When we answer these questions, we need ...