软件体系结构的5大基础模型

218次阅读

⭐ 架构的“5 种观察镜”

关键字:激励型系统、过程脚本、功能层次、构件服务

软件体系结构不是“一刀切”的设计,而是有 5 种核心模型,每种模型像一面“观察镜”,只聚焦系统的一个核心侧面,帮我们从不同角度理解架构。

  1. 通道模型 🚪:关注系统“计算的过程”,比如数据从输入到输出的流转,这类系统大多是“激励型”(有外部触发就会响应,像按开关灯就亮)。
  2. 过程模型 📋:研究“怎么造系统”,核心是构造系统的步骤和过程脚本,架构是按脚本执行后的结果(比如搭积木,按“先搭底座→再搭墙体→最后封顶”的过程,成品就是积木架构)。
  3. 功能模型 🧩:把架构看成“分层的功能构件组”,下层构件向上层提供服务,比如手机 App 的“界面层→业务层→数据层”,界面层依赖业务层的服务,业务层又依赖数据层的服务,是一种特殊的框架模型。
  4. (隐含)框架模型 🏗️:核心是“通用骨架”,比如 Spring 框架,开发者不用重新设计基础结构,只需在骨架上填业务代码,功能模型就是它的“分层版”。
  5. (隐含)数据模型 📊:关注系统数据的存储、流转和处理,比如数据库的表结构设计,是很多信息系统的核心(比如电商系统的用户表、订单表)。
生活类比 🛒:把超市看成软件系统,5 种模型对应 5 种观察方式——通道模型看“顾客从进门→选货→付款→出门”的流程;过程模型看“超市装修→货架摆放→商品上架”的步骤;功能模型看“收银台(付款功能)→货架区(选货功能)→仓储区(备货功能)”的分层服务;框架模型看“超市的建筑结构(墙体、屋顶)”;数据模型看“商品库存表、顾客消费记录”。
实践应用 👨💻:开发一个简单的“学生成绩查询系统”,用功能模型设计 3 层架构:①界面层(学生输入学号);②业务层(验证学号、查询成绩);③数据层(从数据库读取成绩),每层只做自己的事,下层给上层提供服务,后期修改界面时,不用动业务逻辑和数据库代码。

🧠 2.1“4+1”视图模型 – 架构的“全景地图”

关键字:逻辑视图、开发视图、进程视图、物理视图、场景视图、静态结构、动态结构

5 种基础模型各有侧重,单独用不够全面,Kruchen 在 1995 年提出“4+1”视图模型,用 5 个视角(4 个核心视图 + 1 个场景视图)“拼出”系统的完整架构,就像用 5 张照片合成一张全景图,每个视角对应不同角色的需求。

1. 逻辑视图 – 给最终用户看的“功能蓝图”

核心关注“系统能做什么”,描述系统的功能构件和构件间的逻辑关系,不关心代码怎么写、硬件怎么部署。比如微信的逻辑视图:“聊天构件”“朋友圈构件”“支付构件”,构件间的关系是“聊天时可分享朋友圈,支付时可发红包”。

2. 开发视图 – 给编程人员看的“代码地图”

核心关注“代码怎么组织”,描述软件的模块、子系统划分和依赖关系。建议分 4~6 层子系统,且子系统只能和同层或下层通信(比如“界面层→业务层→数据层”,界面层不能直接连数据层),避免复杂依赖。比如微信的开发视图:“UI 模块”“网络请求模块”“数据库模块”,UI 模块依赖网络模块,网络模块依赖数据库模块。

3. 进程视图 – 给系统分析师看的“动态流转图”

核心关注“系统怎么运行”,描述系统的进程、线程和它们的交互(比如消息传递、共享内存),属于 动态结构。比如微信的进程视图:“主进程(显示界面)”“后台进程(接收消息)”“支付进程(处理支付请求)”,后台进程收到消息后,通过消息传递通知主进程显示消息。

4. 物理视图 – 给系统工程人员看的“硬件部署图”

核心关注“软件怎么装到硬件上”,描述系统的拓扑结构、硬件结点和软件映射关系,属于 动态结构。比如微信的物理视图:“用户手机(装微信 App)”“微信服务器(处理消息、存储数据)”“支付服务器(处理支付)”,App 的“消息构件”映射到微信服务器,“支付构件”映射到支付服务器。

