The author | Tang Zhilong alibaba senior development engineer (Kun dragon)

This paper summarizes the familiar system is mainly divided into three parts: business learning, technical learning, actual combat. Each chapter will sort out some questions that need to be answered during the learning process, and these questions will need to be improved gradually with the accumulation of experience.

preface

Developers often face the following scenarios:

  • As a part of landing, how to learn the existing system?
  • How to get started quickly when you are asked to participate in the iterative development or bugfix of an unfamiliar system?
  • If a colleague dimission or changes his post, he needs to hand over the system to you. Inner OS: Is this a pot?

If there are many such scenarios, it is necessary to sort out common problems and solutions, so that similar scenarios can be quickly dealt with in the future. This paper summarizes the familiar system is divided into three parts: business learning, technical learning, actual combat. Each chapter will sort out some questions that need to be answered during the learning process, and these questions will need to be improved gradually with the accumulation of experience.

The business of learning

Business learning is to learn a system from a business perspective. We need to know who the customers of the system are, who the users are, what value the system brings, and what functions the system provides. If you don’t know the business, you don’t know what the system is doing. Technology is to serve the business landing, and only after the business is clear, can we know how to use technology to better serve the business, so business learning is the primary task to get familiar with a system. The main learning methods include communicating with product, operation and development, learning product design documents, PRD, self-use system, and some common diagrams, such as product function architecture diagram, business flow diagram, function tree, use case diagram, etc.

FAQ:

  • What is the industry profile of the system?
  • Who is the target user of the system? For example, to make decisions at the top of the company? For operations or customers? Or is it for Internet users?
  • How many people are using it on average? How many people are using it at peak times?
  • What is the business value of the system? What are the metrics to measure the business value of a system?
  • What are the functional modules of the system?
  • What are the domain concepts of the system? Sort out the domain model of the system;
  • What are the key business processes of the system? What are the key business processes?
  • What are the non-functional requirements for the system? Such as performance, quality, scalability, security, etc.;
  • What is the future development plan of the system?

Technological learning

Technical learning mainly studies the architecture of the system, how to achieve it, and the operation and maintenance of the system. There is a five-view methodology for describing the architecture of a system.

The five views are:

  • Logical architecture
  • The development of architecture
  • Run the architecture
  • Physical architecture
  • The data architecture

Logical architecture

Logical architecture focuses on functional requirements, what services the system should provide to users, and focuses on the division of behavior or responsibility. Commonly used to express graphics, static diagrams have package diagram, class diagram, object diagram; Dynamic diagrams include sequence diagram, collaboration diagram, state diagram and activity diagram. The core design tasks of logical architecture are module division, interface definition and domain model refinement.

FAQ:

  • What subsystems or modules are there? What are the relationships between systems?
  • What are the upstream and downstream external interfaces? Who was the contact person?
  • How are the key business processes implemented? It is expressed by class diagram, sequence diagram and so on.

The development of architecture

The development architecture is mainly concerned with the system source code, third-party SDK, used framework, middleware, toolkit.

FAQ:

  • Where’s the code?
  • How are the bags divided? How do you layer it? Such as MVC, controller-service-DAO;
  • What frameworks are used, such as SSH and Dubbo;
  • What toolkits are used? Apache Commons, Guava;
  • What middleware is used? Such as Metaq, Tair, schedulerX and Diamond;
  • Which platforms do you rely on? Such as permission platform, process engine, etc.

Run the architecture

Runtime architecture focuses on runtime quality attributes, focusing on concurrency, synchronization, communication and other issues of the system, which is bound to involve the concepts of process, thread, object and other runtime, as well as the related concurrency, synchronization, communication and so on.

FAQ:

  • How many QPS can the system support? What is the peak QPS?
  • How does it interact with upstream and downstream systems? RPC? HTTP? Synchronous or asynchronous?

Physical architecture

The design of the physical architecture focuses on installation and deployment requirements, focusing on how the target program and its dependent runtime and system software will eventually be installed or deployed on the physical machine, and how the machine and network will be deployed to match the reliability, scalability, continuous availability, performance, and security requirements of the software system.

FAQ:

  • How is the system deployed? What deployment environments are available?
  • How many machines does the system have?
  • How is the system deployed? Pay attention to the access layer and deployment modes, such as cluster deployment and distributed deployment
  • Is there containerization?
  • Is there a multi-room deployment?

The data architecture

The design of data architecture focuses on data requirements, focusing on the storage scheme of persistent data, including not only entity and entity relationship data storage format, but also data transmission, data replication, data synchronization and other strategies.

FAQ:

  • Where is the data stored? What databases are used, such as Oracle and mysql;
  • Carding e-R diagram;
  • How much data is there? Is there a separate database and separate table?
  • What noSQL libraries are used?
  • What are the data synchronization tasks?
  • How is the big data framework being used?

The system operational

System operation and maintenance focuses on when problems occur and how to solve them.

FAQ:

  • When do things go wrong? For example, e-commerce Double 11 puts great pressure on the system, and it is easy to have problems at this time.
  • Are critical functions monitored? Need to see what alarm items are configured in the system, which aspects are monitored;
  • How to solve the problem? Where’s the log? Is there full link tracing? Whether there are some emergency operations, such as switch configuration, degrade, limiting configuration;
  • What pits does the system have? Review historical issues with developers to avoid pitfalls. Through the case summarized by colleagues, or with responsible products, operations, technology and understanding. There will always be holes in the system that need to be filled in. Historical code that goes through multiple iterations always leads to high complexity (branching, nesting, and many loops), design bugs, performance risks, etc., and is difficult to maintain, which requires us to reconstruct. Remember that there is a saying: the bigger the hole, the greater the ability;
  • What are the common problems of operation and customer service feedback?

practice

Familiar with the business and technology of the system, it is necessary to combat, through combat to further deepen the familiarity of the system. Practice can be done through requirements, bug repair, reconstruction and other ways, hands-on coding, debugging, testing, online.

conclusion

Existing systems usually experience the construction process from 0 to N, familiar with the system is actually a reverse derivation process, but also a process of learning the architecture, reading the source code. In the process of learning, it is better to bring thinking, such as why do we design this way? Why use this middleware? Is there a better way to code? Where can be optimized, etc., to achieve a deeply familiar process.

Attached: summary diagram

The Cloud Native Practices Summit is about to open

“Alibaba Cloud originators pay close attention to technical fields such as microservice, Serverless, container and Service Mesh, focus on cloud native popular technology trends and large-scale implementation of cloud native, and become the technical circle that knows most about cloud native developers.”