当前位置: 首页 > news >正文

第1章:架构基础

架构是什么

系统与子系统

系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。

系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。

模块与组件

从逻辑的角度来拆分后得到的单元就是“模块”,从物理的角度来拆分系统得到的单元就是“组件”;划分模块的主要目的是职责分离,划分组件的主要目的是单元复用。

框架与架构

软件框架(Software Framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

软件架构是指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。

单纯从定义的角度来看,框架和架构的区别还是比较明显的,框架关注的是“规范”,架构 关注的是 “结构”。框架的英文是 Framework,架构的英文是 Architecture。Spring MVC 的英文文档标题就是 “Web MVC Framework”。

重新定义架构

我们参考维基百科的定义,将架构重新定义为:软件架构指软件系统的顶层结构!

这个定义很简单,但包含的信息很丰富,基本上把系统、子系统、模块、组件、架构等概念都串起来了,详细阐述如下。

首先,“系统由一群关联个体组成”,这些“个体”可以是“子系统”“模块”“组件”等,架构需要明确系统包含哪些“个体”。

其次,系统中的个体需要“根据某种规则”运作,架构需要明确个体运作和协作的规则。

第三,维基百科的架构定义中用到了“基础结构”这个说法,我们改为“顶层结构”,可以更好地区分系统和子系统,避免将系统架构和子系统架构混淆导致架构层次混乱。

架构设计的目的

常见误区

因为架构很重要,所以要做架构设计

这是一句正确的废话,架构很重要,但架构为何重要呢?

例如:不做架构设计系统就运行不起来吗?

其实不然, 很多朋友尤其是经历了创业公司的朋友会发现, 公司的初始产品没有架构设计, 大伙撸起袖子简单讨论一下就开始编码了, 根本没有正规的架构设计过程, 而且也许产品开发速度还更快, 上线后运行也还不错。

例如:做了架构设计就能提升开发效率吗?

也不尽然,实际上有时候最简单的设计开发,效率反而是最高的,架构设计毕竟需要投入时间和人力,这部分投入如果用来尽早编码,项目也许会更快。

例如:设计良好的架构能促进业务发展吗?

好像有一定的道理,例如,设计高性能的架构能够让用户体验更好,但反过来想,我们照抄微信的架构,业务就能达到微信的量级吗?肯定不可能,不要说达到微信的量级,达到微信1/10的量级,做梦都要笑醒了。

不是每个系统都要做架构设计吗

这其实是知其然不知其所以然, 系统确实要做架构设计, 但还是不知道为何要做架构设计, 反正大家都做架构设计, 所以做架构设计肯定没错。

这样的架构师或设计师很容易走入生搬硬套业界其他公司已有架构的歧路,美其名曰“参考”“微改进”。一旦强行引入其他公司架构,很可能会出现架构水土不服,运行起来很别扭等各种情况,最后往往不得不削足适履,或者不断重构,甚至无奈推倒重来。

公司流程要求系统开发过程中必须有架构设计

与此答案类似的还有因为“架构师总要做点事情”,所以要做架构设计,其实都是舍本逐末。因为流程有规定,所以要做架构设计;因为架构师要做事,所以要做架构设计。这都是很表面地看问题,并没有真正理解为何要做架构设计,而且很多需求并不一定要进行架构设计。如果认为架构师一定要找点事做,流程一定要进行架构设计,就会出现事实上不需要架构设计但形式上却继续去做架构设计,不但浪费时间和人力,还会拖慢整体的开发进度。

为了高性能、高可用、可扩展,所以要做架构设计

能够给出这个答案,说明已经有了一定的架构经历或基础,毕竟确实很多架构设计都是冲着高性能、高可用等“高 XX”的目标去的。

但往往持有这类观点的架构师和设计师会给项目带来巨大的灾难,这绝不是危言耸听,而是很多实际发生的事情。为何?因为这类架构师或设计师不管三七二十一,不管什么系统,也 不管什么业务,上来就要求“高性能、高可用、高扩展”,结果就会出现架构设计复杂无比,项目落地遥遥无期,团队天天吵翻天等各种让人抓狂的现象,费尽九牛二虎之力将系统上线,却出现运行不够稳定,经常出问题,出了问题很难解决,加个功能要改1个月等各种让人抓狂的事件。

架构设计的真实目的

架构设计的主要目的是为了解决复杂度带来的问题。

复杂度来源

高性能

软件系统中高性能带来的复杂度主要体现在两方面,一方面是单台计算机内部为了高性能带来的复杂度;另一方面是多台计算机集群为了高性能带来的复杂度。

高可用

高可用指 “系统无中断地执行其功能” 的能力,代表系统的可用性程度,是进行系统设计时的准则之一。

可扩展性

可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或仅需要少量修改就可以支持,无须整个系统重构或重建。

低成本

低成本给架构设计带来的主要复杂度体现在:往往只有“创新”才能达到低成本目标。这里的“创新”既包括开创一个全新的技术领域(这个要求对绝大部分公司太高),也包括引入新技术,如果没有找到能够解决问题的新技术,那么真的就需要自己创造新的技术。

安全

安全本身是一个庞大而又复杂的技术领域,并且一旦出问题,对业务和企业形象影响非常大

从技术的角度来讲,安全可以分为两类:一类是功能上的安全,另一类是架构上的安全。

总结

  • 系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。

  • 子系统也是由一群有关联的个体所组成的系统,多半是更大系统中的一部分。

  • 软件模块(Module)是一套一致而互相紧密关联的软件组织。它分别包含了程序和数据结构两部分。

  • 软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。

  • 软件框架(Software Framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

  • 软件架构指软件系统的顶层结构。

  • 同一软件系统从不同的角度进行分解,会得到不同的架构。

  • 架构设计的主要目的是为了解决软件系统复杂度带来的问题。

  • 主要的软件系统复杂度有高性能、高可用、可扩展、低成本、安全、规模几种。

http://www.cnnetsun.cn/news/2907741.html

相关文章:

  • 如何免费获取抖音无水印高清视频:douyin-downloader完整指南
  • 生产级机器学习系统:防御性设计与系统性风险治理
  • 从零样本到思维分支:LLM推理增强的工业级落地路径
  • Docker分层构建缓存原理详解:零基础快速吃透镜像加速机制
  • MCU模拟比较器与DAC实战:低功耗监控与自动波形生成
  • SPI驱动非标准字长外设:硬件打包与软件模拟方案详解
  • BERTScore深度解析:为什么这个文本评估指标能碾压传统方法?
  • 小红书无水印下载终极指南:3分钟掌握批量采集技巧
  • 嵌入式定时器与DAC实战:从抗噪滤波到自动波形生成
  • 别再只用qemu-img了!QEMU快照的两种玩法(磁盘/检查点)与实战避坑指南
  • 终极指南:在Linux上安装Realtek 8922AE WiFi 7网卡驱动的完整教程
  • 抖音下载器开源项目实战教程:从零搭建24小时自动采集系统完整指南
  • 深入解析MC56F81xxxL中断与eDMA:从原理到实战配置指南
  • i.MX21 SSI接口AC97模式详解:寄存器配置与多通道音频驱动开发
  • 深入解析NXP LS1046A SEC队列接口与错误处理寄存器
  • 3步精通:开源工具高效下载MOOC课程
  • SAP UI5 没有 NgModule,但有自己的装配秩序
  • MC68SZ328 UART与Memory Stick主机控制器深度解析与实战配置
  • MC68377 QADC64模块详解:队列式ADC原理、寄存器配置与嵌入式数据采集实战
  • Windows本地实时语音转文字终极指南:5分钟搭建你的隐私安全助手
  • Linux jbd2_journal_recover日志恢复与superblock标记
  • Linux jbd2_journal_commit_transaction日志提交与forget链表
  • 【毕业设计】基于 SpringBoot 的数据资产备案与登记管理系统研究 适配企业数字化转型的数据资产登记系统开发与实践(源码+文档+远程调试,全bao定制等)
  • 深入解析MC68377 CTM9 DASM:输出比较与PWM模式实战指南
  • 终极Laravel项目搭建工具:Laravel Installer核心功能详解
  • 告别手动配置!用Advanced Installer 15.7把SpringBoot Jar包一键打包成Windows服务(附Java环境自动检测)
  • 从零到实战:用Kalibr和ROS Melodic标定你的RealSense D435i(附标定板生成与数据录制技巧)
  • 实战指南:在PyTorch/TensorFlow项目中,用LIME和SHAP给你的‘黑箱’模型做个‘X光’检查
  • OpenClaw 企业级 Agent 平台技术方案
  • 2026图片在线去水印网站安全无广告怎么找?视频在线去水印平台免费推荐