What is the architecture of a software system )? Generally, the architecture has two elements:
· It is the highest level of division of a software system from the whole to the part.
A system is usually composed of components, and how these components form and interact with each other is an important information about the structure of the system.
Specifically, it includes architecture components, connectors, and task-flow ). The so-called architecture element is the core "brick" of the system, and the connector describes the path of communication between these components, the mechanism of communication, and the expected results of communication, the task flow describes how the system uses these components and connectors to fulfill a requirement.
· The highest level of commercial and technical decisions made by building a system that will be difficult to change in the future.
There are many important decisions that need to be made prior to building a system. Once the system starts to be designed or built in detail, these decisions are hard to change or even unable to be changed. Obviously, such a decision must be the most important decision on the success or failure of system design and must be carefully studied and investigated.
The history of Computer Software began in 1950s, and its history was very short. In contrast, construction engineering started from the Stone Age, and humans have accumulated a lot of experience and lessons in architectural design practices for thousands of years. Architectural Design basically includes two points: architectural style and architectural model. The unique architectural style and the appropriate architectural model can be unique.
The pictures below show the ancient Maya buildings in Central America, the Great Pyramid of Chichi-Itza, and the 9-Eleven steps (representing the days of the Four Seasons, the temple on the top of the tower lingers into the clouds. All the numbers are as rigorous as calendars, and the style is vigorous. It is hard to imagine that this is a stone-age building.
Figure 1. The ancient Maya building is located in chichei-Itza, Mexico (in the Maya language, Chi indicates the mouth Chen indicates the well. (Photography: author) |
The relationship between software and human beings is the core issue that architects must face. It is also a problem that has occurred since the software entered the stage of history. Like this, the relationship between architecture and human beings has been the core issue that architects must face since building. British Prime Minister Churchill said that we constructed a building and then constructed us (we shape our buildings, and afterwards our buildings shape us ). The conference hall in the lower House of Commons is narrow, so that all members of the lower House of Commons cannot be seated in the same direction, but must be divided into two sides. Churchill believes that Members of Parliament will naturally choose to sit at the same time as their political views, which refer to the origins of British political parties. The original intention of party is "fang" and "face ". The key to the origins of political parties is the influence of buildings on people.
In the software design field, many people think that the function is the most important, and the form must obey the function. Like this, Louis Sullivan, one of the creators of modern architecture schools in the architectural field, also believes that the form should be subject to the function (Forms follows function ).
Almost all software design concepts can find more distant historical echoes in the vast history of architecture. The most famous, of course, is the model theory and XP theory.
What is the goal of the architecture?
Just as the software has its own goals, what are the goals of architecture design? In general, the software architecture design should achieve the following goals:
· Reliability ). Software systems are extremely important for users' business operations and management. Therefore, software systems must be very reliable.
· Secure ). The business value of the transactions undertaken by the software system is extremely high, and the security of the system is very important.
· Scalable ). The software must be able to maintain reasonable performance when the user's usage and number of users increase rapidly. Only in this way can we adapt to the possibility of expanding the user's market.
· Customizable ). The same set of software can be adjusted based on different customer groups and changes in market demands.
· Extensible ). When the emergence of new technologies, a software system should allow the import of new technologies to expand the functions and performance of existing systems.
· Maintainable ). Maintenance of software systems includes two aspects: first, to eliminate existing errors, and second, to reflect new software requirements to existing systems. An easy-to-maintain system can effectively reduce the cost of technical support
· Customer experience ). Software systems must be easy to use.
· Time to market ). Software Users must face intra-industry competition, and software providers must also face intra-industry competition. It is very important to compete for market opportunities as quickly as possible.
Architecture type
Based on our concerns, we can divide the architecture into three types:
· Logical architecture, relationships between components in software systems, such as user interfaces, databases, external system interfaces, and commercial logic components.
For example, the following figure shows the logical architecture of a software system that I have personally experienced.
Figure 2. Example of a logical architecture |
From the figure above, we can see that the system is divided into three logical layers: appearance level, business level and data persistence level. Each layer contains multiple logical components. For example, the web server layer includes HTML service components, session service components, security service components, and system management components.
· How the physical architecture and software components are put on the hardware.
For example, the following physical architecture diagram describes the physical architecture of a distributed system distributed in Beijing and Shanghai. All the components in the diagram are physical devices, including Network Shunt, proxy server, web server, application server, Report Server, consolidation server, storage server, host, and so on.
Figure 3. A physical architecture example |
· System architecture and non-functional features of the system, such as scalability, reliability, robustness, flexibility, and performance.
The design of the system architecture requires the architect to have excellent knowledge of the functions and performance of software and hardware, which is undoubtedly the most difficult task in architecture design.
In addition, from each perspective, we can see two elements of the Architecture: component division and design decision.
First, components in a software system are logical components first. How these logical components are put on the hardware, and how they contribute to the scalability, reliability, robustness, flexibility, and performance of the entire system are very important information.
Second, the decisions that need to be made for software design will inevitably include the logical structure, physical structure, and how they affect all the non-functional features of the system. Many of these decisions are hard to be changed once made.
Based on the author's experience, a database-based system architecture, how many data tables will be there on how many pages of architecture design documents. For example, a medium database application system usually contains about one hundred data tables. Such a system design usually requires about one hundred pages of architecture design documents.
Architect
Software designers who have high technical skills and rich experience need to design the architecture of the software system, that is to say, we need to design how the system's components are divided, how components interact, and how logical, physical, and important decisions are made in the system.
Such a person is called an architect ). In many companies, architects are not specialized and formal roles. Usually in a development group, the most experiencedProgramMembers are responsible for some architectural work. The most experienced project manager in a department is responsible for some architecture work.
However, more and more companies recognize the importance of architecture work and set specialized architect positions at different organizational levels, they are responsible for the design, configuration, and maintenance of logical architecture, physical architecture, and system architecture at different levels.