阿里技术专家谈:什么是架构师?成为架构师的必备条件是什么?

作者 : 开心源码 本文共5847个字,预计阅读时间需要15分钟 发布时间: 2022-05-12 共188人阅读

一、什么是架构师

曾经有这么个段子:

甲:我已经应聘到一家中型软件公司了,今天上班的时候,全公司的人都来欢迎我。

乙:羡慕ing,都什么人来了?

甲:CEO、COO、CTO、All of 程序员,还有会计、司机都来了。

乙:哇,他们太重视你了,人才啊,这么多人迎接你!

甲:没有啊,就一个人!

乙:靠,#%¥$%…

很多的创业公司,一人身兼数职的情形还是很常见的。至少,我是经历过的,一个人包办了所有的开发过程,连测试我都做了,绝对的一条龙,但是经常踩钢丝、骑独轮车总会有失足的时候,结果有一次,从我手里发出去的光盘母盘,含有病毒僵尸,以至于被迫收回已经推上市场的2万张光盘,从那之后,我的心脏就开始变得无比坚强,现在就是整个后端服务都瘫痪了,我也只是微微一笑。

其实,一个人身兼架构师和程序员,甚至多种角色,没什么不妥,后面还会讲这个话题,这种现象不是中国特色,跟国外是完全接轨的。我曾经跟米国的一个工程师在msn中聊过相似的话题,发现他们的路子跟咱们没什么不同,在IT这个行业,我们跟世界的差距只有1天,他们刚弄出来的新东西,我们这里第2天保准见得到。

架构师这个称呼不是拍脑袋想出来的,是有国际标准(ISO/IEC 42010)可查的。架构师是软件开发活动中的众多角色之一,它可能是一个人、一个小组,也可能是一个团队。微软对架构师有一个分类参考,我们参考一下,他们把架构师分为4种:

  • 企业架构师EA(Enterprise Architect)、
  • 基础结构架构师IA(Infrastructure Architect)、
  • 特定技术架构TSA(Technology-Specific Architect)
  • 处理方案架构师SA (Solution Architect)。

微软的这个分类是按照架构师专注的领域不同而划分的

  • EA的职责是决定整个公司的技术路线和技术发展方向。盖茨给自己的Title就是首席软件架构师,网易丁磊也喜欢这么称呼自己,实际上就是EA角色
  • IA的工作就是提炼和优化技术方面积累和沉淀形成的基础性的、公共的、可复用的框架和组件,这些都是一个技术型公司传承下来的最宝贵的财富之一
  • 特定技术架构师TSA,他们主要从事相似安全架构、存储架构等专项技术的规划和设计工作
  • SA的工作则专于处理方案的规划和设计,“处理方案”这个词在中国已经到了严重泛滥的程度,大忽悠们最喜欢把它挂在嘴边。所谓处理方案,就是把产品、技术或者理论,不断地进行组合,来创造出满足客户需求的选择。售前工程师一般都是带着它到用户那里去发挥的。

大公司会把各种类型的架构师分得很清楚,小公司一般就不那么讲究了,架构师多数是是IA+TSA+SA,一人包打天下,所以说大公司出专才,小公司出全才

实际工作中,我们也经常会见到另一种比较简单的分类方式,把架构师分为软件架构师和系统架构师。软件架构师基本上是TSA+IA,这也是程序员最容易突破,最可能走上的一条道路,比方JAVA架构师、DotNet架构师、LAPM架构师等等,我后面所讲的内容都是与软件架构师的相关的话题。

系统架构师实际上是SA+TSA,更着力于综合运用已有的产品和技术,来实现用户期望的需求。系统架构师要求通晓软、硬件两方面的知识,所以它的知识体系相对庞杂。关于系统架构师的话题,我们可以稍后再作探讨。

二、架构师的职责

架构师需要参加项目开发的一律过程,包括需求分析、架构设计、系统实现、集成、测试和部署各个阶段,负责在整个项目中对技术活动和技术说明进行指导和协调。

架构师主要职责有4条:

1、确认需求

在项目开发过程中,架构师是在需求规格说明书完成后介入的,需求规格说明书必需得到架构师的认可。架构师需要和分析人员反复交流,以保证自己完整并精确地了解客户需求。

2、系统分解

依据客户需求,架构师将系统整体分解为更小的子系统和组件,从而形成不同的逻辑层或者服务。随后,架构师会确定各层的接口,层与层相互之间的关系。架构师不仅要对整个系统分层,进行“纵向”分解,还要对同一逻辑层分块,进行“横向”分解。

软件架构师的功力基本表现于此,这是一项相对复杂的工作。

3、技术选型

架构师通过对系统的一系列的分解,最终形成了软件的整体架构。技术选择主要取决于软件架构。

Web Server运行在Windows上还是Linux上?数据库采用MSSql、Oracle还是Mysql?需要不需要采用MVC或者者Spring等轻量级的框架?前台采用富用户端还是瘦用户端方式?相似的工作,都需要在这个阶段提出,并进行评估。

