Software Architecture as I know [always a WIP ;)]

snehaup1997 - Oct 27 '22 - - Dev Community

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
Image description
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

Image description
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

Image description
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

Image description
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.

Image description

. . . . . .
Terabox Video Player