Considerations for System Design to solve Scalability, Consistency, Partition, and Availability in Distributed and Non-Distributed environments |
As a software engineer, you always have the challenge to design a system that is always available, scales well with increasing load, and responds with low latency. The principles used in the system differ from application to application. There is no unique solution for designing the system. It is an open-ended problem with many possible solutions. Even though there are no optimal solutions there are guidelines to tackle each component of System Design. This article will focus mainly on non-functional components of System Design that are Consistency, Availability, Partition-Tolerance, and Scalability. Further, we see how these components work in distributed and non-distributed environments.