5. 场景视图 – 连接 4 个视图的“桥梁”

核心关注“用户怎么用系统”,用具体场景(比如“用户登录微信→发消息→收消息”)验证 4 个核心视图的合理性,是架构设计的“起点和终点”。比如文档中的 ACS 系统场景:“电话摘机→控制器检测状态→终端分配资源→发出拨号音→用户拨号→终端分析号码→打开会话”,这个场景能覆盖逻辑、开发、进程、物理 4 个视图的核心内容。

生活类比 🏠:把“智能家居系统”看成软件,4+ 1 视图对应:①逻辑视图(能控制灯光、空调、窗帘);②开发视图(灯光控制模块、空调控制模块、通信模块);③进程视图(控制进程接收手机指令→通信进程传递指令→设备进程执行指令);④物理视图(手机→路由器→智能开关→灯光);⑤场景视图(用户回家→手机发指令→灯光打开、空调启动)。
复杂场景应用 🌐:开发“电商平台”(百万用户访问),4+ 1 视图的设计重点:①逻辑视图:聚焦“商品展示、下单、支付、物流”核心功能;②开发视图:分 6 层(UI 层、网关层、业务层、数据访问层、数据库层、缓存层),避免依赖混乱;③进程视图:设计“用户进程、订单进程、支付进程、缓存进程”,用消息队列处理高并发(比如双十一订单峰值);④物理视图:部署多台服务器(Web 服务器、应用服务器、数据库服务器、缓存服务器),避免单点故障;⑤场景视图:覆盖“用户浏览商品→加入购物车→下单→支付→查看物流”全流程,验证各视图的兼容性。

🔄 2.3 软件体系结构的生命周期模型 – 架构的“成长轨迹”

关键字:设计阶段、求精、评价度量、演化、逆向工程、再造工程、终结

软件体系结构不是“设计完就不管”,而是有完整的“生命周期”,从诞生到终结,像人的“出生→成长→成熟→衰老→死亡”,每个阶段都有核心任务。

  1. 需求阶段 📝:收集用户需求,明确系统要解决的问题,为架构设计奠定基础(比如开发“外卖系统”,需求是“用户下单、商家接单、骑手配送、支付”)。
  2. 建立框架阶段 🏗️:设计系统的整体框架(比如外卖系统的“用户端、商家端、骑手端、后台管理端”4 大模块)。
  3. 设计阶段 ✏️:对框架进行细化,确定构件的详细接口、算法和数据类型(比如用户端的“登录构件”,接口是“输入手机号 + 验证码”,算法是“验证验证码有效性”)。
  4. 求精阶段 ✨:优化架构,解决设计中的问题(比如外卖系统高峰期卡顿,增加“缓存构件”减少数据库压力)。
  5. 实施阶段 🛠️:根据架构写代码、部署系统(比如开发用户端 App、部署后台服务器)。
  6. 评价度量阶段 📏:通过系统运行情况,定性评价(比如用户体验好不好)、定量度量(比如响应时间、并发量)架构的优劣,总结经验。
  7. 演化阶段 🌱:根据新需求修改架构(比如外卖系统新增“拼单功能”,在用户端增加“拼单构件”,调整业务层逻辑)。
  8. 逆向工程 / 再造工程阶段 🔍:如果架构难以理解,通过逆向工程(从代码反推架构)或再造工程(重新设计架构)优化。
  9. 终结阶段 ⚰️:架构经过多次修改,无法满足需求且优化成本过高,用新架构替代(比如早期的“PC 端外卖系统”,被“移动端外卖系统”的新架构替代)。
实践应用 👨💻:开发“校园二手交易平台”,生命周期关键步骤:①需求阶段:收集“发布商品、搜索商品、聊天议价、交易完成”需求;②框架阶段:设计“用户端、后台管理端”;③设计阶段:细化用户端的“商品发布构件、搜索构件、聊天构件”;④求精阶段:增加“商品分类构件”提升搜索效率;⑤实施阶段:开发 App、部署服务器;⑥评价阶段:统计“App 响应时间(≤2 秒)、日活跃用户(≥1000)”;⑦演化阶段:新增“校园自提地点标注功能”;⑧若后期用户量激增,原架构卡顿,启动再造工程,重新设计高并发架构。

