Often when interacting for solutions or floating your decisions to the architects, one question comes out at some point.
Is this solution scalable ?
So this read is not about scalability itself or maybe it is, but how to tag your solution with possible answers with right perspective.
Types of Scaling: Vertical
You have a system that processes data say @10 MB/sec ( and say the system has 1GB of RAM ) and it throws out of memory when the request exceeds this threshold. You come up with the age old solution of adding more memory say 2GB of RAM.
What you just did is Vertical scaling. Which means increasing the capability of the same system with more memory. As the nature of the request increases you will be adding more memory. This is a legacy way of tackling the problem for this memory issue.
More issues like Storage Space, Processing Speed or anything to do with performance and your solution to tackle the same is with more Hardware or System/Program/Memory tuning on the same machine or system then you are actually building a VERTICALLY SCALABLE solution.
In other words, the above mentioned system maybe called as MONOLITHIC in nature and as odd or bad as it may sound, it’s still a very reliable solution for certain use cases out there. You might have done it or are still doing it. The humongous con is a Single Point of Failure and we cannot afford it in the current world ( it’s all tied to $$$$ ).
Welcome to the distributed computing world.
We can dive deep into the time when Doug Cutting decided to give the name Hadoop ( his son’s toy elephant ) to his distributed computing paper @ Google which was later open sourced by Google later picked up by HortonWorks, Cloudera ( now HortonWorks 😀 ) and MapR to build a business around it…..
Or in other words, a bunch of computers come together with same software installed in all of them and electing one of them as Master and rest as slaves ( hello Zookeeper ) thereby sharing their computing and storing capacity and SKY as the limit.
This ideology gave birth to a bunch of distribution driven softwares and even companies in all forms and the backbone of cloud itself. Let me throw a bunch of them:
- 1000 other products and companies and new terminologies
- Partition ( redefined)
- Master Slave Election
- Highly available
- Distributed ( of course )
So the point is Distributed Computing is all about the above stuff put together. There is clear cut segregation and a very limited learning curve to adapt to this concept as most of these come out of box to the developers so that they can choose the SDKs of their choice and get going.
In short you might be in the Distributed World already and it is the future.
So, next time when you are asked ” Is your solution/system scalable ? ” you know what you are talking about.