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

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

3天内不再提示

什么是系统架构 为什么要做架构设计

OSC开源社区 来源:系统工程实验室 作者:胖仔 2022-11-10 10:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

不论是开发人员还是架构师,我们都一直在跟软件系统打交道,架构是在工作中出现最频繁的术语之一。那么,到底什么是架构?你可能有自己的答案,也有可能没有答案。对“架构”的理解需要我们不断在实践中思考、归纳、演绎,形成自己的认知。

1 到底什么是软件架构 ?

定义 ”架构是什么“ 是件非常困难的事情,不同的组织对于软件架构有不同的定义,每个人心中也有自身对于系统架构定义的认知。就好比我们无法百分之百表述模型而只能产出模型不同维度的视图,对架构进行完备的定义是不可能的。

“道可道,非常道。名可名,非常名”,道是如此,架构亦是如此。

行业内不同的组织和个人从不同的视角对 “什么是架构” 进行了定义或阐述。

IEEE 关于架构的定义

将系统架构定义为:架构是系统组织结构+组件及联系(组件间以及组件和环境之间)+原则的组合。通过图形化的形式表述该架构定义如下图所示,这是一个非常简洁、概念清晰的定义,其言简意赅的表达了架构的几个核心要素:

系统的组织:表达系统的宏观结构

组件及联系:组件化的思维,同时突出了环境要素。组件表达了系统的模块化,组件相互之间及组件与环境之间的关联表达元素间的相互作用。

原则:用于指导设计和系统演进的原则

25529558-6037-11ed-8abf-dac502259ad0.png

大师Martin Fowler和Ralph Johnson对于架构的定义有着类似的、更加简洁和抽象,Martin Fowler 认为软件架构是:重要并且难以改变的决策。架构设计是关于权衡的艺术,架构设计过程中充满了各种各样的决策,这些决策也终将反应系统架构。

Software Architecture = Important and hard to change decisions --Martin Fowler

The software architecutre is the important stuff ! Whatever it is ! --Ralph Johnson

以上的定义从高层抽象视角对什么是架构给予了自己的回答,相比之下,Neil Ford 在《软件架构基础》一书中对架构给出了更具象的阐述,其从架构组成元素入手,从更偏向实践的角度对架构进行了阐述。核心思想是软件系统的架构包括以下组合元素:

结构:应用系统所选择的架构风格,比如微服务架构、单体架构还是SOA等

架构属性:系统的非功能性属性,比如性能、可用性、可维护性等

架构决策:系统设计过程中重要的架构决策

设计原则:设计过程中的指导性原则

2582f018-6037-11ed-8abf-dac502259ad0.png

结构

结构是系统架构的重要组成部分,其从宏观上表述了系统的结构组成。架构设计的核心任务之一是为系统选择合适的架构风格。比如,架构师基于上下文的权衡,可以选择模块化单体架构风格,也可以选择微服务架构风格。

25a08240-6037-11ed-8abf-dac502259ad0.png

架构属性

架构属性亦称质量属性,或非功能属性,通常表示系统需要具备或满足的某种 “能力”,比如高性能、可扩展性、弹性、伸缩性、容错性、可测试性、可维护性等等。架构设计的目标需要关注系统需要满足的架构属性,架构最终要体现对架构属性支持的相关架构决策。架构属性众多,系统需要关注的是这些架构属性的子集,具体的某次特定的架构设计所需要关注的架构属性需要依据问题域的上下文而具体分析。同时,不同的架构属性间可能存在冲突,这种情况同样需要架构师的权衡和决策。

25ba84e2-6037-11ed-8abf-dac502259ad0.png

架构决策

架构决策是系统架构设计过程中对解决方案的选择,其描述了系统必须遵循的规则。架构决策随着权衡分析而自然存在,其是系统架构设计的重要维度之一。并不是所有的决策都是架构决策,架构决策应该关注对系统有重要影响的部分。比如对架构风格的选择对系统存在重要影响,其改变的成本较高,理当属于架构决策的范畴。比较典型架构决策包括但不限于:

直接影响高优先级的架构属性

修改对外接口:对外提供的接口修改往往需要进行充分影响分析

引入或者移除依赖:依赖的加入和移除往往标示着组件能力的引进和废弃

改变系统的通用结构:工程结构是应用架构的重要维度之一

迫使研发人员改变开发方式

接受战略性技术债:重构影响较大的技术债往往对现有系统会有较大影响

注:架构决策建议以轻量级的文档化形式进行记录,参考文章 《轻量级的架构决策记录机制》一文

设计原则

设计原则与架构决策不同,其本质区别是:设计原则是一种指导,而非强制的规则。架构决策需要遵守,设计原则提供参考性指引。

比如,设计原则可能是:在可能的情况下,跨系统间的通信尽可能使用异步消息机制以提高性能和降低耦合

