架构师技能图谱(系统架构师所需的硬实力与软技能)
架构师需要有什么硬实力和软技能呢?硬实力需要具备很强的技术广度和深度,包括问题定义、问题解决、救火能力,能够快速定位并处理问题的能力。
软技能即管理的能力,需要有项目范围管理、项目设计及规划的能力,如何准确评估工作量的能力,开发过程中的风险管理能力,以及沟通协调能力,这些软技能能够帮助团队取得更大的成就。
▲联通物联网开发经理&架构师 苏仕祥
嘉宾介绍:苏仕祥,开源爱好者,架构师,专注于数据库技术、微服务架构领域。 对分布式,大规模数据处理,高并发高性能系统有着深入理解以及相关实践经验,有大规模跨语言跨平台的异构系统微服务架构实践经验。开源数据库中间件Apache ShardingSphere、DBLE源码贡献者。有着丰富的系统问题定义及优化经验,软件项目管理经验。目前担任联通物联物联网亿级设备连接平台系统架构师。
以下是苏仕祥老师在SACC2022大会的演讲实录:
一、概述
架构师分为软件架构师、硬件架构师、系统架构师等。其中,软件架构师分工很详细,包括云计算架构师、中间件架构师、数据库架构师、微服务架构师。所以,架构师到底是做什么的?架构师就是在有限的资源(时间有限、资源有限、相互制约、需要协调)下,通过设计并实现软件系统架构,来获得业务的最大价值。
架构师需要什么技能?首先是专业能力——硬实力,技术广度和深度、问题定义与解决的能力、快速有效进行软件选型、线上问题的定位与解决。其次是软技能,具备项目管理的能力和团队管理的能力。这是一个实践的世界,不落地的方案不是好方案。
二、架构师职业必点技能
(一)技术广度和深度
我们要成为一个优秀的架构师,需要哪些技能?从框架到中间件,数据库,操作系统,再到大数据,运维监控,所有的一系列技术都需要熟悉,特别是在跨团队协调沟通的情况下,更需要具备一定的技术广度和深度。
上图是云原生的全景图。面对如此多的知识点,可能无从下手,以我的实践经验总结来看,其实我们应该先学深。
那么,学深怎么学?举例,Spring学深能学到哪些?MySQL学深能学到哪些?中间件(Mycat、RocketMQ、Redis等)学深能学到哪些?
Spring是一套非常成功的web框架,简化了JAVA系统的开发,我们可以从中学到JAVA语言(数据结构、算法、类加载、多线程等)、网络处理(Http协议、IO模型)、Spring的应用部署运维(操作系统、负载均衡、高可用)。
通过MySQL,我们可以学到C++语言(数据结构、算法等)、网络处理(MySQL协议、IO模型)、MySQL的部署运维(高可用、高可靠、数据复制、操作系统)。对于计算机技术来讲,最基本的就是数据结构、算法、网络和操作系统。
技术学广还是学精?对此,我们一定要深入浅出,抽象出它们共性通用的知识,快速学广。大家不要局限于某一个应用,而应该去掌握真正底层的知识,做到融会贯通,一通百通。
(二)问题定义与解决的能力
任何事情都没有你想象的那么紧急,在解决问题之前,我们首先需要知道要解决的问题是什么?爱因斯坦曾经说过,如果他只有一小时来解决某个问题,他会花55分钟弄清楚要解决的问题究竟是什么,剩下的5分钟用来思考解决方案。
问题定义与解决的模型如上图,很多问题来源于需求,所以首先是需求沟通,然后是问题定义,弄清楚这个问题是什么?再然后去寻求解决方案,最后一定要实施验证,看解决方案能否满足用户的需求。
如何提高问题定义的能力?首先要学会沟通,认真聆听业务需求,把问题表述出来,总结确认。其次是持续学习,不断扩展自己的知识面,不要自我设限。最后是抽象概括。
如何提高问题解决的能力?首先要具备信息收集的能力,其次是持续学习的能力,如果不扩展自己的知识面,可能就无法获得相应的解决方法。最后是团队能力,依赖团队的力量,做到集思广益。
(三)快速有效进行软件选型
选型的需求来源于业务诉求,选型总是在业务驱动下进行的。当业务使用良好,没有性能瓶颈,没有合规要求,也没有新需求要开发的时候,我们不会想换个框架或组件。当业务有真正的诉求时,比如有数据同步、业务解藕、削峰填谷、分布式事务等需求,我们就需要调研相应的解决方案。
在开始选型前,我们需要了解有哪些待调研的对象。想用消息中间件,需要调研的对象可能有RabbitMQ、RocketMQ、Kafka等。有数据同步的需求,需要调研的对象可能有otter、Datax、canal等。想用rpc服务,调研的对象可能有Dubbo、gRPC、Thrift等。
整个调研的内容包括,系统架构、软件社区情况、文档、其他四部分。上图是系统架构,软件的系统架构在很大程度上决定了软件的简单或复杂、可扩展性、高可用性等较难改变的属性。
活跃的社区对于开源软件来讲很重要,因为活跃的社区说明软件的用户很多,用户多就有很多的实践经验可以参考交流,在你遇到问题的时候能有个交流的平台。社区情况一般看软件的最近一次提交是什么时候,issue的数量以及回复情况,更进一步可以看软件的邮件列表内容。
产品做的再好,没有文档,也没人会用。详细的产品文档主要包括但不限于软件架构、用户手册、性能测试、常见问答等。其他方面包括但不限于合规性、法律、生态工具等内容,比如如果使用的开源软件协议为GPL,按照协议规定,所有的二次开发都应该再次开源出来。
调研完产品后,我们对软件应该有了个大概了解,此刻我们需要回到业务上来。产品的特性或功能能否满足业务的需求,这才是决定我们选型的最重要原因。 一般的原则是,能够满足当前以及可预见的未来需求的软件,才是最合适的,因为这样的软件既能满足需求,又不至于太过复杂。
在特性或功能验证阶段,一般会进入到体力活环节,需要各种测试,比如基本功能测试、高可用测试、性能测试等。在测试的过程中,也尽可能的将测试脚本化、自动化,因为这个过程可能会重复多次,没人想一次次的手动来做。
在应用阶段,如果软件是基础软件比如数据库之类,一般会先进行试点应用,因为基础软件的影响面比较大,而选择试点应用,既可以规避大的风险,也能够通过实践积累起经验,方便后续的全面升级。如果软件只是当前业务使用,影响较小,那么要有自信直接上,不要怂。
在经历了软件调研、功能特性验证,到项目的正式使用之后,可以说现在的你也成为了软件社区中的一员,那么不要忘了分享你的使用经验,帮助其他软件使用者,毕竟一开始也是社区帮你解决了问题。
(四)线上问题的定位与处理
架构师需要有线上问题定位处理能力,应急救火的能力。如何提升救火的能力?一是问题定位能力,正确归因问题。二是问题处理能力,复现-修复-测试-回归。三是持续学习积累,持续学习知识,实践中积累知识。
三、优秀架构师还需要哪些管理技能
(一)项目管理的能力
很多公司希望通过项目的方式来做产品。我们是如何开始一个项目的?以数据中台项目为例,基于公司实践中遇到一些问题,提出了阶段性的新目标,以及相应分析报告,比如投入产出比,风险系数等等,最终经过决策,才会开始这个项目。
项目管理包括范围、时间、风险、人力、质量、成本、沟通、采购等领域。
项目范围管理最重要的是确认项目产出物,即决定这个项目完成后,最终要做什么产品,达成怎样的目标,能够实现哪些功能?
项目时间管理的核心在正确评估工作量。开始一个项目,需要有时间节点。对于IT行业来说,有一种说法是项目最长时间不能超过18个月(没记错的话,当初微软的操作系统项目完成时间也是定的18个月,虽然最终也有延期)。我们来看一下项目工作量评估的几种情况。第一种情况,能够准确的评估出工作量。这种情况下,相应的项目对于公司来讲可以说是轻车熟路,有足够的项目信息可供参考。
第二种情况,能够大概评估出工作量。此种情况,多发生在公司拓展业务时。公司以前是做智慧交通的,现在接到了智慧医疗的项目,组织内没有足够的信息可供参考。第三种情况,无法评估出工作量。比如原始创新型项目,没有任何信息可供参考。那么,如何正确评估工作量?核心在于充分收集信息。
在项目的实施过程中总会遇到一些问题,有些小问题可能会导致项目的延期,有些大问题甚至会影响整个项目的成功与否,这些都是项目风险。所以,项目风险如何应对?遏制风险、容忍风险、分担风险、规避风险。遏制风险简单来说就是兵来将挡水来土掩,遇见什么问题解决什么问题,其实对于大多数风险,我们都可以遏制。容忍风险就是容忍了,比如项目延期就延期吧,容忍它。分担风险一般是通过外包或者其他形式,将组织内不熟悉的领域分担给其他组织来做,将风险分担出去。规避风险可以说是最高等级的风险处理方式了,即有所为有所不为,不做不就自然没有风险了嘛。
关于项目沟通管理,上图是管理沟通的过程模型,管理沟通的基本原则包括:准确性、完整性、及时性、非正式沟通。准确性表示要和准确的人沟通准确的事;完整性表示把事情说清楚完整。很多事情具有及时性,需要在有效的时间内沟通。
如何管理沟通的技巧?一是学会说,学会听;二是书面沟通,能用一页纸把事情说清楚最好;三是有效的会议组织,其中,会议分为项目情况评审会议、项目技术评审会议、项目问题解决会议等等;四是非正式沟通运用。
在日常工作中,开会是再寻常不过的活动了,我们重点讲下会议组织的相关内容。组织者需要掌握会议沟通方法,在会前,是否真的需要开会?明确会议目的、议程、与会人员、地点,以邮件或微信的方式通知给各部门,准备会议材料。在会中,按时开始,再次说明会议目的、议程,指定一个人做会议记录,掌握和控制会议,不要超时,总结。在会后,得出会议结果,传达给每个人,执行与反馈。
如何汇报项目进度?项目汇报秉承着简单直观的原则,能用图的不要用表,能用表的不要用文字。
(二)团队管理的能力
我们为什么要努力?有些人可能是生活所迫,有些人拥有远大的目标,有些人是因为兴趣爱好。成功的团队管理可以满足各利益方期望。团队成员实践、成长、收获的期望,公司完成经营目标、获取盈利的期望,团队管理者成长、收获的期望。个人、公司、团队管理者的利益并不冲突,完全能够实现共赢。
如何实现共赢?个人可以找到自己的兴趣爱好,在工作中实现人生价值。管理者认识团队在公司实现目标过程中的角色,帮助团队成员,带领团队目标一致的前进。公司信息决策透明化,给予员工安全感。
四、架构师的挑战
架构师的挑战主要有全局视角、业务理解、保持谦虚、持续学习。你需要知道整个业务的全局,包括资源、团队定位。同时,要对自己的业务有非常深的理解,才能在有限的资源下,实现业务价值最大化。我们需要一直保持谦虚的心态,并且持续学习,今天的知识在明天不一定会生效。
五、总结
架构师是在有限资源下通过设计并实现软件系统架构,来获取业务的最大价值。优秀架构师除了自身专业技能外,还需要有项目管理、团队管理的能力,能够帮助你成功落地方案。
面对如此多的技术,我们需要抓住不变的思想,深入浅出,融会贯通。比解决问题更难的是定义问题,事情远没有你想得如此紧急,解决问题之前,我们需要知道要解决的问题是什么。
掌握软件选型的方法论,可以帮助你快速有效进行选型。持续学习,持续积累,能让你在紧急情况下不慌不忙。我们要学会沟通,相信团队的力量。乔布斯告诫所有的年轻人:“Stay hungry,Stay Foolish”也就是,求知若饥,虚心若愚。
不想当将军的士兵不是好士兵,人往高处走,走技术路线的同学,架构师是一个不错的选择,那架构师应该具备哪些素养呢,大家来讨论下。(附思维导图)
一是系统架构能力,包括了系统可扩展性、可用性、可靠性、灾备等的基础理论;基于负载、内容分发的通信架构设计;协议设计以及数据层、配置中心、微服务等的逻辑架构设计能力。
二是架构性能优化能力,包括代码级别的code review,jdk、Gprof等的工具优化、缓存、并发、内存等的系统优化。
三是工程架构能力,包括开发语言、设计模式的选用、数据结构算法、开发测试流水线的规划,运维与监控选型落地,数据库、操作系统、框架、存储、中间件等应用技术的规划架构能力。
四是架构师应具备的软素质,主要是沟通能力、解决问题的能力、学习能力、创新能力、项目管理能力、文档论文阅读能力以及归纳总结能力。
思维导图列出相应技术栈以供参考。
推荐阅读
-
win10怎么锁定电脑桌面(怎样固定桌面的快捷键)
怎样固定桌面的快捷键?在WindowsXP时,如果没有暂时不要远远离开一会儿,而又不如果能别人动你的电脑,可以将桌面锁定,那样的...
-
电脑一键恢复u盘启动的步骤(U盘做成系统盘后如何再恢复成普通的U盘)
U盘做成系统盘后如何再恢复成普通的U盘?大多在用Rufus之后,系统分区被封印而没能格式化U盘,就我自己的U盘为例,16G的内存,...
-
表格怎样快速插入(excel表格怎么插入→)
excel表格怎么插入→?在输入法的设置里可以找到特殊符号,找出去直接点击即可表格中怎么插入一个内容?表格中插入一个内容的方法:目...
-
excel公式下拉怎么锁定部分区域(excel表格怎么锁定行列)
excel表格怎么锁定行列?1.打开必须移动到行和列的Excel表格。2.左键单击全选【是需要固定行和列的十字交叉下方的单元格】。...
-
苹果手机怎么设锁屏壁纸(苹果13壁纸怎么改主屏幕壁纸)
苹果壁纸怎么改主屏幕壁纸?苹果壁纸改主屏幕壁纸的方法:,1、再点击墙纸在手机系统设置中再点墙纸直接进入。2、再点击选定新墙纸点击所...
-
苹果一键恢复短信(苹果手机短信可以恢复一年前的吗)
苹果手机短信可以恢复一年前的吗?苹果手机的短信彻底删除方法有再看看几点:1、请然后打开互盾苹果复原大师,选择“从iphone设备扫...
-
win10家庭中文版关屏保多种方法(电脑屏保怎么取消)
电脑屏保怎么取消?1、在设置中点击个性化 在电脑中打开Windows设置,点击“个性化”选项。 2、点击“锁屏界面”选项 接...
-
javaee框架整合开发从入门到实战(新手如何学习Java)
新手如何学习Java?作为一名从业多年来的Java程序员,而也出版社过Java编程书籍,因此我来回答再看看这个问题。对于新手来说,...
-
淘宝怎么设置自带淘宝群(淘宝群聊模块怎么不显示)
淘宝群聊模块怎么不显示?点开商家运营中心可以找到店铺装修重新设置里下即可怎样在淘宝里加群啊?操作步骤追加:1、先打开手机淘宝,直接...
-
windows(共享文件夹无需密码 文件分享安全高效什么软件好)
文件分享安全高效什么软件好?对于企业来说,一款专业的文件管理软件可以帮助企业高效管理文件,文件共享的安全性和效率也可以得到保障。比...