系统架构师&软件架构师
有很多人不太清楚系统架构师和软件架构师,甚至把这两个概念混为一谈,这里简单分析一下。
先看看外国佬给的定义:
System Architecture is abstract, conceptualization-oriented, global, and focused to achieve the mission and life cycle concepts of the system. It also focuses on high‐level structure in systems and system elements. It addresses the architectural principles, concepts, properties, and characteristics of the system-of-interest. It may also be applied to more than one system, in some cases forming the common structure, pattern, and set of requirements for classes or families of similar or related systems.(wiki)
The purpose of system architecture activities is to define a comprehensive solution based on principles, concepts, and properties logically related and consistent with each other. The solution architecture has features, properties, and characteristics satisfying, as far as possible, the problem or opportunity expressed by a set of system requirements (traceable to mission/business and stakeholder requirements) and life cycle concepts (e.g., operational, support) and are implementable through technologies (e.g., mechanics, electronics, hydraulics, software, services, procedures, human activity).(wiki)
Software application architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. It involves a series of decisions based on a wide range of factors, and each of these decisions can have considerable impact on the quality, performance, maintainability, and overall success of the application.(microsoft)
关注点有很大的不同:
Software architecture focuses on the implementation that will solve a specific problem. For example, Facebook writes software to implement their web interface as well as all of their APIs. If you\’re writing software to solve a problem, you need to consider its architecture regardless of the scale of the application you are building (1 to 1 billion users), especially if you are considering long-term maintenance.
Systems architecture focuses on the underlying servers (physical or virtual) and server software (web servers, database et cetera) that the software will utilize. Systems architecture is largely focused on scaling with high availability, fault tolerance and redundancy to avoid data loss. This is something that becomes a much bigger issue as the load increases on your software. Smaller scale applications mostly focus on avoiding data loss, while a high-scale site like Facebook has a number of very complex issues that need to be solved to handle the large number of concurrent users as well as the large scale data storage that is constantly being updated.
最后又说,尽管看起来是独立的,但是软件和系统通常需要一起计划,特别是在小范围内,这两者是可以合并的,比如开发一个小型网站。但是如果是做一个大型系统,则需要分开制定软件和系统的架构决策:
Despite the fact that they can be described independently, software and systems often need to be planned together. At the smallest scale you can safely disambiguate the two, but as load increases you will need to start making software and system architecture decisions in conjunction to work towards a particular scaling strategy.
所以,简单的来说,码农随着经验和技术的积累,是可以上升到软件架构师的,但是要上升到系统架构师,需要掌握的知识,则要增加很多,比如计算机系统、网络和安全、硬件等等。
通常我们说的架构师,是指软件架构师,包含两个身份:应用架构师(理解业务,梳理模型,设计模式,接口,数据交互等)和业务架构师(也可以叫业务领域专家、行业专家、产品咨询师、资深顾问)。