Scaling up
Scalability of a system is one of the most important non-functional requirements. As we know, there are basically two ways to scale a system: vertical scaling and horizontal scaling. Vertical scaling refers to adding more processing power to an existing system—if you are running out of memory, add memory; if CPU cycles are getting short, add some more cores and or make other changes. Not much of a challenge! On the other hand, horizontal scaling refers to adding more physical nodes, handling requests in a distributed way, adding redundancy at DB, and message broker components. Obviously, this needs a proper thought-through design. Let's take a couple of ways that can be used to scale Spring applications.
Threading
The most common way to scale a system is to introduce parallel processing. However, before you learn how to do this, let's be aware of the following pitfalls:
It should be evaluated whether creating a thread will help
Threads should be created as per machine capability...