0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

架构师需了解的一些知识

jf_78858299 来源:元闰子的邀请 作者:元闰子 2023-05-10 17:11 次阅读

前言

当你点开一个招聘APP,筛选条件选择互联网技术,在列出来的一大堆职位上,往往有那么几个带有“ 架构师 ”三个字眼的高薪职位。当你被它的高薪所吸引而点击查看职位详情时,又会被它的高要求所劝退。它们往往要求工作年限在5年以上,需要求职者有过3年以上的系统设计经验,精通各种架构模式和系统框架,反观自己却一个条件都不满足。

软件架构师就是这么一个让人向往,但又让人望洋兴叹的一个职位。就像建筑设计师总有成为总设计师的梦想,航天工作者总有成为总工程师的壮志,相信每一个软件工程师都有过成为软件架构师的想法。引用维基百科里的定义, 软件架构师的职责就是在软件系统研发中,负责依据需求来确定主要的技术选择、设计系统的主体框架结构,并负责搭建实施 。然而,架构师所需的技能远远不止于技术选择和系统设计。本文主要介绍软件架构的定义,以及要成为一个软件架构师所需具备的一些技能,让你对软件架构师这一职位有一个更深的了解。

文中大部分的观点来自于《Fundamentals of Software Architecture》一书,想了解更多详情推荐阅读原书。

软件架构的定义

对于 软件架构 (Software Architecture),我们通常将它看成是软件系统的蓝图(blueprint),但是如果要给出一个精确的定义,往往很难。维基百科里对软件架构的定义为, 有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计 。但是,这种定义也是片面的,软件架构并不仅仅是系统的整体结构和组件,光有这些还不足以指导设计出好的软件系统。

Mark Richards和Neal Ford在书中,从四个维度上对软件架构进行了描述,分别是 StructureArchitecture characteristicsArchitecture decisionsDesign principles

图片

软件架构的描述

Structure

Structure描述的是软件系统所使用的架构风格 ,比如最常见的分层架构(layered architecture)、事件驱动架构(event-driven architecture)、微核架构(microkernel architecture)、微服务架构(microservices architecture)等等。当你去问架构师一个软件系统使用什么架构时,如果他告诉你,“系统使用的是微服务架构”,那么也他仅仅阐明了系统的架构风格而已。若想了解整个系统的软件架构,对architecture characteristics、architecture decisions和design principles都要有深入的认识。

图片

Structure

Architecture characteristics

Architecture characteristics也就是我们常说的非功能需求 ,比如有可用性(Availability)、可扩展性(Scalability)、可靠性(Reliability)等。Architecture characteristics往往容易被软件新手所忽略,但是它对于软件系统而言却是非常的重要。如果说功能需求决定了一个软件系统的下限,那么非功能需求则决定了它的上限。

图片

Architecture characteristics

Architecture decisions

Architecture decisions描述了开发软件系统时所必须遵循的规则 ,比如图中例子,对于一个分层架构风格的系统而言,开发工程师需要遵循以下规则:只有业务层才能直接访问服务层,表现层不能直接访问服务层。Architecture decisions更多的只是一种约束,违反了这种约束可能并不会对系统的功能造成影响,但是却是系统架构腐化的源头。

图片

Architecture decisions

Design principles

Design principles指的是系统设计的原则 ,用于引导开发团队选择更符合系统特点的技术方案。Design principles只会给出一个方向,而不是具体的实现方案。比如图中例子给出的系统设计原则就是:微服务之间应该尽可能通过异步通信来提升系统的性能。至于开发团队通过REST或者RPC的方式进行异步通信实现,设计原则并未进行限制。

图片

Design principles

成为架构师所需的技能

就像软件架构不仅仅是系统的整体结构和组件一样,要成为一个软件架构师,只会技术选型是远远不够的。一个合格的软件架构师应该具备以下的几种技能:

进行架构决策

An architect is expected to define the architecture decisions and design principles used to guide technology decisions within the team, the department, or across the enterprise.

这是一个架构师所需具备的最基本的技能,需要为开发团队给出系统设计的原则和系统开发的约束。 架构师在这里的角色更多的是一个引导者,而不是具体技术方案的制定者 。比如,开发团队要进行前端框架的选型,作为架构师应该给出的建议是选择Reactive风格的前端框架(引导团队在React.js、Angular、Vue.js或者其他Reactive风格的前端框架之间进行选择),而不是直接建议选择React.js框架。前者属于架构决策,而后者则是技术决策。