2 架构设计的边界

如果你是团队的架构师,你是否有以下困惑:

系统的架构应该设计到什么粒度?

架构设计是否要足够详细以便能直接指导开发人员开展编码工作?

如果你是团队的核心开发人员,你是否 “抱怨” 过:

"架构设计" 太过详细,涵盖了实现的 “细枝末节”,自己除了CRUD没有发挥的空间

"架构设计" 太过宏观,基于设计方案根本无法指导开发,自己还得重新设计

25e3faf2-6037-11ed-8abf-dac502259ad0.png

很多架构师自身对架构和设计的边界缺乏深入认知,相比于对架构边界的缩小,更多时候会出现架构设计边界放大的情况:

架构师把架构设计当作详细的技术方案设计,牢牢把控系统实现的所有细节,产出大量的设计文档,然后交由核心开发人员做代码实现的执行工作。

这种现象会导致如下问题:

压缩了团队核心开发人员的设计发挥空间,不利于其技术水平及认知的提升

作为架构师你真的能讲所有的细节都Cover住吗?即使耗费巨大精力完成了 “完备” 的设计,来自一线开发所面临的各种场景是否能够提前预知和捕获?

如果需求迭代持续如此,作为核心开发人员多半会有所 “怨言”

作为团队的架构师精力有限,持续的细节输出会耗费巨大精力,而无法关注更加宏观的层面

.......

以上问题的根源是什么?不能明确架构设计的边界!

架构设计与设计(实现相关)的边界或粒度问题

团队架构师与开发人员间的职责边界

判断架构边界的前提之一是:明确架构和设计的关系!

所有的架构都是设计,但设计不一定是架构!

从架构的定义看架构设计的边界,选取两个视角:

架构是系统中重要的东西!无论它是什么(之所以重要,是因为改变的成本高)

架构设计涵盖系统中重要的架构决策

所以,架构设计应该涵盖系统中重要的东西,这些 “重要的东西” 可能是:

应用架构风格的选择

子系统间信息通信的方式

工程采取的分层以及层间约束

工程应该遵循的开发规范

工程引入的三方类库,或者三方框架

高优先级的架构属性:比如某次需求建设非常关注系统的性能,或者扩展性等架构属性

其它 "重要的东西"

架构设计涵盖了系统所需的重要的架构决策,从宏观层面对系统实现予以指引。而详细的设计则为具体的开发实现提供指导,比如,详细的E-R图设计、具体的代码级别的模式选择、某个组件的具体实现等等。

架构不是一成不变,需要持续演进,而实现相关的设计也可能在项目进行中持续变化,因此,二者不能完全割裂,而是需要在实现过程中进行双向反馈:

架构设计信息要高效的同步至开发人员

实现过程中的变更同样也要回向反馈至架构,以便对架构设计进行调整

262863cc-6037-11ed-8abf-dac502259ad0.png

在进行架构边界判定时要注意一个至关重要的因子:上下文!!!以上的判断准则必须要给定的上下文中才有价值。

比如:实现过程中大家经常会适用一些设计模式,例如策略模式。那么,这种设计模式的选择是属于架构设计还是详细的实现设计?答案就是:It depends!!! 具体情况,具体分析。

266d0da6-6037-11ed-8abf-dac502259ad0.png

如果当前上下文,我们非常关注系统的扩展性,该架构属性是我们高优先级的架构属性,那么,核心模块的策略模式的应用可以看作是架构设计的范畴。而如果上下文中扩展性不是我们关注的高优先级的架构属性,相比我们更关注性能,那么,这种代码级的设计模式选择应该属于架构设计的范畴之外了,而需要划分到实现设计层面,交由核心开发自主决定。

3 架构模式(Patterns)与架构风格(Styles)

架构模式和架构风格是极容易混淆的两个概念,很多开发人员将其理解为同一事物,而实际上二者有本质区别。

架构风格是系统设计的顶层抽象,从宏观视角表述我们的系统组成。更进一步,架构风格聚焦于系统的分层、模块以及交互形式。

架构模式聚焦于对重复出现问题提供解决方案

二者概念不同,并不存在冲突,其联系如下图所示:

架构模式可以应用于架构风格,在同一架构风格上下文内可以应用一或多中架构模式

架构风格可以组合以产生新的架构风格

26867e76-6037-11ed-8abf-dac502259ad0.png

比较典型的例子是CQRS:CQRS本身是一种模式,将命令和查询的职责在不同维度进行分离。该模式我们可以在单体架构风格中使用,也可以在微服务架构风格中使用,当然也可以在SOA架构中使用。

26b0203c-6037-11ed-8abf-dac502259ad0.png

4 为什么要做架构设计 ?

