What is Software Architecture?

MarcoMarco
3 min read

To understand the importance of microservices, one must first have an introductory understanding of software architecture.

Architecture is often considered as the system's blueprint that is defined during development. Such a definition becomes vague when performing an architectural analysis of the system. Thus, Richards and Ford define software architecture as the "structure of the system, combined with architecture characteristics the system must support, architecture decisions, and finally design principles."

Structure of the System and Architectural Styles

The structure is referred to as the architectural style type that the system incorporates. In the context of this project, the architectural style is microservices. Merely describing a system as being a microservices architecture will not gauge a deep understanding of the system's functional requirements nor any solution that the software is providing. Rather, describing the architectural style gives insight into architectural characteristics incorporated by the system as well as the design principles and decisions that were taken in order to adhere to the given style.

Architectural Characteristics

Architectural characteristics help define the system's success and are often coupled with the system's functionality. Examples include notions such as fault tolerance, elasticity, security and reliability.

Architectural Decisions

Architectural decisions is a rule set adhered by the system during development. Such decisions create system constraints. In the context of a microservices architecture, an example of such a decision would be that each service should be loosely-coupled, constraining the system to a limited communication set.

Design Principles

Architectural design principles provide guiding principles opposed to cemented architectural decisions. For example, the choice of communication protocols, be it gRPC or REST, is seen as an architectural design principle.

The Difference Between Architectural Styles and Patterns

Architectural styles define the system's overall structure, ranging from the organization of back-end to front-end as well as interactions between source code and persistence layers. Architectural patterns propose the overall design structure that help achieve the system's requirements, characteristics and architectural style. Richardson provides a clear definition for an architectural pattern as, "A pattern is a reusable solution to a problem that occurs in a particular context. It's an idea that has its origins in real-world architecture and that has proven to be useful in software architecture and design."

Architectural Families

Microservices is an architectural style that forms part of the distributed architecture family. Distributed architecture refers to the system being composed of "multiple deployment units connected through remote access protocols."

Other architectural styles within the distributed architecture family include service-oriented architecture.

An opposing architectural family is the monolithic architecture. Monoliths include styles such as the microkernel and pipeline architectures, and are defined as being "single deployable units of all code."

Both architectural families bring across differentiating design principles and characteristics, of which further varies across styles belonging to each family.

0
Subscribe to my newsletter

Read articles from Marco directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Marco
Marco

Senior DevOps Engineer exploring the world of distributed systems