In today’s computing one of the biggest challenge is scalability to deal with high volume traffics, big data and processes.
There are several architectural patterns for scalable distributed system some of which are as follows:
- Load Balancers: Load balancing is one of the easiest approach to provide some level of scalability. As well as hardware for load balancing, there are also software for it. In order for a load balancer to be implemented efficiently, units should have a shared nothing architecture. Once placed in front of application servers, load balancers distributes the load evenly across all the servers within the system. There are several load balancing algorithms, the most basic one is round robin. Some of other ones are based on some pattern, load balancing based on weighted graph and so on. Load balancing is a beautiful concept.
- Distributed Caching: Distributed Hash tables or caches are used in front of data storage for scaling up reads. Instead of querying data stores each time, querying an in memory caching system speed up applications. Some of the implementations are Memcached, Redis etc. Consistent hashing is used for in the clients. There is no notion of replication.
- Distributed Message Queues. Blocking Queue implementation (FIFO delivery) implemented as a network service. Distributed Message Queues are based on Producer/Consumer problem. There are several concepts with producer/consumer other known as publisher/subscriber pattern. It is fairly easy to scale applications using this pattern.
- Gossip and Nature-inspired Architectures. Each node randomly pick and exchange information with follow nodes.
- Map Reduce/ Data flows. Scalable pattern to describe and execute Jobs.
- Tree of responsibility. Break the problem down recursively and assign to a tree, each parent node delegating work to children nodes.
- Stream processing. Process data streams, data that is keeps coming.
- Scalable Storages. Ranges from Databases, NoSQL storages, Service Registries, to File systems.