至于 “为什么要做架构设计” 也是一个古老且频繁出现的问题,有太多的文章阐述为社么要架构设计:有的宏观,有的具体,有的“务实”,有的“务虚”。我把这个问题作为一个独立章节阐述,并不是想进行大篇幅的论述,只是想突出它的重要性,这个问题值得耗费一些精力去深入理解其背后的原因。但,在此不做展开过多说明,通过一句话来进行概括:

之所以要进行架构设计,是因为:重要 !

做,收益高

不做,成本高

5 开发人员和架构师的知识模型

作为开发人员,更加关注知识的深度,以便有足够的知识储备满足工作需要。开发人员在职业生涯的早期,应该关注于自身知识储备的增长,并保持技术深度。

26d1c9c6-6037-11ed-8abf-dac502259ad0.png

作为架构师,之所以技术的广度比深度更重要,是因为架构师的重要职责之一是进行架构决策。系统架构设计是关于权衡的艺术,在特定的问题域上下文下,架构师需要在诸多可行的解决方案间进行权衡和决策,这也对其技术广度提出了要求。开发人员成长为架构师,应该更加关注知识的广度,并在几个特定领域深耕,以便有足够的知识支撑架构决策。

28149b1a-6037-11ed-8abf-dac502259ad0.png

虽然开发人员和架构师在知识域的关注点上存在差异,但在认知层面都可以统一到Bloom认知层次模型。该模型将认知层次划分为逐步递进的六个层次:

识记:识别和回溯事实性知识

理解:理解事实的内涵

应用:将事实、规则、概念、思想加以应用

分析:将信息分解、关联、区分、实验、测试

评估:将信息或思想的价值进行评价

创造:整合不同的信息形成新的知识体系

285eddce-6037-11ed-8abf-dac502259ad0.png

不论是架构师还是开发人员,Bloom认知层次模型都适用。通过不断的学习扩展自身的知识体系,在识记、理解和应用的同时,要持续的培养分析、评估和创造的能力,逐步向高层次的认知水平提升。

但需要注意的是:知识不等于认知,避免陷入知识学习的陷阱。知识是无限的,没有人能够以无限的精力去学习无限的知识。不论是开发人员还是架构师,又或者其他角色,不应该只将精力投入在知识边界的扩充,而应该注重从知识到认知提升的转变。

吾生也有涯,而知也无涯。以有涯随无涯,殆矣!已而为知者,殆而已矣! ----《庄子》

格物以致知,对表象不断的归纳、演绎直至事物的本象,探寻事物背后的规律,建立更高层的认知。这种认知层次由下及上的跃升有两种方式:

悟:由内向外,通过不断积累、持续思考,由量变到质变,直至 “开悟”

破:自外向内,高层次或不同的思想输入碰撞,加速认知层次的突破

299221c4-6037-11ed-8abf-dac502259ad0.png

6 结语

对架构定义的探讨实际上是一种朴素的 “格物” 的过程,每个人都应该寻找自己的答案。跳脱对架构定义探讨的视野,大家的工作和学习何尝不是如此呢 ?!