持续对系统架构进行分析

An architect is expected to continually analyze the architecture and current technology environment and then recommend solutions for improvement.

就像一个软件系统的生命周期并不止于开发阶段的结束,软件架构也不是一锤子买卖。这就要求架构师能够持续对系统架构进行分析,并提出改进的建议,使得系统在面对业务和技术的双重变化时,仍然能够保持架构良好。

保持对技术和业界的发展趋势的敏感

An architect is expected to keep current with the latest technology and industry trends

作为一个架构师必须时刻保持对技术和业界发展趋势的敏感。在敏捷开发的潮流下,软件的特性会频繁的发生变化,但是软件的基础架构往往是很少改变的。架构师如果不能把握当前技术和业界发展的趋势,从而导致设计出来的软件架构不能够应付未来几年的业务和技术变化,这对于一个软件系统而言将会是灾难性的。

确保团队按照既定的规则进行开发

An architect is expected to ensure compliance with architecture decisions and design principles.

架构师不仅仅需要制定设计原则和开发约束,还需要确保团队能够一直按照这些规则进行软件开发。这就要求架构师对开发人员提交的核心代码进行Code Review,否则系统的架构很容易就腐化掉了。

扩展知识的广度

An architect is expected to have exposure to multiple and diverse technologies, frameworks, platforms, and environments.

对于一个架构师而言,他并不需要精通每一种框架、平台和语言,但至少要尽可能多的了解它们,这样才能更好的支撑架构决策。这就要求架构师能够持续的学习新的知识,不断地跳出自己的舒适区。最好的情况就是精通2~3种语言和框架,并且熟悉业界各种常用的语言和框架,这样的知识深度和广度的结合才能设计出更好的软件架构。

拥有一定的领域知识

An architect is expected to have a certain level of business domain expertise.

所有的技术都是服务于既有的业务,剥离了业务的软件技术毫无价值 。架构师无需像领域专家一样精通系统的各种业务,但至少也要有一定的业务积累。软件是用来解决问题的,不懂业务的架构师来做软件架构设计,就相当于还没读懂题目就开始解题,结果往往适得其反。比如一个需要低时延的业务,交给一个不懂业务的架构师来进行系统设计,可能得出来的是一个高吞吐量的架构。

人际交往的能力

An architect is expected to possess exceptional interpersonal skills, including teamwork, facilitation, and leadership.

对于大部分的开发工程师和架构师而言,这可能是最难的一条了要求了。他们很擅长,也很乐意去解决技术上的问题,但是对于与人相关的问题则相当的抵触。但这对于一个合格架构师来说所必须克服的一点,因为架构师不仅仅需要制定技术规则,更重要的是领导团队按照既定规则进行开发,这不可避免地就涉及到领导力和人际交往的能力。

当一个开发工程师决定在一次需求开发中采用单例模式,可能团队里的其他人并不会有太多的关注。但是当一个架构师决定采用微服务架构来设计系统时,可能就会受到团队内各类人员的挑战,比如版本经理可能觉得微服务架构太复杂,会不会影响交付的节奏;开发人员可能觉得分层架构更好实现。这种情况下就要求架构师能够有很好的人际交往能力,说服各类人员,这样项目才能更好的进行下去。

总结

软件架构是一个很抽象的东西,目前对它的定义大部分都是一些很宽泛的描述。《Fundamentals of Software Architecture》从四个维度上对软件架构进行了描述,让软件架构有了一个更加清晰的视图。在此基础上,书中也提出了一个合格的软件架构师所需要具备的几种技能。总的来说,就是 想要设计出一个好的软件架构很难,要成为一个好的软件架构师更难

另外,书中还提出了软件架构的两个准则,很有道理,就是有点抽象。不过没关系, 不要试图理解它,要去感受它

1、Everything in software architecture is a trade-off.

2、Why is more important than how.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 系统设计
    +关注

    关注

    0

    文章

    144

    浏览量

    21483
  • 软件架构
    +关注

    关注

    0

    文章

    60

    浏览量

    10224
  • 架构师
    +关注

    关注

    0

    文章

    43

    浏览量

    4578
