I am currently struggling in the technical framework of the way forward, although there are many obstacles in the middle, I feel, barely able to reach the level of the architect, so I feel there is the confidence to write this article.
Before, I wrote a blog post, the architect is more to deal with people, said I saw and heard of the architect upgrade steps and normal work content, this article is more from the point of view of communication to analyze the architect upgrade way. But we know that architects rely more on technology to get high salaries.
In this article, I will list some of the technical architectures that I have seen that need to be addressed, technical, and coordinated, with these tangible examples to illustrate the skills required by the technical architecture to analyze how advanced development can be upgraded to the technical architecture more efficiently. Well, the prologue is over, the text begins.
--------------------------------------------------------------------------------------------------------------
1 technology itself does not generate value, business will, on the integration of technology and business
The architecture is generally divided into technical architecture and business structure, I do not intend to compare these two kinds of advantages and disadvantages, but I just want to say that in the company, is by business value to create profit point, so technology, such as Message Queuing, memory optimization, and sub-database sub-table DB cluster, only embedded in the business, To generate value by increasing the scalability or performance of your business.
The above seems to be nonsense, but it is precisely the difficulty of the architect's work, you can imagine, for example, through the Mycat to build a sub-database table architecture is not difficult, even the sub-database sub-table components through load balancing built cluster is not difficult, these online have ready-made cases. But how to realize the sub-database in the current business system, the difficulty is not small. Specifically, because there may be redundant data in the business system, and there are various types of queries with join, group by, and so on, how to be compatible with these historical issues in the sub-database system, and the new sub-system on the line to migrate the historical data, as well as in the production line switch to the sub-database sub-table, in case there These are not the problems that the advanced development of the demo case can solve.
So in terms of technology and business, my own feelings are (including what I see and hear): only when exposed to the business, to use technology to solve practical problems, to better understand the various types of pits used by this technology, such as the sub-table mentioned earlier, and other such as the log component, Message Queuing components. The following section gives the architect to solve the actual problem, we can more deeply appreciate this.
2 issues that senior architects usually want to solve
The following questions are derived from the actual, out of the principle of confidentiality of the project, I implicitly went to the key business description, but we can understand, and can feel the architect usually to solve the problem.
Problem one, a company has financial management personnel management, such as 10 or so projects, they in the production line, the need for standardized management, such as the same MAVEN warehouse, regardless of the function of the business, the same set of configuration management services, with the same set of log management and analysis components, You also have to use the same set of big data components to analyze data based on different business dimensions.
If it is to re-build a system, this difficulty is not small, not to mention, the requirements of the senior Architect is, in the history of the project's technical standardization management, otherwise each project each tube, maintenance costs are not counted, different projects between the library is also prone to conflict. Architects should be able to achieve this by keeping the business stable, and we can consider the difficulty.
Question two, as the company's business volume increased, the data in the database reached the T-level, so it needs to be optimized by the sub-database table. This is not difficult in itself, but how to maintain the stability of the business during the upgrade process? Can not say the last function point, the key business is hung up, and, in case of problems after the launch, we have to provide emergency fallback plan.
C Company is an entrepreneurial company, at the beginning, through SSM plus Oracle, to meet the majority of business needs, but with the increase in business, the need for a senior architecture in a short period of time for high concurrency and big data solutions, such as high concurrency, the system does not collapse, and for each order, Processing can be delayed slightly, but data cannot be lost.
Question Four, d company needs to build a set of Linux and production of the same test environment, in the normal development process, the business groups through the tool, in the test environment to deploy or rollback components of this project, here, not only to build a test environment, It is also through tools such as Jenkins to build a set of tools that can easily deploy the system to each business group.
In addition to the above problems, the senior architecture is more like a fireman, such as in the company's business system, any one of the team reported problems related to the architecture, such as the message queue delay, the library sub-times memory oom abnormal, or due to the Dubbo of the underlying delay or oom, Senior architecture to be able to personally or lead the team to solve specific problems.
3 skills (or qualities) that a senior architecture must be proficient in compared to advanced development
In fact, advanced development and senior architecture in need of skills, not much difference, specifically, can help to achieve performance optimization of the distributed Components and database components (or middleware) is so much, the operation of Linux under the command is so, some system management tools, such as Maven, The use of jenkins,ant and so on is not difficult. However, compared with advanced development, the difference between the senior architecture is as follows.
1 senior architecture to solve the problem type and number of more than advanced development, so-called marksman to rely on bullets to feed out, some problems, such as for Kafka message middleware, senior architecture a look at the log will know how to change, or a look at the log4j error message to know and other classes have conflict, and so on, When building a thread pool, an oom problem is encountered, and a senior architecture estimate can also quickly locate the problem by simply looking at the log.
In other words, the senior architecture has accumulated a lot of experience in dealing with problems, when encountering general problems, no longer through the more time-consuming debug to see the root cause, often in the brain has stored a large number of possible causes of the problem, and then by looking at the key log can be targeted to specific code points, The solution can then be given quickly.
2 in the solution, such as the last distributed Redis cluster, or the last message middleware, for advanced development, there will often be a lot of trial and error time, such as on-line after some function points are not transferred, you have to debug or check the log to solve problems one by one, Or on-line a python-based Big data analysis system, although the basic functions can be satisfied, but in a certain scenario (such as too many log thread concurrency), may cause oom exception.
And for the senior architecture, often have done similar things before, so can avoid a lot of pits (a lot less trial and error costs and time), and because the underlying code is more familiar with, so even if there are more difficult problems (such as not stable reproduction), senior architecture can look at the log quickly to the specific underlying class, (and advanced development generally does not have the power to do so). By contrast, the mainstay effect of the senior architecture can be seen.
3 Senior architecture generally has a good understanding of the differences between the components, such as the distribution queue, whether to use Kafka or RABBITMQ, or to build a database cluster, which of the MySQL engine.
Thus, in the selection, because know the advantages and disadvantages of the various schemes, so can know which kind of solution is more suitable for this business system, or, by rewriting which kind of components of the underlying code, can quickly build up to meet the system's middleware components. In this regard, advanced development may not be possible.
To summarize, the senior architecture is well understood at the bottom of the key components and proficient in the implementation and troubleshooting of certain components (such as message components, library components), and the basic skills of the senior architecture are very solid.
1 Debug capability Needless to say, you have to be able to use Linux commands to find and solve problems from various logs.
2 There is no need to understand the underlying code of all components (which is too difficult and impossible), but it is important to understand the key underlying implementations of some common components (such as the spring IOC or common middleware), and to have the ability to debug problems in the jar inside the component.
3 Learning ability not to mention, compared with advanced development, senior architecture to understand what kind of components that learn, and, each component within the knowledge too much, such as Kafka knowledge can write at least one book, for the Senior architecture, It takes a short time to understand the architecture of the component (such as Kafka) and how it is integrated with other distributed components (such as Flume), and to have the ability to filter knowledge, that is, what knowledge is not required to learn. In this way, once there is a demand, we can build the prototype skeleton of the system quickly, and then gradually improve the function effect.
4 How to effectively upgrade to a schema or a senior architecture for programmers?
When I am still in the middle of general development and advanced development, I think I can quickly upgrade to the level of architects, so-called ignorant fearless. When I took the pace of the upgrade, I just started, I suddenly found that the upgrade is very difficult, so there is no place to start, because I usually lack of practical architect skills of actual combat opportunities. Now, with some effort, I don't have the confidence to say I must have reached the level of the architect, but most of the architects are capable of doing what I can. And I usually also constantly think about the technical framework around the way and the way to solve problems, so in this regard I think that the advice given will not delay everyone.
The first is to consolidate their basic skills of the proposal.
1 Learn more videos and materials, also less than hands-on practice of a case.
For example, everyone in the learning message queue, must build an environment, the best use of virtual machine mode distributed scene, this may be a classmate said, the environment is too difficult to build, how to do? Self-check data, this kind of practical ability for the architect is the basic skills, if this is not good, then there is no hope to upgrade to the architect.
Like this, we can make a list of learning, online upgrade to the architect of the series of video, a lot of high quality is also a lot of other people's experience, but if you look at the theory, or the key point, this even the architect's interview can not, let alone do the actual architect's work.
2 usually cannot fear, must solve the problem more.
In peacetime work, there will be a lot of problems, and many are out of the core code and the underlying code, then you must look through the log and other ways to troubleshoot problems. I know, for many high-level development to upgrade, it must be difficult at first, such as the Linux command is not familiar, or inefficient, others have found the problem point, they just opened the log. In fact, we all like this, more check more practice, up to three months, hands-on ability must be able to improve.
3 You have to exercise yourself in Linux (or in a distributed environment) to deploy the system deployment components, especially the ability to deploy the cluster, on this basis, through a variety of tools to carry out stress testing.
For example, or take Kafka, set up a good cluster, you can use the Kafka self-performance to do the pressure test. In fact, if it is their own practice, the results of the test is not much significance, but this process to go down, will be able to build the environment, the use of tools and look at the logs and other skills are very familiar.
4 try to develop your own tuning awareness. To say this is very virtual, in particular, you have to be able to find the long SQL through various database logs (such as the running time of each SQL), and based on the implementation of the plan to optimize, as well as the dump file and GC log to see the memory usage curve of the virtual machine, to see the main memory consumption in what aspects, If your own code is not well done, if it is consumed in the (middleware) underlying jar package code, that also need to know the solution.
The above is only the basic skills required by the architect, in fact, if we can really achieve the above 4 points, we leave the level of the architect is not far away, on this basis, we still have to continue to exercise the ability to integrate.
From a vertical point of view, the need to further deepen the building of clustering skills, such as from the perspective of the underlying code to understand the composition of the cluster, so that you can clearly understand how the cluster expansion and performance tuning advantages.
Horizontally, you need to learn more about how multiple components are integrated, such as how the system integrates with log components, how big data analysis tools integrate with log components, and so on.
The rest is accumulating experience skills.
5 on the upgrade road, how to avoid some pits
I still have the opportunity to touch some of the great gods, and these are actually the experiences of the great gods. Share below what pits should be avoided during the upgrade process.
1 Just like everyone before the political exam, prepare the big point, in order to ensure the big point not to pull down on the basis of a detailed review of each big point in detail. For example, you can first understand what components in spring cloud, such as the ribbon can be used to load balance, hystrix can be used to fault tolerance, and so on, first of all the components of Spring cloud first understand, can use them to build a micro-service system, Take a closer look at the details of each of these components, such as the Kafka configuration details in spring Cloud stream.
But I went through with a number of architects to communicate, they in the upgrade, how much in this aspect of the detour, I myself sometimes unknowingly into the technical details, and forget I learn the original purpose of the technology. The advice here is that after a clear learning goal (for example, to learn Spring Cloud), do not first in their own work to set their own learning goals, you can learn from the existing video tutorials and other learning routes. When making a learning plan, set yourself a short-term goal in three days, wait until the spring cloud components are all understood, and then run through several cases to gain insight into the details of the component, so that you can control your learning steps.
20 million theory and actual disconnection. It seems like crap, but I've seen a lot of advanced development, usually watching videos and books, and not running code, and the results are progressing very slowly.
What if you don't have the opportunity to practice architectural skills? See if there is any structure in your group. What if you don't? (Don't bother me) go home to prepare the environment, according to the video structure of the building environment. If necessary, you can even switch to an architect's practice opportunity.
3 architects can be technically controlled, but not perfectionist, after all, the solution has to be tailored to the actual business, and the cost of solving the problem needs to be considered. Moreover, architects can not be too specific about the details, not all hands, many times, to give direction, or to split the problem into the development of understandable sub-problems, and then let the men to do. This seems to have nothing to do with technology, which requires architects to be more capable of dealing with people, which is explained in detail in part 6th of this article.
6 guidance technology difficult to achieve their own functions, and then discuss the coordination of senior architecture (or the passing of the argument) ability of the refining
Many developers, especially senior developers, may have this experience, for some features, I would rather do it myself, rather than split them into several sub-functions and then arrange the men to do. Or I'd rather conquer some technical problems and not be willing to go out of their way to make a choice of the components in the architecture.
It can be said that the value of architect 30% comes from the expertise he has, and 30% of the value comes from his ability to analyze and solve problems, while 40% of the value (or even higher) comes from mentoring and coordination skills. In addition to the last 40% of the value, architects are actually no different from advanced development. For example, in the following example, we can see why architects have the ability to guide and coordinate.
Case 1: When an architect is asked to improve the invocation performance of the company's system (for example, an application site), he has to deal with multiple groups, often with some groups that may not be supportive (after all, the existing system is well-used and no one is willing to change it), or the specific improvement point needs to be implemented by some group, which is
Case 2: Once the architect has set up a distributed cache system, it is time to train the developers of other groups to use the system appropriately.
Case 3: Once the architect has helped a group solve a typical oom problem, the idea of solving the problem has to be extended to other groups in order to save time in solving similar problems.
From the above examples, we can certainly feel the skill level that architects need to master in communication and coordination. This is not difficult to say, more practice, but for it development, mouth is more difficult than writing code. Here are some tips to improve your "mouth" abilities.
1 First of all to improve their ability to synthesize logical thinking, this can rely on more blog, or even write books to promote. In fact, when it is written, it is equivalent to the content of their own words to be collated, so that virtually also enhance their comprehensive ability to express.
2 to share more technology within the group. In fact, just started to share, must not know what to say, even after the end of no one can understand (of course, they can understand), but more than a few times, oral expression and the ability to communicate with others also went up.
3 in the encounter and other groups of communication (such as the joint or communication interface), must seize the opportunity to open more openings, at the beginning, it is difficult to let others accept their views, or they may not be able to speak clearly, but after many coordination, can let others accept their views, or we can achieve mutually acceptable compromise.
7 Summary, Copyright note
I do not want to write this article as chicken soup, and more want to add as much as possible in the text of dry, so this article three easy to draft. After the completion of the review, feel the text more is I see and I feel, and, this article from the architect's skills, analysis of the architect's efficient upgrade method, as well as improve their communication skills, in each of the key points, give specific actionable recommendations.
As a result of the actual project, so I feel a little help to everyone, if you have any questions, or need to see what aspects of the blog, please leave a message to explain.
This article before reprint, please and the author explain, at the same time indicate the source of the article, at the same time, I wrote two books connected Java Web Lightweight Development Interview Tutorials and Java Core Technology and interview guide.
Thank you again for reading this article.
Take a look at the issues that senior architects need to solve, and compare how far you are from the senior architect--and the way to upgrade the technology architecture