Application Design[Architecture] - Brick and mortar of a software company
Now days each software company wants that their products should be highly scalable and distributed in nature.
Scalability means handling load when volume is increasing and a distributed application is software that is executed or run on multiple computers. An example of distributed application can be when you are managing user sessions on 2+ servers[except sticky sessions]. Clusters
When anyone designs an architecture of a application he/she should always keep below mentioned things in mind.
- open/closed principle
- Scalability
- Distributed in nature
- Multi Tenant
- Fault Tolerant
- Up to date with upcoming technology etc
If you keep all above points in mind you will end up creating a not only robust but also a scalable application. You may find this very time consuming initially but it will be fruitful in long run. In a single company there can be 100s of modules which are used everyday and may be serving millions of requests per hour.
Increasing servers or their capacity for scaling is not always a good option. Shouldn't we look at the architecture of the application at the first place? Unfortunately these all things happen either at the time of cost cutting or when our server is not able to take the load even after increasing certain amount of capacity of the server.
Example of bad architecture can be
- Single application containing all the modules. Example Ad-server which contains adverser/publisher/seller/ad network services etc under one module[single war file].
- Caching issues : Maintaining cache at different server [same data] rather than keeping centralized caching system.
- Schema Design
- Specific Example : Using Cassandra as mysql [ACID + Secondary indexes] etc.
Most of the companies end up revamping their architectures because of scalability issues and if your product is big enough than you will also face lot of problems in redesigning it.
Each person thinks in different way so how we can bring everyone at the same plane and there are some person who do not agree. There can be 2 reasons when someone doesn't agree that his application design is not good.
- Ego problem
- You are not able to answer his questions.
To avoid this Tech Talk comes into the picture where each module owner tells about their module architecture , it's components and how they approached and finalized it. This way people will understand more and they will be able to differentiate between good and bad. This kind of events are necessary because it will not only benefit individuals but company also.
So if anyone thinks coding is only skill which is needed in the market than he is making fool of himself. That might be the reason most of the companies have added design round where they ask you to design some system. Designing a software is not easy it comes with the experience.
PS : There may be some mistakes in the article. Let me know your feedback.
To the point Raghunandan Gupta. One clarification, What if a product we are designing is not scalable initially, but may get huge after addition of extra features. in such scenario, what kind of architecture, we should follow from begining? Should we go with Distributed architecture only?
Nice article Raghunandan.
Very well thought