收藏 人收藏

    评论

    相关推荐

    一些有关通信电路的资料?

    有关嵌入式之间DSP、ARM、FPGA三者之间和这三款芯片和外部电路之间通信的一些资料,比如说芯片之间的并行通信和芯片和外部电路之间的串行通信,MODBUS、DP、CAN等,一些一些常用的通信协议的
    发表于 03-03 18:53

    对于绘制USB DRP架构一些疑问求解

    我正在绘制新系统的架构,对此有一些疑问: 1) 通常左侧板有 20V 固定电源,将通过 TypeC 端口向右板提供 20V。 a) Vbus 通过 Mosfets 直接连接到 20V,如果谈判失败
    发表于 02-23 06:31

    有关射频技术无线传输的一些问题

    实际生活中无线信息传播应用极为广泛,有一些在无线传输方面应用的问题想请教。想了解了解。 1、在有线电路中传输的信息是怎么传发送到空间的,这个发送的电路的原理是什么? 2、生活中应用到多种频率的波段
    发表于 02-03 14:42

    一些无功补偿装置SVG的资料

    一些SVG电路原理和功能码相关的技术说明书,想了解一些SVG的工作原理和工作过程
    发表于 02-03 10:13

    求助,关于AD603做成VGA的一些问题

    手册的图49以及图33进行更改画出的电路图,请问精通该芯片的工程,上面的电路能实现我前面所说的5点要求吗?如果有问题的话,需要如何修改才能实现要求? 小弟还有一些关于AD603的一些问题想让相应
    发表于 11-20 07:19

    《 AI加速器架构设计与实现》+学习和一些思考

    激活函数 激活函数很多,如Sigmod,ReLU等等,这里不放图了。 一些典型设计 系统架构设计 具体实现
    发表于 09-16 11:11

    Arm事务性内存扩展概述

    中解释其中的一些实现。 本指南面向希望了解事务性内存的概念、ARM TME实现以及TME如何在系统开发中帮助原子性的开发人员和架构师
    发表于 08-17 07:57

    介绍一些基础的电力知识

    电力是现代社会不可或缺的能源之一,了解电力知识有助于我们更好地利用和管理能源资源,为可持续发展贡献力量。本文将为您介绍一些基础的电力知识点,让我们共同探索能源的无限潜力。
    的头像 发表于 08-15 15:01 919次阅读

    【书籍评测活动NO.18】 AI加速器架构设计与实现

    自动放弃------------------------------------------------------------------------地平线BPU首席架构师/英伟达前高级架构师15年
    发表于 07-28 10:50

    STM32总线架构讲解

    在说总线架构之前,要了解一些知识点,AMBA是什么、总线、矩阵的作用,了解了这些才能明白总线为何这样走,为何要有矩阵。
    的头像 发表于 07-24 11:34 1408次阅读
    STM32总线<b class='flag-5'>架构</b>讲解

    关于数码管的一些知识笔记

    “写写关于数码管的一些知识笔记”
    的头像 发表于 06-28 11:29 2345次阅读
    关于数码管的<b class='flag-5'>一些</b><b class='flag-5'>知识</b>笔记

    了解一些电气冷知识

    电气一行的知识浩如星河,专业的电气知识想必每个人都有接触,也多多少少知道一些,但电气冷知识就不一定了,虽说是冷知识,但往往知道那么几个,不仅
    的头像 发表于 06-20 11:02 462次阅读
    <b class='flag-5'>了解</b><b class='flag-5'>一些</b>电气冷<b class='flag-5'>知识</b>

    架构模式的基础知识

        作为软件工程师,为什么至少要学习基本的架构模式?     我相信有很多人回答了这个问题,但我会给你一些考虑的理由。     首先,如果您了解架构模式的基础
    的头像 发表于 06-13 16:13 435次阅读
    <b class='flag-5'>架构</b>模式的基础<b class='flag-5'>知识</b>

    一些模电笔记

    一些模电笔记
    发表于 06-09 22:33

    【致敬未来的攻城狮计划】嵌入式方向的看过来,第3期免费报名咯。。。

    《致敬未来的攻城狮计划》 第3期摘要:个崭新的计划,寻找那群有志于向嵌入式发展的未来工程!1 活动计划初衷《致敬未来的攻城狮计划》来源于架构师李肯的个念想,我
    发表于 05-05 22:12