审核编辑:郭婷

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

    关注

    1

    文章

    533

    浏览量

    26506
  • 应用系统
    +关注

    关注

    0

    文章

    31

    浏览量

    11238
  • 系统
    +关注

    关注

    1

    文章

    1043

    浏览量

    22174
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式软件分层架构设计原则

    嵌入式软件分层架构的设计原则如下: 模块化和可扩展性:每一层应当保持松耦合,这样当硬件变化或某些功能扩展时,只需要修改对应的层次,而不影响整体架构。 硬件无关性:上层代码应当尽量避免直接依赖硬件
    发表于 11-28 07:05

    芯源MCU架构是不是基本都是ARM架构?还有其他的架构吗?

    芯源MCU架构是不是基本都是ARM架构?还有其他的架构吗?
    发表于 11-20 06:21

    分布式光伏环境监测站的技术架构与应用实践

    分布式光伏环境监测站的技术架构与应用实践 柏峰【BF-GFQX】一、系统技术架构解析 分布式光伏环境监测站采用“感知层-传输层-应用层”三层架构设计,实现环境数据的全链路智能化处理。
    的头像 发表于 10-13 10:05 254次阅读
    分布式光伏环境监测站的技术<b class='flag-5'>架构</b>与应用实践

    TensorRT-LLM的大规模专家并行架构设

    之前文章已介绍引入大规模 EP 的初衷,本篇将继续深入介绍 TensorRT-LLM 的大规模专家并行架构设计与创新实现。
    的头像 发表于 09-23 14:42 703次阅读
    TensorRT-LLM的大规模专家并行<b class='flag-5'>架构设</b>计

    海绵泡沫切割机嵌入式数控系统的硬件架构设计与核心

    嵌入式数控系统的硬件架构是海绵泡沫切割机稳定运行、精准控制的物理基础,其设计需围绕切割工艺需求,实现数据处理、指令执行、状态感知与外部交互的高效协同。整体架构以核心控制模块为中枢,联动多个功能模块
    的头像 发表于 09-11 09:12 461次阅读
    海绵泡沫切割机嵌入式数控<b class='flag-5'>系统</b>的硬件<b class='flag-5'>架构设</b>计与核心

    光伏电站中应用的无人机AI巡检系统架构设

    维护提供数据支持,在当下的电站运营中发挥着重要的作用。 从系统架构设计方面来说,通过硬件层、软件层以及云平台层各层不同功能模块部署设计,实现智能化的巡检流程应用。首先是硬件层,通过构建无人机平台适应如沙漠、山地
    的头像 发表于 09-02 14:13 238次阅读
    光伏电站中应用的无人机AI巡检<b class='flag-5'>系统</b><b class='flag-5'>架构设</b>计

    油介质损耗及电阻率测试仪的嵌入式系统架构与抗干扰设计

    油介质损耗及电阻率测试仪的精准检测能力,不仅依赖于核心的电气测量模块与温控系统,更离不开稳定可靠的嵌入式系统作为“中枢神经”。嵌入式系统承担着数据采集、运算处理等核心功能,其架构设计与
    的头像 发表于 09-02 13:57 355次阅读
    油介质损耗及电阻率测试仪的嵌入式<b class='flag-5'>系统</b><b class='flag-5'>架构</b>与抗干扰设计

    深入剖析RabbitMQ高可用架构设

    在微服务架构中,消息队列故障导致的系统不可用率高达27%!如何构建一个真正可靠的消息中间件架构?本文将深入剖析RabbitMQ高可用设计的核心要点。
    的头像 发表于 08-18 11:19 699次阅读

    同一水平的 RISC-V 架构的 MCU,和 ARM 架构的 MCU 相比,运行速度如何?

    ARM 架构与 RISC-V 架构的 MCU 在同一性能水平下的运行速度对比,需从架构设计原点、指令集特性及实际测试数据展开剖析。以 ARM Cortex-M33 这类 ARMv8M 架构
    的头像 发表于 07-02 10:29 1220次阅读
    同一水平的 RISC-V <b class='flag-5'>架构</b>的 MCU,和 ARM <b class='flag-5'>架构</b>的 MCU 相比,运行速度如何?

    光伏运维管理系统架构设计及其应用分析

    开展。 光伏运维管理系统集成先进的数据监测、故障诊断、运维任务管理等多种功能内容,为光伏电站提供全面、高效、智能的运维服务。其系统分层架构设计,覆盖感知层、网络层、平台层和应用层。感知层通过传感器和摄像头等设
    的头像 发表于 06-10 11:34 473次阅读
    光伏运维管理<b class='flag-5'>系统</b><b class='flag-5'>架构设</b>计及其应用分析

    光伏电站无人机巡检系统平台的设计架构

    光伏电站无人机巡检系统平台通常采用分层架构设计,这就要求系统的设计必须贴合光伏电站的实际运维管理需求、适应不同类型电站中的差异,因此系统从设计架构
    的头像 发表于 05-07 11:23 614次阅读
    光伏电站无人机巡检<b class='flag-5'>系统</b>平台的设计<b class='flag-5'>架构</b>

    设备远程监控与预测性维护系统架构设计及应用实践

    本文探讨了在工业4.0与数字化转型背景下,设备管理系统从传统人工巡检向智能运维的深刻变革。文章从技术架构、实施路径和典型应用三个方面深入解析了设备远程监控与预测性维护系统的实现方法。
    的头像 发表于 04-15 10:16 850次阅读
    设备远程监控与预测性维护<b class='flag-5'>系统</b><b class='flag-5'>架构设</b>计及应用实践

    汽车电气架构中的电源架构

    随着汽车电子化、智能化的快速发展,汽车电气架构(E/E架构)已成为现代汽车的核心技术之一。
    的头像 发表于 03-29 11:25 702次阅读

    芯片架构设计的关键要素

    芯片架构设计的目标是达到功能、性能、功耗、面积(FPA)的平衡。好的芯片架构能有效提升系统的整体性能,优化功耗,并确保在成本和时间的限制下完成设计任务。
    的头像 发表于 03-01 16:23 1417次阅读

    面向服务的整车EE架构(SOA)设计开发咨询服务

    经纬恒润多年来一直致力于为客户提供先进电子电气架构解决方案,近年来,经纬恒润在国内率先开展整车SOA架构的技术研发和业务布局,参与多款SOA架构下量产车型的研发,积累了丰富的SOA架构设
    的头像 发表于 12-12 15:11 1254次阅读
    面向服务的整车EE<b class='flag-5'>架构</b>(SOA)设计开发咨询服务