天天看点

浅谈架构师角色和能力模型

作者:ICT动态
浅谈架构师角色和能力模型

1、架构师定义(Definition) 所谓的架构设计,是在当前的限制条件下,包括需求、可用工具、时间要求、人员能力、IT成本、运维复杂度等限制条件,通过系统化的深度思考、运筹取舍后,最终取得一个相对优化或者次优的解。架构设计需要综合业务和产品的理解、技术知识,是一个极其复杂的脑力活动。It is all about trade-off。

根据需要知识的负载不同,架构师会有一些侧重点不同。不同的公司划分的粗粒度不一样,以亚马逊为例,架构师只分为软件架构师、硬件架构师、系统架构师等,划分颗粒度较粗,这根公司对这个职位的要求相对较宽和深有关。国内互联网公司,比如京东,对架构师职位分的相对细一些,包括业务架构师、应用架构师、技术架构师等,但也在往粗粒度的方向进行转变,这跟这家公司的过往发展历程和人员能力组成有关。理想情况下,架构师角色划分不应该太细,但公司不同发展阶段,对这个角色的定义可以有所不同。

2、行为模式(Behaviors):

系统设计和关键实现

对功能性和非功能性需求,从扩展性(Extensibility)、性能(Performance)、可用性(Availability)、安全性(Security)、伸缩性(Scalability)等架构设计的基本维度出发定义架构。推动架构设计活动按照项目和产品计划有序进行,参与需求、设计评审等各种技术评审过程,并主导系统设计工作。在一些关键模块,架构师有时需要参与编码,或者参与代码审查,以确保核心模块的实现跟最初的设计保持一致。

技术攻关和救火

某个领域的架构师,应该是特定问题的最后屏障,任何技术难题都应该在架构师这里停止,不再往下传递。不同领域的不同项目,都有一些特定的挑战,如果这些挑战会影响项目实施,架构师需要介入并主导技术攻关,确保这个Bloker被移除掉。举个例子,交易系统的性能很重要,随着项目的推进,发现扩展属性越来越多,下单创建的性能下降很厉害,通过常规手段无法解决,这个时候架构师应该介入具体细节,分析性能下降的原因,并找到确切的性能优化方案,例如把数据Schema进行调整,冷热数据分离,加缓存等,确保最终性能可以达到要求。 此外,如果两个领域有边界问题争端,通常双方架构师需要深度参与,从领域能力定义出发,确定两个领域的边界,给整个团队移除Blocker。

技术布道

架构师通常都是由普通一线工程师,一步一步成长起来的,所以架构师既有抽象能力的架构经验,也有很多丰富的一线实战经验,架构师应该是整个团队工程经验的集大成者。如果所有知识和经验只是停留在架构师,那么研发团队的整体水平就无法提高,所以架构师需要经常做一些技术布道的事情,给团队进行经验和最佳实践分享,推动研发团队整体水平的提高。

3、主要技能(Skills):

作为一名合格的架构师,完备的技术领域知识是必备的技能,所需的技能不仅仅限于了解和掌握技术体系,也需要从业务领域和软技能两个层面进行技能拓展。

技术领域知识

架构设计相关的技术领域知识包括分布式系统、缓存、消息中间件、数据库、搜索,以及数据处理等各种目前业务主流的技术体系,以及这些这些主流技术的适合解决什么场景,不适合解决什么问题,优缺点分别是什么等等。

以ElasticSearch为例,这个工具的核心是Lucence全文搜索引擎,所以比较适合用来做数据库的索引扩展,但是很多时候大家有一个使用误区,把ES当做数据存储系统来用,或者用来做OLAP的分析。这两种使用方式,如果都是轻量级的,影响不大,但通常业务是发展很快,需求要的越来越多、也越来越复杂,所以ES不适合当做存储或者OLAP的场景。这只是其中一个简单的例子,技术选型不是直接有什么就用什么,或者别人用什么我也用什么,难点在于需要根据现有的业务诉求,以及不同阶段的业务发展需要,确定具体选择什么样的工具,并且需要很明确的知道什么时候这个工具就不适用了,需要升级或更换。

业务领域知识

不同型号的螺丝,用不同的螺丝刀,这个确定过程就需要对螺丝的规则和定义有明确的认知。反应到架构设计中,就需要架构师对业务领域有足够的理解。软件开发不是简单的把业务逻辑,用编程语言翻译成相应的代码,而是在充分考虑业务的可扩展性、代码的可维护性等多个方面,进行抽象和建模,然后再翻译成相应的代码。这个过程中,最复杂的是抽象和建模,这就需要对业务领域有深刻的认知和理解,确保能反应业务本质。现在比较流行的设计方法论--Domain Driven Design,正是用来解决越来越复杂、变化越来越快的挑战。

软技能

无论是传统型软件还是互联网应用,当前的开发模式已不再崇尚靠能力出众的个人来决定系统的产出,而是要靠团队。架构设计同样面临着项目计划同步、第三方服务集成、外部团队协作等团队性活动需求,很多场景下架构师需要与内部团队、外部团队统一协作才能设计出适合业务发展方向的系统架构。从这个角度讲,架构师应该具备跨团队的影响力和协作能力。

亲们,希望各位关注下ICT动态公众号,每天呈现新事物和信息,谢谢

继续阅读