Foundation
I have been thinking about writing about software architecture for a while. There is lot of confusion among programmers about how to design software at scale. Teams fight about a programming language/framework/library/tools and what not. So I intend to share my experience in this field and I will keep writing new articles and improvise existing ones.
Software architecture is a field that is highly based on
- your experience
- how many choices you made independently
- if you made any mistakes did you learn from them
- Are you up-to-date with latest
- Knowing about pros and cons of each choice you are making
This will be a 3 part series.
Each part will deal with one layer in the Web Application. We will look at aspect of scalability, problems faced today, relevant technologies in today’s date and how to utilize them.
A traditional Web Application is made of three layers.
- Presentation
- Application
- Persistence
For more than a decade this architecture has been very popular in both Open Source community (Java, Ruby on Rails, PHP) and proprietary technologies (Asp.Net)
To achieve this architecture excellent frameworks are available across different technology and its easier to find talent.
From a typical web framework there are two main areas where developers seek help:
How to make web development easier?
Scale on demand – to be able to handle large traffic.
So if this is a popular architecture then what’s the problem?All web frameworks that I have worked with or that I know of primarily solve first problem.
But they fail miserably while answering second question. Developer is left on his own whenever scalability comes into picture. Fortunately large social networking websites have shown us the way forward and given us many tools which if utilized effectively can deliver this second aspect called scalability.
We will talk about second point in this series. When we talk about handling traffic here we are assuming that hardware available to us is Commodity hardware.
My approach will be practical by using as less jargons as possible so that a programmer with couple years of experience can easily understand the how he can make design and framework choices to achieve this nasty goal called scalability.