By having an architecture design we can control the implementation quality. We can reduce cost of applications and we can increase the usability. We also describe the system so that new team members can understand and contribute to maintenance and future improvements.
When one wish to create a new software system or computer application it is a good idea to create a general design of the application. This can be based on scientific principles that are described by software architecture theory.
Software architecture is a comprehensible way of describing the components and functions for a software system. The purpose of this description is to get an abstract level of understanding for reasons and value of design choice.
An design pattern is a general, reusable solution to a commonly occurring problem in software architecture within a given context.
There are many recognized architectural patterns and styles, among them:
- Client-server (3-tier, n-tier, cloud computing )
- Event-driven versus Implicit invocation
- Layered versus Multilayered architecture
- Monolithic application
- Peer-to-peer (P2P)
- Pipes and filters
- Representational state transfer (REST)
- Microservices architecture
- Shared nothing architecture
- Space-based architecture
In many software systems we use a database on a server to organize large amount of data. When we use a database server the application is centralized. A database can be used in many different architecture patterns:
- Single tire architecture;
- Two tire architecture;
- Multi tire architecture;
What is this Client – Server ?
In picture below we can see the general idea of a client-server architecture. All clients are connected to a central server that store the database. The client send messages to the server and receive information. This way all the clients can communicate to the server but they can’t communicate to each-other.
What is n-tire architecture
In this architecture there are 4 components. The browser is the client. It is connected to a web server that is also connected to an application server. A database can be installed on Application server or can be installed on yet another server.
What is a web service?
A service is a kind of application that do not have user interface of it’s own. This application start automatic when the server start and resides in memory until the server is shut-down. From memory the web service can connect to an application server or directly to the database. A web service create JSON files upon requests and send these files to the client using http protocol.
What is a dynamic web page?
What is a cloud based architecture ?
This is general concept of a cloud based architecture. The server is somewhere on the internet and can be one or more servers. Clients are devices and computers distributed over the world.
When you design an Architecture you must consider several aspects to do a good design:
1. Multiple stakeholders: Applications are usually design for multiple category of users: business managers, owners, users and operators. Design must consider the security and access to different application features by different stakeholders.
2. Separation of concerns: This is a way to reduce complexity level of software components. Each component must be simple and must perform a single job. Another component is responsible for dispatching the jobs and orchestrate the workflow.
3. Built-in quality: In the past the focus of designers was to resolve multiple requirements and implement features for the system as fast as possible. Today the focus should be quality attributes such us:
- backward compatibility;
4. Conceptual integrity: architecture of a software system represents an overall vision of what it should do and how. The architect assumes the role of “keeper of the vision”, making sure that additions to the system are in line with the architecture.
5. Safety guardrails: when you design an architecture you create restriction rules or constrains for specific components. For example in a 3 tire architecture the user interface can communicate only with business layer but not directly with the database.
See also this video: about architecture.