架构师对产品和技术的选型仅仅限于评估,没有决定权,最终的决定权归项目经理。架构师提出的技术方案为项目经理提供了重要的参考信息,项目经理睬从项目预算、人力资源、时间进度等实际情况进行权衡,最终进行确认。

4、制定技术规格说明

架构师在项目开发过程中,是技术权威。他需要协调所有的开发人员,与开发人员一直保持沟通,始终保证开发者依照它的架构用意去实现各项功能。

架构师与开发者沟通的最重要的形式是技术规格说明书,它可以是UML视图、Word文档,Visio文件等各种体现形式。通过架构师提供的技术规格说明书,保证开发者可以从不同角度去观察、了解各自承担的子系统或者者板块。

架构师不仅要保持与开发者的沟通,也需要与项目经理、需求分析员,甚至与最终客户保持沟通。所以,对于架构师来讲,不仅有技术方面的要求,还有人际交流方面的要求。

三、架构师的误区

1、架构师就是项目经理

架构师不是项目经理。项目经理侧重于预算控制、时间进度控制、人员管理、与外部联络和协调等等工作,具有管理职能。一般小型项目中,常见项目经理兼架构师。

2、架构师负责需求分析

架构师不是需求分析员。需求分析人员的工作是收集需求和分析需求,并与最终客户、产品经理保持联络。架构师只对最终的需求审核和确认,提出需求不清和不完整的部分,他会跟需求分析员时刻保持联络。架构师是技术专家,不是业务专家。

3、架构师素来不写代码

这是一个尚存争论的问题。目前有两种观点:

  • 观点1:架构师不写代码,写代码纯体力活,架构师写代码大材小用。架构师把UML的各种视图交给开发人员,假如有不明确的地方,可以与架构师随时沟通。

  • 观点2:架构师原本自于程序员,只是比程序员站的层面更高,比程序员唯一多的是经验和知识,所以架构师也免不了写代码。

我个人觉得这两种说法是与架构师的出身和所处的环境有关

架构师首先是一个技术角色,所以肯定是来自于技术人员这个群体,比方系统架构师,多是来自于运维人员,可能本身代码写得并不多,或者者说写不出来很漂亮的代码。软件架构师多是来自于程序员,有着程序员的血统和情怀,所以在项目开发过程中,可能会写少量核心代码。我们的理想是架构师不用写代码,但事实上有时候过于理想。架构师写不写代码,可能取决于公司的规模、文化、开发人员的素质等现实情况。另外,架构师也不是跟程序员界限分得那么清楚,按照能力也有高中低之分,写不写代码不是区分两者的根本标准。

四、架构师的基本素质

周星驰有个片子《喜剧之王》,剧中的尹天仇终日揣着本《演员的自我修养》,一个好演员不仅需要天赋,也需要肯定的理论指导,无师自通的人毕竟是少数。架构师的成长过程也是这样。从普通程序员到高级程序员,再到架构师,是一个经验积累和思想升华的过程。经验积累是一个方面,素质培养是另一个方面,两者相辅相成,所以我觉得有必要把架构师的所要具有的素质罗列一下,作为程序员努力的方向。

沟通能力

为了提高效率,架构师必需博得团队成员、项目经理、用户或者客户认同,这就需要架构师具备较强的沟通能力。沟通能力是人类最普遍性的素质要求,技术人员如同容易忽略,想成为架构师就不能忽略。

千万不要抱着这样的观念:怀才跟怀孕似的,时间久了总会被人发现的。还是天桥上卖大力丸的哥们说得对:光说不练假把式,光练不说傻把式

看看你附近的头头脑脑们,哪一个不是此中高手,我们千万不要鄙视,认为这是阿谀奉承、投机钻营,凡事都要看到积极的一面,“沟通”确实是一种能力。我认为自己是一个略内向的人,由于我是农村出来的孩子,普通话都说不好,以前或者多或者少带有点自卑感,幻想着是金子总会发光,所以在职业生涯中吃了不少亏。现在,我深深懂得了沟通的重要性,我会很主动地跟同事们,跟老大们不定时地沟通,感觉工作起来顺畅多了。

这一条我认为最为重要,所以排在首位。我甚至认为下面几条都可以忽略,唯一这一条得牢记,而且要常常提示自己。

领导能力

架构师能够推动整个团队的技术进展,能在压力下作出关键性的决策,并将其贯彻究竟。架构师如何来保证这种执行力?这就需要架构师具备领导能力。

架构师的领导能力的获得跟项目经理不太一样。项目经理主要负责处理行政管理,这种能力与技术关系不大,他有人权和财权,再扯上一张“领导”的虎皮,采用“胡萝卜加大棒”的方式,基本上可以保证执行力。架构师在项目里面可能更多地使用非正式的领导力,也就是我们常说的影响力,里面包括个人魅力、技术实力、知识传递等等。

笼统思维和分析能力

架构师必需具有笼统思维和分析的能力,这是你进行系统分析和系统分解的基本素质。

只有具有这样的能力,架构师才能看清系统的整体,掌控全局,这也是架构师大局观的形成基础。你如何具有这种能力呢?

