架构师技能图谱(系统架构师所需的硬实力与软技能)

架构师需要有什么硬实力和软技能呢?硬实力需要具备很强的技术广度和深度,包括问题定义、问题解决、救火能力,能够快速定位并处理问题的能力。

软技能即管理的能力,需要有项目范围管理、项目设计及规划的能力,如何准确评估工作量的能力,开发过程中的风险管理能力,以及沟通协调能力,这些软技能能够帮助团队取得更大的成就。

▲联通物联网开发经理&架构师 苏仕祥

嘉宾介绍:苏仕祥,开源爱好者,架构师,专注于数据库技术、微服务架构领域。 对分布式,大规模数据处理,高并发高性能系统有着深入理解以及相关实践经验,有大规模跨语言跨平台的异构系统微服务架构实践经验。开源数据库中间件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等的工具优化、缓存、并发、内存等的系统优化。

三是工程架构能力,包括开发语言、设计模式的选用、数据结构算法、开发测试流水线的规划,运维与监控选型落地,数据库、操作系统、框架、存储、中间件等应用技术的规划架构能力。

四是架构师应具备的软素质,主要是沟通能力、解决问题的能力、学习能力、创新能力、项目管理能力、文档论文阅读能力以及归纳总结能力。

思维导图列出相应技术栈以供参考。

发布于 2022-09-08 15:12:07
收藏
分享
海报
0 条评论
185
上一篇:宝妈亲测23款尿不湿哪款好用(泰迪熊纸尿裤怎么样) 下一篇:休闲食品加盟店开在学校附近有钱赚吗(糖果便利店怎么加盟)
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码