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

    文章

    154

    浏览量

    21603
  • 软件架构
    +关注

    关注

    0

    文章

    64

    浏览量

    10280
  • 架构师
    +关注

    关注

    0

    文章

    47

    浏览量

    4620
收藏 人收藏

    评论

    相关推荐

    硬件工程需要掌握的硬件基础知识

    示波器 方法/步骤 电路知识,模拟电子线路知识:作为个合格的硬件工程,模拟电路知识是基础,从了解
    的头像 发表于 12-02 09:22 239次阅读
    硬件工程<b class='flag-5'>师</b>需要掌握的硬件基础<b class='flag-5'>知识</b>

    一些常见的动态电路

    无论是模电还是数电,理论知识相对来说还是比较枯燥,各种电路原理理解清楚不算容易,换种生动形象的方式或许会增加一些趣味性,也更容易理解这些知识。下面整理了
    的头像 发表于 11-16 09:26 312次阅读
    <b class='flag-5'>一些</b>常见的动态电路

    分享一些常见的电路

    理解模电和数电的电路原理对于初学者来说可能比较困难,但通过一些生动的教学方法和资源,可以有效地提高学习兴趣和理解能力。 下面整理了一些常见的电路,以动态图形的方式展示。 整流电路 单相桥式整流
    的头像 发表于 11-13 09:28 279次阅读
    分享<b class='flag-5'>一些</b>常见的电路

    LED驱动器应用的一些指南和技巧

    电子发烧友网站提供《LED驱动器应用的一些指南和技巧.pdf》资料免费下载
    发表于 09-25 11:35 0次下载
    LED驱动器应用的<b class='flag-5'>一些</b>指南和技巧

    架构师的自述:在尚未踏入的世界成为你自己

    计算、流式计算、交互式计算的通用化数据应用构建,降低大数据计算的使用门槛。 在此,我跟大家分享下我的个人经历和一些思考。    好玩儿 成长经历,说来话长,有多长呢? 上世纪80年代末,我参与了计算机输入指令的归化:把穿孔
    的头像 发表于 09-23 15:25 351次阅读
    <b class='flag-5'>一</b>位<b class='flag-5'>架构师</b>的自述:在尚未踏入的世界成为你自己

    想要了解下大模型知识

    工作需要,想要了解下大模型算力建设知识
    发表于 08-20 15:31

    中级自动驾驶架构师应该学习哪些知识

    随着自动驾驶技术的成熟,对系统架构师的需求逐渐增加。自动驾驶系统架构师负责设计整个系统的结构、组件、接口和数据流;需要协调不同领域的专业知识,确保系统的可靠性、安全性和性能。总之,自动驾驶系统
    的头像 发表于 06-20 21:47 285次阅读

    初级自动驾驶架构师应该学习哪些知识

    随着自动驾驶技术的成熟,对系统架构师的需求逐渐增加。自动驾驶系统架构师负责设计整个系统的结构、组件、接口和数据流;需要协调不同领域的专业知识,确保系统的可靠性、安全性和性能。总之,自动驾驶系统
    的头像 发表于 06-20 21:45 298次阅读

    贴片电容精度J±5%的一些知识

    贴片电容精度J±5%的相关知识可以从以下几个方面进行归纳和总结: 精度等级定义: J±5%表示的是贴片电容的精度等级,具体指的是电容的实际值与标称值之间的偏差范围在±5%以内。这意味着如果个电容
    的头像 发表于 06-05 16:38 960次阅读
    贴片电容精度J±5%的<b class='flag-5'>一些</b><b class='flag-5'>知识</b>

    细谈SolidWorks教育版的一些基础知识

    SolidWorks教育版是款广泛应用于工程设计和教育领域的三维建模软件。它具备直观易用的操作界面和强大的设计功能,为学生提供了个学习和实践的平台。在本文中,我们将详细探讨SolidWorks教育版的一些基础
    的头像 发表于 04-01 14:35 337次阅读

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

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

    晶振电路中电容电阻的一些基本原理和作用解析

    晶振电路中的电容和电阻是调整和维持晶振振荡稳定性的关键元件。KOAN凯擎小妹带大家了解下晶振电路中电容电阻的一些基本原理和作用。
    的头像 发表于 02-20 16:22 1728次阅读
    晶振电路中电容电阻的<b class='flag-5'>一些</b>基本原理和作用解析

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

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

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

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

    反汇编的一些基本知识

    在程序届有句名言:如果你能读懂汇编,切程序对你来说就是开源。
    的头像 发表于 01-19 09:37 613次阅读