Software architecture serves as a blueprint for a system. It is the organization of a system which includes all components - their interaction, operation with each other, environment, design principles used and the decisions made.
Why is it important?
Software architecture is the foundation of a software system which has a profound effect on the quality of what is built on top of it. A proper foundation yields number of benefits whereas sub-optimal decisions may later cause development, security, performance, scalability & maintenance concerns.
Different types of architecture patterns
Some common examples of architecture styles include Monolithic application, Layer based, Client-server pattern, Event-driven, Microservices etc.
Each pattern pertains to specific characteristics and behavior - some contribute to scalability whereas others are more agile. Knowing these strengths & weaknesses of each architecture pattern is necessary to choose the one that meets your use case.
Layered Architecture
Layered architecture (also known as the N-tier architecture) is the de-facto standard for designing majority of software. Here the codebase is separated into layers - each with a specific role & independent of the other.
Challenges/Limitations:
- Defending boundaries.
- Tight coupling leading to complex interdependencies.
- Without proper coordination between team members, source code can turn into a mess.
Microkernel Architecture
Microkernel pattern has two major components - a core system and plug-in modules. The core handles fundamental and minimal operations whereas the plug-in modules handle the extended functionalities. IDEs are the best example for this pattern.
Challenges/Limitations:
- not highly scalable.
- changes to core system will result in changes to plug-ins.
Event-driven Architecture
EDA enables an application to detect “events” like mouse hovers, button clicks and act on them. This asynchronous communication replaces the request/response architecture where services would have to wait for a reply before moving onto the next.
Challenges/Limitations:
- Complexity of implementation
- Anticipation of the unknown
- Error-Handling
Microservices Architecture
In microservices architecture the application is developed as a collection of services which are loosely-coupled, fine-grained & communicate via lightweight protocols. This makes additions of features and modification of existing ones independent of others.
Challenges/Limitations:
- Increased development time
- Limited reuse of code
Pattern Analysis
A good software architecture should facilitate scalability, agility, addition of new features, integration with external APIs & easily maintainable.
Attached below is a table enlisting key attributes of each of the architecture pattern discussed that can help you determine which pattern to select based on your use case.
Top comments (4)
Very well written! Keep it up
Thanks :)
+1 on the title! :D
:D