一是来自于经验,二是来自于学习。架构师不仅要具有在问题领域上的经验,也需要具有在软件工程领域内的经验。也就是说,架构师必需能够精确得了解需求,而后用软件工程的思想,把需求转化和分解成可用计算机语言实现的程度

经验的积累是需要一个时间过程的,这个过程谁也帮不了你,是需要你去经历的。但是,假如你有意识地去培养,不断吸取前人的经验的话,还是可以缩短这个周期的。这也是我写作此系列的始动力之一。

技术深度和广度

架构师最好精通1-2个技术,具有这种技术实力可以更加深入的了解有关架构的工作原理,也可以拉近和开发人员的距离,并形成团队中的影响力。

架构师的技术知识广度也很重要,需要理解尽可能多的技术,所谓见多识广,只有这样,才可能综合各种技术,选择更加适合项目的处理方案。有的人说,架构师技术广度的要求高于技术深度的要求,这是很有道理的。

总而言之,一句话:架构师是项目团队中的技术权威

五、架构师需要掌握的技术体系

(1)架构筑基:深入内核、直击故障、拒绝蒙圈

大家都知道,性能一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,性能方面就会下降,假如想成为一名优秀的架构师,性能优化就是你必需思考的问题。
所以性能优化专题从JVM底层原理到内存优化再到各个中间件的性能调优,比方Tomcat调优,MySQL调优等,让你洞悉性能本质,全面认识性能优化,不再只是旁观者。

感兴趣的可以加学习分享群:“708~701~457”获取更详细技术大纲

(2)高性能架构:成为互联网架构师,你要的都在这里

有了大牛的代码功底之后,接下来可以更好地学习分布式架构技术。
透彻了解分布式架构的好处和优点必然性,适应市场需求,能够去找少量更大的平台发展,提升自己的综合技术实力和薪资。
理解从传统架构到分布式架构演变过程所带来的技术变革,将理论和实战相结合,透彻了解分布式架构及其处理方案。
从分布式架构原理,到分布式架构策略,再到分布式架构中间件,最后在加上分布式架构实战,让程序员可以在技术深度和技术广度上得到飞跃的提升,成为互联网行业所需要的T型人才。

感兴趣的可以加学习分享群:“708~701~457”获取更详细技术大纲

(3)开源框架:站在巨人肩膀,收获不一样的视野

这张图详细详情了源码中所用到的经典设计思想及常用设计模式,先打好内功基础,理解大牛是如何写代码的,从而吸收大牛的代码功力。

结合Spring5和MyBatis源码,带你了解作者框架思维,帮助大家寻觅分析源码的切入点,在思想上来一次巨大的升华。

感兴趣的可以加学习分享群:“708~701~457”获取更详细技术大纲

(4)微服务:你还不知微服务?那怎样加(zhuang)薪(bi)

随着业务的发展,代码量的膨胀和团队成员的添加,传统单体式架构的弊端越来越凸显,严重制约了业务的快速创新和敏捷交付。为理解决传统单体架构面临的挑战,先后演进出了SOA服务化架构、RPC框架、分布式服务框架,最后就是当今非常流行的微服务架构。微服务化架构并非银弹,它的实施本身就会面临很多圈套和挑战,涉及到设计、开发、测试、部署、运行和运维等各个方面,一旦使用不当,则会导致整个微服务架构改造的效果大打折扣,甚至失败。

感兴趣的可以加学习分享群:“708~701~457”获取更详细技术大纲

(5)团队协作开发专题:让你的团队开发效率提高十倍

一名优秀的架构师必需有适合自己的兵器,也就是工欲善其事必先利其器,不论是小白,还是资深开发,都需要先选择好的工具。工程化专题的学习能帮助你和团队提升开发效率,让自己有更多时间来思考。
Git:可以更好地管理你和你团队的代码。
Maven:可以更好地管理jar包和项目的构建等。
Jenkins:可以更好地持续编译,集成,发布你的项目。
Sonar:一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题(提升代码的质量,更加高效地提升开发效率)。

感兴趣的可以加学习分享群:“708~701~457”获取更详细技术大纲

(6)B2C项目商城实战:撸起袖子干实事,项目经验那点事

电商项目目的是把所学的分布式,微服务,性能调优等知识运用起来,只有在项目中你才能巩固知识,提升自己。实践电商项目会利用云服务器搭建真实的开发和部署环境,让你从零到项目实战,体验真实的企业级项目开发过程,让你具有独立开发和搭建分布架构系统的能力。

感兴趣的可以加学习分享群:“708~701~457”获取更详细技术大纲


本文的重点是你有没有收获与成长,其他的都不重要,希望读者们能谨记这一点。同时我经过多年的收藏目前也算收集到了一套完整的学习资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货,希望对想成为架构师的朋友有肯定的参考和帮助
需要更详细思维导图和以下资料的可以加一下技术交流分享群:“708 701 457”免费获取



说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 阿里技术专家谈:什么是架构师?成为架构师的必备条件是什么?

发表回复