🤖 2.4 软件体系结构的抽象模型与关系 – 架构的“数学骨架”

关键字:构件、连接件、代数系统、映射、同构、依赖关系、范式

这部分是架构的“底层逻辑”,用抽象的概念和规则描述架构,帮我们更严谨地设计和验证架构,初学者不用死记公式,重点理解核心概念。

1. 核心概念:构件与连接件

构件 🧩:系统的“基本单元”,比如“登录构件”“支付构件”,有自己的输入、输出和功能;② 连接件 🔗:连接构件的“桥梁”,比如消息传递、函数调用(比如“登录构件”通过“函数调用”连接“数据库构件”,获取用户信息)。

2. 构件的 3 种核心运算(初学者通俗理解)

  • 顺序运算(C₁□C₂) ➡️:构件按顺序执行,比如“登录构件→查询构件”(先登录,再查询)。
  • 选择运算(C₁△C₂) ⚪⚫:按条件选一个构件执行,比如“会员登录构件△普通用户登录构件”(根据用户类型选登录方式)。
  • 循环运算(C*) 🔄:构件重复执行,比如“刷新消息构件 *”(每隔 10 秒刷新一次消息)。

3. 架构的关系:映射与依赖

映射 📌:不同架构间的“对应关系”,比如旧架构的“登录构件”对应新架构的“智能登录构件”(支持手机号、微信登录);若映射是“一对一且全覆盖”,则两个架构“同构”(结构完全一致,只是名称不同)。

依赖关系 🧵:构件间的“依赖”,比如“支付构件”依赖“订单构件”(先有订单,才能支付),分为事件依赖(一个构件的事件触发另一个构件)和实现依赖(一个构件的功能依赖另一个构件的实现),且依赖满足“传递性”(A 依赖 B,B 依赖 C,则 A 依赖 C)。

4. 架构的范式:RNF 范式

核心是“让架构更简洁、易维护”,满足 RNF 范式的架构,构件间的依赖关系清晰(顺序、分支、循环),没有冗余依赖。比如“下单构件”的实现依赖是顺序关系(“选商品→填地址→付款”),可拆分为“选商品构件;填地址构件;付款构件”,每个构件独立,后期修改地址功能时,不用动其他构件。

生活类比 🚗:把汽车看成架构,①构件是“发动机、方向盘、刹车”;②连接件是“传动轴(连接发动机和车轮)、刹车线(连接刹车和车轮)”;③顺序运算:“启动发动机→挂挡→踩油门”;④选择运算:“踩油门(加速)△踩刹车(减速)”;⑤循环运算:“转动方向盘 *”(转弯时持续转);⑥依赖关系:“刹车依赖刹车油”(事件依赖:踩刹车触发刹车油工作);⑦范式:汽车的构件按“动力系统、操控系统、制动系统”划分,依赖关系清晰,不会出现“方向盘依赖刹车油”的混乱情况。
复杂场景应用 🌐:开发“短视频平台”,用抽象模型设计架构:①构件:“视频上传构件、视频审核构件、视频推荐构件、播放构件”;②连接件:用“消息队列”连接“上传构件”和“审核构件”(上传后发消息给审核构件);③运算:“上传构件→审核构件(顺序运算);推荐构件△搜索构件(选择运算);播放记录构件 *(循环运算,持续记录播放数据);④依赖关系:“推荐构件依赖播放记录构件”(根据播放记录推荐视频);⑤范式:按“上传→审核→分发→播放”的顺序依赖设计,避免构件间交叉依赖,后期新增“视频美颜构件”时,只需插入“上传构件→美颜构件→审核构件”的顺序中,不影响其他构件。

☁️ 本章总结 – 从零学架构的“核心路径”

初学者学软件体系结构,不用一开始就啃复杂公式,核心路径是:①先懂 5 大基础模型,知道架构的“5 种观察方式”;②再掌握“4+1”视图模型,能画出系统的“全景图”;③了解生命周期,知道架构“从设计到终结”的全过程;④最后接触抽象模型,让架构设计更严谨。

记住:架构的本质是“解决问题”,不是“炫技”,无论是简单的小系统,还是复杂的大平台,好的架构都能让系统“易维护、易扩展、高性能”✨。

正文完
 0