导图社区 软件架构设计
"软件架构设计的艺术:从理论到实践的全面指南!本文涵盖软件架构的核心概念(如‘4 1’视图、质量属性)、主流风格(微服务、SOA、REST等)及关键技术(中间件、云原生、边缘计算)通过案例解析大型网站演化路径(从业务拆分布式服务),深入探讨架构评估方法(场景分析、效用树)与复用策略(DSSA、产品线)无论你是学习层次式架构设计,还是研究中台与JWT等前沿趋势,这里都能找到系统化的知识脉络。"
编辑于2025-06-27 14:46:15"探索数字时代的核心引擎:从系统工程到智能决策!本文系统梳理企业信息化与电子商务的关键模块,涵盖信息系统开发全生命周期(规划/建设/管理)、三大核心技术体系(ERP/CRM/SCM)、四类典型应用系统(MIS/DSS/ES/OAS)以及数据价值转化链条(数据湖数据仓库商业智能)特别解析智能制造与数字化转型的底层逻辑,揭示BPR与BPM对企业流程的重构价值,是理解现代企业信息架构的精准导航图"。
"软件架构设计的艺术:从理论到实践的全面指南!本文涵盖软件架构的核心概念(如‘4 1’视图、质量属性)、主流风格(微服务、SOA、REST等)及关键技术(中间件、云原生、边缘计算)通过案例解析大型网站演化路径(从业务拆分布式服务),深入探讨架构评估方法(场景分析、效用树)与复用策略(DSSA、产品线)无论你是学习层次式架构设计,还是研究中台与JWT等前沿趋势,这里都能找到系统化的知识脉络。"
社区模板帮助中心,点此进入>>
"探索数字时代的核心引擎:从系统工程到智能决策!本文系统梳理企业信息化与电子商务的关键模块,涵盖信息系统开发全生命周期(规划/建设/管理)、三大核心技术体系(ERP/CRM/SCM)、四类典型应用系统(MIS/DSS/ES/OAS)以及数据价值转化链条(数据湖数据仓库商业智能)特别解析智能制造与数字化转型的底层逻辑,揭示BPR与BPM对企业流程的重构价值,是理解现代企业信息架构的精准导航图"。
"软件架构设计的艺术:从理论到实践的全面指南!本文涵盖软件架构的核心概念(如‘4 1’视图、质量属性)、主流风格(微服务、SOA、REST等)及关键技术(中间件、云原生、边缘计算)通过案例解析大型网站演化路径(从业务拆分布式服务),深入探讨架构评估方法(场景分析、效用树)与复用策略(DSSA、产品线)无论你是学习层次式架构设计,还是研究中台与JWT等前沿趋势,这里都能找到系统化的知识脉络。"
软件架构设计
软件架构的概念 (软件体系结构)
架构的本质
为软件系统提供了一个结构、行为和属性的高级抽象
软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束
架构的作用
项目干系人进行交流的手段
可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础
降低成本、改进质量、按时和按需交付产品的关键因素
架构设计就是需求分配,即将满足需求的职责分配到组件上。
三个方面的重要影响
利益相关人员之间的交流
系统设计的前期决策
可传递的系统级抽象
架构描述语言(ADL)
本质
一种形式化语言,在底层语义模型的支持下,为软件系统的概念体 系结构建模提供了具体语法和概念框架
分类
C2SADL【基于组件和消息的软件架构描述语言】
Wright【分布、并发类型的架构描述语言】
ACME【架构互换语言】
UniCon【基于组件和连接的架构描述语言】
Rapide【基于事件的架构描述语言】
其他【Darwin、MetaH、Aesop、Neaves、SADL、XADL】
基本要素
构件:计算或数据存储单元。
连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则。
架构配置:描述体系结构的构件与连接件的连接图。
“4+1”视图 (视角与视图)

基于架构的软件开发方法 (ABSD)
概念
ABSD方法是架构驱动,即强调由业务【商业】、质量和功能需求的组合驱动架 构设计
ABSD方法有三个基础
第一个基础是功能的分解。 在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术
第二个基础是通过选择架构风格来实现质量和业务需求;
第三个基础是软件模板的使用
视角与视图:从不同的视角来检查,所以会有不同的视图
用例用来捕获功能需求、特定场景【刺激、环境、响应】用来捕获质量需求
开发过程
ABSD能很好的【支持软件重用】
ABSD方法是一个自顶向下,递归细化的方法。
软件系统的体系结构通过该方法得到细化,直到能产生软件构件和类。
架构文档化
输出内容
架构规格说明
测试架构需求的质量设计说明书
三大注意事项
文档要从使用者的角度进行编写
必须分发给所有与系统有关的开发人员
且必须保证开发者手上的文档是最新的
架构复审【架构评估】
目的
标识潜在的风险,及早发现架构设计中的缺陷和错误
软件架构风格
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。 软件架构风格是指描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义。 
数据流风格

核心思想
通过数据流驱动系统执行,组件是数据处理单元,连接件是数据流通道
子风格

批处理风格(大量整体数据,无需用户交互)
管道-过滤器风格(流式数据、弱用户交互)
优点
松耦合
良好的重用性/可维护性
可扩展性
良好的屏蔽性
支持并行
缺点
交互性较差
复杂性较高
性能较低 (每个过滤器都需要处理和合成数据)
实例
传统编译器
网络报文处理
调用/返回风格

核心思想
通过显示调用链控制程序执行流程
子风格
主程序/子程序(面向过程)
面向对象(对象的方法调用)
分层架构(层与层之前的方法调用)
优点
良好的重用性
可维护性好
可扩展性好,支持递增设计
缺点
并不是每个系统都方便分层
很难找到一个合适的、正确的层次抽象方法
不同层次之间耦合度高的系统很难实现
特点
各个层次的组件形成不同功能级别的虚拟机
多层相互协作且实现透明
独立构件风格
 
核心思想
通过事件/消息实现组件异步协作
子风格

进程间通信
事件驱动系统(隐式调用)
优点
松耦合
良好的重用性
可修改性
可扩展性
缺点
特点
系统由若干子系统构成且成为一个整体
系统有统一的目标,子系统有主从之分
每一个子系统都有自己的事件收集和处理机制
虚拟机风格
核心思想
通过解释引擎执行自定义逻辑
子风格
解释器(适用于需要自定义规则的场景)

规则系统(在解释器的基础上增加经验规则,适用于专家系统)

优点
可灵活应对自定义场景
缺点
复杂度较高
以数据为中心(仓库风格)
核心思想
以数据存储作为系统核心枢纽
子风格
数据库系统(以数据为中心)

黑板系统

优点
可更改性和可维护性
可重用的知识源
容错性和健壮性
缺点
测试困难
不能保证有好的解决方案
难以建立好的控制策略
低效
开发困难
缺少并行机制
特点
在以数据为中心的基础上,使用中心数据触发业务逻辑部件
实例
语音识别
图像处理
知识处理
超文本系统
闭环控制架构(过程控制)
适用场景
嵌入式系统,用于解决简单闭环控制问题
经典应用
空调温控、定速巡航
C2风格
基本规则
构件和连接件都有一个顶部和一个底部
构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连。
一个连接件可以和任意数目的其他构件和连接件连接。
当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
模型驱动架构(MDA)
概念
使用模型完成软件的分析、设计、构建、部署、维护等各开发活动
主要目标
Portability(可移植性)
Interoperability(互通性)
Reusability(可重用性)
核心模型
计算无关模型(CM)
对某具体行业内一个项目的业务需求及其系统功能需求进行分析
平台独立模型(PM)
具有高抽象层次、独立于任何实现技术的模型。
平台相关模型(PSM)
为某种特定实现技术量身定做,让你用这种技术中可用的实现构造来描述系统的模型。PIM会被变换成一个或多个PSM。
代码Code
用源代码对系统的描述(规约)。每个PSM都将被变换成代码。
软件架构复用
概念
【软件复用】是一种系统化的软件开发过程, 通过识别、分析、分类、获取和修改软件实体,以便在不同软件开发过程中重复使用
软件开发过程中重复使用相同或相似【软件元素】的过程
历史发展路线
复用的纬度
水平(横向)复用
不分行业领域,通用
垂直(纵向)复用
分行业领域,专用
复用类型
机会复用
开发过程中,只要发现有可复用资产,就对其进行复用
系统复用
开发之前,要进行规划,以决定哪些需要复用
可复用的资产范围
需求、架构设计、元素、建模与分析、测试、项目规划、 过程、方法和工具、人员、样本系统、缺陷消除。
特定领域软件机构(DSSA)
基本概念
定义
特定领域软件架构以一个特定问题领域为对象,形成由领域参考模型、参考需求、参考架构等组成的开发基础架构,支持一个特定领域中多个应用的生成。
类型
垂直域:相同领域,深入
水平域:不同领域,平移
基本活动及产出物
参与人员
领域专家
有经验的用户、从事该领域中系统的需求分析、设计、实现以及项目管理的有经验的软件工程师等
域专家的主要任务包括提供关于领域中系统的需求规约和实现的知识
领域分析人员
领域分析人员应由具有知识工程背景的有经验的系统分析员来担任
领域设计人员
领域设计人员应由有经验的软件设计人员来担任
领域实现人员
领域实现人员应由有经验的程序设计人员来担任
三层次模型
软件产品线
软件架构评估
质量属性
性能
定义
性能是指软件系统及时提供相应服务的能力,如速度、吞吐量和容量等的要求; 性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。
示例
同时支持1000并发
响应时间小于1s;
显示分辨率达到4K。
性能战术
资源需求
提高计算效率
减少计算开销
管理事件率
控制采样频率
资源管理
引入并发
维持多个副本
增加可用资源
资源仲裁
资源调度策略
先进/先出(队列)
固定优先级
动态优先级
静态调用
可用性
定义
系统在一定时间内正常工作时间所占的比例。经常用两次故障之间的 时间长度或在出现故障时系统能够恢复正常的速度来表示 可用性会受到系统错误,恶意攻击,高负载等问题的影响。
示例
主服务器故障,1分钟内切换至备用服务
系统故障,1小时内修复;
系统支持7×24小时工作。
可用性战术
错误监测
命令/响应(ping/echo)
心跳
异常
错误恢复
表决
冗余【主动/被动】
备件
错误预防
进程监视器
事务
从服务器删除
安全性
定义
指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力 安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。 安全性又可划分为机密性【信息不泄露给未授权的用户】、完整性【防止信息被篡改】、不可否认性【不可抵赖】及可控性【对信息的传播及内容具有控制的能力】等特性。
示例
可抵御SQL注入攻击;
对计算机的操作都有完整记录;
用户信息数据库授权必须保证99.9%可用。
安全性战术
抵抗攻击
身份验证
用户授权
数据加密
数据完整性
限制暴露
限制访问
检测攻击
入侵检测
从攻击中恢复
识别:审计追踪
恢复:冗余【与可用性重叠】
可修改性
定义
指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性
包含四个方面
可维护性
可扩展性
结构重组
可移植性
示例
更改系统报表模块,必须在2人周内完成;
对Wb界面风格进行修改,修改必须在4人月内完成。
可修改性战术
局部化修改
维持语义一致性
预期期望的变更
泛化模块
限制可能的选择
抽象通用服务
防止连锁反应
隐藏信息
维持现有的接口
限制通信路径
使用仲裁者
推迟绑定时间
运行时注册
配置文件
多态
组件更换
遵守已定义的协议
易用性
定义
易用性关注的是对用户来说完成某个期望任务的容易程度和系统所提供的用户支持的种类
示例
界面友好;
新用户学习使用系统时间不超过2小时。
可测试性
定义
软件可测试性是指通过测试揭示软件缺陷的容易程度
示例
提供远程调试接口,支持远程调试。
开发期 质量属性
易理解性
指设计被开发人员理解的难易程度
可重用性
指重用软件系统或某一部分的难易程度
可测试性
对软件测试以证明其满足需求规范的难易程度
可维护性
修改缺陷、增加功能、提高质量属性时,识别修改点并修改的难易程度
可扩展性
软件因适应新需求或需求变化而增加新功能的能力,也称为灵活性
可移植性
将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度
运行期 质量属性
性能
性能是指软件系统及时提供相应服务的能力,如速度、吞吐量和容量等的要求; 性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。
安全性
指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力 安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。 安全性又可划分为机密性【信息不泄露给未授权的用户】、完整性【防止信息被篡改】、不可否认性【不可抵赖】及可控性【对信息的传播及内容具有控制的能力】等特性。
可伸缩性
用户数和数据量增加时,软件系统维持高服务质量的能力。例如,通过增加服务器来提高能力
互操作性
指本软件系统与其他系统交换数据和相互调用服务的难易程度
可靠性
软件系统一定时间内持续无故障运行的能力
可用性
系统在一定时间内正常工作时间所占的比例。经常用两次故障之间的 时间长度或在出现故障时系统能够恢复正常的速度来表示 可用性会受到系统错误,恶意攻击,高负载等问题的影响。
鲁棒性
软件系统在非正常情况(非法操作、软硬件故障等)下仍能够正常运行的能力, 也称健壮性或容错性
敏感点
敏感点是一个或多个构件(和/或构件之间的关系)的特性,它能影响系统的某个质量属性。
权衡点
权衡点是影响多个质量属性的特性,是多个质量属性的敏感点
风险点
风险点是指架构设计中潜在的、存在问题的架构决策所带来的隐患。
非风险点
非风险点是指不会带来隐患,一般以“XXX要求是可以实现(或接受)的”方式表达。
架构评估方法
评估方法
基于调查问卷(检查表)的方式
基于度量的方式
基于场景的方式
质量属性场景
定义
从风险承担者的角度与系统交互的简短描述,它通常作为描述质量属性的手段
实例
6个构成部分
刺激源(Source)
某个生成该刺激的实体(人、计算机系统或者任何其他刺激器)
刺激(Stimulus)
该刺激是当刺激到达系统时需要考虑的条件
制品(Artifact)
某个制品被激励。这可能是整个系统(或系统的一部分)
环境(Environment)
该刺激在某些条件内发生。当激励发生时,系统可能处于过载、运行或者其他情况
响应(Response)
该响应是在激励到达后所采取的行动
响应度量(Measurement)
当响应发生时,应当能够以某种方式对其进行度量,以对需求进行测试
可用性质量属性场景描述
可修改性质量属性场景描述
性能质量属性场景描述
可测试性质量属性场景描述
易用性质量属性场景描述
安全性质量属性场景描述
基于场景的评估方法
软件架构分析法(SAAM)
定义
最初关注可修改性,后扩充到可移植性、可扩充性等
最早形成文档并得到广泛使用的软件架构分析方法。
架构权衡分析法ATAM
定义
由SAAM发展而来,主要针对:性能、实用性(可用性)、安全性、可修改性。
成本效益分析法(CBAM)
定义
在ATAM基础上建立的,软件的“经济”模型
质量效用树
构建与中间件技术
构件
构件的定义
软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意地组装
构件是某系统中有价值的、几乎独立的并可替换的一个部分,它在良好定义的体系结构语境内满足某清晰的功能
构件是一个独立发布的功能部分,可以通过其接口访问它的服务
构件的复用步骤
1.检索与提取构件
基于关键字的检索
特点
树形或有向无回路图结构
刻面检索法
特点
利用Faceti描述构件执行的功能、被操作的数据、构件应用的语境或任意其他特征
超文本检索法
特点
按照人类的联想思维方式任意跳转到包含相关概念或构件的文档
2.理解与评价构件
要复用构件,准确地理解构件至关重要。特别是对构件修改使用时。
为达到目的,必须要求构件的开发过程遵循公共标准。
一般构件库的文档中全面而准确地说明以下内容:
构件的功能与行为
相关的领域知识
可适应性约束条件与例外情形
可以预见的修改部分及修改方法
3.修改构件
理想状态是直接复用构件库中现成的构件,但大多数情况下,必须对构件进行或多或少的修改,以应对新需求。
为了减少构件修改的工作量,要求开发人员尽量使构件的功能、行为和接口设计更为抽象化、通用化和参数化。这样,复用者即可通过对实参的选取来调整构件的功能或行为。如果这种调整仍不足以使构件适用于新系统,复用者就必须借助设计信息和文档来修改构件。
构件库中若无可修改使用的构件,则按新需求开发构件,并存入构件库。
4.组装构件
组装的三种方式
基于功能的组装
采用子程序调用和参数传递的方式将构件组装起来
基于数据的组装
仍然是传统的子程序调用与参数传递。但它所依赖的软件设计方法不再是功能分解,而是面向数据的设计方法,例如,Jackson系统开发方法。
面向对象的组装
如果从类库中检索出来的基类能够完全满足新系统的需求,则可以直接应用。否则,必须以基类为父类,生成相应的子类,以满足新系统的需求
构件的分类
从构件的外部形态来看,构件可分为5类
独立而成熟的构件
已在实际运行环境多次检验,该类构件隐藏了所有接口,用户只需用规定好的命令进行使用。例如,数据库管理系统和操作系统等
有限制的构件
有限制的构件提供了接口,指出了使用的条件和前提,这种构件在装配时,会产生资源冲突、覆盖等影响,在使用时需要加以测试。例如,各种面向对象程序设计语言中的基础类库等
适应性构件
适应性构件进行了包装或使用了接口技术,把不兼容性、资源冲突等进行了处理,可以直接使用。这种构件可以不加修改地使用在各种环境中。例如ActiveX等
装配的构件
装配(assemble)的构件在安装时,已经装配在操作系统、数据库管理系统或信息系统不同层次上,使用胶水代码(glue code)就可以进行连接使用。目前一些软件商提供的大多数软件产品都属这一类
可修改的构件
对原构件修改错误、增加新功能,可以利用重新“包装”或写接口来实现构件的版本替换。这种构件在应用系统开发中使用得比较多
中间件
定义
一类构件
一类系统软件
简化结构、屏蔽差异、利于复用
采用中间件技术的优点
面向需求
即设计师集中精力于业务逻辑本身
业务的分隔和包容性
应用开发人员可以按照不同的业务进行功能的划分,体现为不同的接口或交互模式
设计与实现隔离
构件对外发生作用或构件间的交互,都是通过接口进行的,构件使用者只需要知道构件的接口,而不必关心其内部实现,这是设计与实现分离的关键
隔离复杂的系统资源
架构很重要的一个功能就是将系统资源与应用构件隔离,这是保证构件可复用甚至“即插即用”的基础,与中间件的意图也是一致的
符合标准的交互模型
中间件则实现了架构的模型,实现了标准的协议
软件复用
中间件提供了构件封装、交互规则、与环境的隔离等机制,这些都为软件复用提供了方便的解决方案
提供对应用构件的管理
基于中间件的软件可以方便地进行管理,因为构件总可以通过标识机制进行划分
中间件的分类
构件标准
CORBA
伺服对象(Servant)
CORBA对象的真正实现,负责完成客户端请求
对象适配器(Object Adapter)
用于屏蔽ORB内核的实现细节,为服务器对象的实现者提供抽象接口,以便他们使用ORB内部的某些功能
对象请求代理(Object Request Broker)
解释调用并负责查找实现该请求的对象,将参数传给找到的对象,并调用方法返回结果。客户方不需要了解服务对象的位置、通信方式、实现、激活或存储机制。
J2EE(EJB)
会话Bean
实现业务逻辑,负责完成服务端与客户端的交互
实体Bean
实现O/R映射,简化数据库开发工作
消息驱动Bean
处理并发与异步访问
DNA 2000
案例扩展
层次式架构设计理论与实践
C/S架构与B/S架构
常用层次式架构
MVC架构风格
层次
Model(模型)
应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型能为多个视图提供数据。提高应用的可重用性
View(视图)
用户看到并与之交互的界面。接收用户输入数据,向用户展示数据
Controller(控制器)
用户界面与Model的接口。解释视图的输入,将其解释为系统能够理解的对象,同时识别用户运作,将其解释为对模型特定方法的调用。处理来自于模型的事件和模型逻辑执行的结果,调用适当的视图为用户提供反馈。
J2EE体系结构中
视图(View):JSP
控制(Controller):Servlet
模型(Model):Entity Bean、Session Bean
MVP架构风格 (MVC的变种)
优点
模型与视图完全分离,可以修改视图而不影响模型
可以更高效地使用模型,因为所有交互都发生在一个地方【Presenter】内部
可以将一个Presenter)用于多个视图,而不需要改变Presenter的逻辑
如果把逻辑放在Presenter中,就可以脱离用户接口来测试这些逻辑(单元测试)
MVVM架构风格
RIA架构风格
优点
反应速度快
易于传播
交互性强
表现层UIP设计思想
中间层
业务逻辑层框架
业务逻辑层工作流设计
数据访问模式
在线访问
每个数据库操作都会通过数据库连接不断地与后台的数据源进行交互
Data Access Object
底层数据访问操作与高层业务逻辑分离
Data Transfer Object
跨不同的进程或是网络的边界来传输数据
离线数据模式
从数据源获取数据后,存放到本地处理
对象/关系映射
应用系统中的对象与数据库中的数据表形成映射关系
数据访问层设计
物联网分层架构
层次
应用层
解决信息处理和人机交互问题应用服务智能终端
平台层
操作系统软件开发设备管理平台连接管理平台
网络层
传递信息和处理信息、网络、通信标准/协议
感知层
解决数据获取问题、传感器、芯片、通信模组
大数据分层架构
基于服务的架构(SOA)
Web Service(WEB服务)
REST(表述性状态转移)
定义
REST(Representational State Transfer,表述性状态转移)是一种通常使用HTTP和 XML进行基于Wb通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。
5个原则
网络上的所有事物都被抽象为资源。
每个资源对应一个唯一的资源标识(反过来不成立)
通过通用的连接件接口对资源进行操作。
对资源的各种操作不会改变资源标识。
所有的操作都是无状态的。
相关概念
资源:如架构课程订单
表述:资源某一时间的状态,呈现形式有HTML、JSON、XML
状态转移:使用GET、POST等方法
超链接:通过超链接可与其它资源联系
ESB(企业服务总线)
微服务
架构模式方案
优点
复杂应用解耦
小服务(且专注于做一件事情)
化整为零,易于小团队开发
独立
独立开发
独立测试及独立部署 (简单部署)
独立运行 (每个服务独立在其独立进程中)
技术选型灵活
支持异构(如:每个服务使用不同数据库)
容错
故障被隔离在单个服务中,通过重试、平稳退化 等机制实现应用层容错
松耦合,易扩展
可根据需求独立扩展
缺点
分布式环境下的数据一致性【更复杂】
测试的复杂性【服务间依赖测试】
运维的复杂性
微服务与SOA
云计算
概念
是集合了大量计算设备和资源,对用户屏蔽底层差异的分布式处理架构,其用户与提供实际服务的计算资源是相分离的。
优点
超大规模
虚拟化
高可靠性
高可伸缩性
按需服务
成本低【前期投入低、综合使用成本也低】
按照服务类型分类
SaaS【软件即服务】
基于多租户技术实现,直接提供应用程序
PaaS【平台即服务】
虚拟中间件服务器、运行环境和操作系统
laaS【基础设施即服务】
包括服务器、存储和网络等服务
按照部署方式分类
公有云
面向互联网用户需求,通过开放网络提供云计算服务
私有云
面向企业内部提供云计算服务
混合云
兼顾以上两种情况的云计算服务
云计算架构
层次
管理层
提供对所有层次云计算服务的管理功能
用户访问层
方便用户使用云计算服务所需的各种支撑服务,针对每个层次的云计算服务都需要提供相应的访问接口
应用层
提供软件服务,如:财务管理,客户关系管理,商业智能。
平台层
为用户提供对资源层服务的封装,使用户可以构建自己的应用。
资源层
提供虚拟化的资源,从而隐藏物理资源的复杂性。如:服务器,存储。
云原生架构
概念
【云原生(Cloud Native)】一开始就是基于云环境、专门为云端特性而设计,可充分利用和发挥云平台的弹性+分布式优势,最大化释放云计算生产力。
设计原则
服务化原则
使用微服务
弹性原则
根据业务状态自动伸缩
可观测原则
通过日志、链路跟踪和度量
自动化原则
自动化交付等
韧性原则
面对异常的抵御能力
零信任原则
默认不信任网络内部和外部的任何设备/人/系统
架构持续演进原则
业务高度迭代情况下架构与业务的平衡
架构模式

服务化架构模式
微服务,服务拆分使得维护压力大增
Mesh化架构模式
把中间件(RPC、缓存、异步消息)架构从业务中分离,由Mesh进程完成
Serverless模式
适用于由事件驱动的计算任务
存储计算分离模式
各类暂态数据(session等)用云服务保存
分布式事务模式
用于解决微服务中多数据源事务问题
可观测架构
包括Logging、Tracing、Metrics
事件驱动架构
一种应用/组件间的集成架构模式
反模式
庞大的单体应用
单体应用硬拆为微服务
缺乏自动化能力的微服务
容器技术
资源调度
应用部署与管理
自动修复
服务发现与负载均衡
弹性伸缩
声明式API
可扩展性架构
可移植性
虚拟机技术与容器技术的对比
微服务设计约束
微服务个体约束
每个微服务都是独立的,修改一个微服务不能影响另一个微服务
微服务与微服务之间的横向关系
通过第三方服务注册中心来满足服务的可发现性
微服务与数据层之间的纵向约束
数据是微服务的“私产”,访问时需要通过微服务
全局视角下的微服务分布式约東
高效运维整个系统
边缘计算
定义
是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。
本质
计算处理智能的本地化
类型
云边缘
云服务在边缘侧的延伸
边缘云
在边缘侧构建中小规模云服务能力
边缘网关
以云化技术与能力重构原有嵌入式网关系统
边云协同的分类
资源协同
边缘节点有基础设施资源的调度管理能力,可与云端协同
数据协同
边缘节点采集数据并初步分析,再发给云端做进一步处理
智能协同
分布式智能,云端做集中式模型训练,再将模型下发到边缘节点
应用管理协同
边缘节点提供应用部署与运行环境,云端主要提供应用开发、测试环境
业务管理协同
边缘节点提供模块化、微服务化的应用/数字孪生/网络等应用实例;云端主要提供按照客户需求实现应用/数字孪生/网络等的业务编排能力
服务协同
边缘节点按照云端策略实现部分ECSaaS服务,通过ECSaaS与云端SaaS的协同实现面向客户的按需SaaS服务;云端主要提供SaaS服务在云端和边缘节点的服务分布策略,以及云端承担的SaaS服务能力。
Web应用服务器
两层意思
WEB服务器
其职能较为单一,就是把浏览器发过来的Request请求,返回Html页面
应用服务器
进行业务逻辑的处理。如:EJB、Corba、COM+
常见的Web应用服务器
Apache
Web服务器,市场占有率60%左右。它可以运行在几乎所有的Unix、Windows、Linux系统平台上
IIS
早期Web服务器,目前小规模站点仍有应用
Tomcat
开源、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。
JBOSS
JBOSS是基于J2EE的开放源代码的应用服务器。一般与Tomcat或Jetty:绑定使用
Web Sphere
一种功能完善、开放的Web应用程序服务器,它是基于Java的应用环境,用于建立、部署和管理Interneti和Intranet Web应用程序
WebLogic
BEA WebLogic Server是一种多功能、基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。
Jetty
Jetty是一个开源的servlet容器,它为基于Java的web容器。
JWT
定义
JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。 它是一种轻量级的、基于JSON的令牌,可以在客户端和服务器之间传递信息。
组成
头部
包含令牌类型和所使用的算法
载荷
包含用户信息和其他元数据
签名
用于验证令牌的完整性和真实性
应用场景
信息交换
授权
特点
不需要服务器端存储状态,安全地传递【非敏感信息】
响应式Web设计
定义
响应式WEB设计是一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。
方法与策略
流式布局和弹性化设计
使用相对单位,设定百分比而非具体值的方式设置页面元素的大小
响应式图片
不仅要同比的缩放图片,还要在小设备上降低图片自身的分辨率
中台
定义
中台是一套结合互联网技术和行业特性,将企业核心能力以共享服务形式沉淀,成“大中台、小前台”的组织和业务机制,供企业快速低成本的进行业务创新的企业架构。中台又可以进一步细分,比如业务中台、数据中台、XX中台。本质上,都是对企业通用进行业务创新的企业架构能力在不同层面的沉淀,并对外能力开放
中台的践行者
Supercell
芬兰移动游戏巨头,2015年世界游戏前10占5席,员工仅200多人,因使用中台, 具有小团队快速开发能力,后被腾讯以86亿美金收购
阿里
2015年参观Supercell,而后推行中台。
分类
业务中台
提供重用服务,例如学员中心、课程中心之类的开箱即用可重用能力
数据中台
定义
提供数据整合分析能力,帮助企业从数据中学习改进,调整方向
必备的4个核心能力
数据汇聚整合能力
数据提纯加工能力
数据服务可视化
价值变现方面
技术中台
提供技术重用组件能力,帮助解决基础技术平台的复用。如:中间件、分布式存储、Al、负载均衡等基础设施
常见架构分析
大型网站系统架构演化

第一阶段:单体架构
第二阶段:垂直架构
第三阶段:使用缓存改善网站性能
常见的缓存技术
Redis
分布式存储方案
主从(Master/Slave)模式
核心特点
一主多从,故障时手动切换
哨兵(Sentinel)模式
核心特点
有哨兵的一主多从,主节点故障自动选择新的主节点
集群(Cluster)模式
核心特点
分节点对等集群,分slots,不同slots的信息存储到不同节点
集群切片的常用方式
客户端分片
中间件实现分片
客户端服务端协作分片
数据分片方案
范围分片
分片方式
按数据范围值来做分片
说明
例:按用户编号分片,0-999999映射到实例A; 1000000-1999999映射到实例B
哈希分片
分片方式
通过对key进行hash运算分片
说明
可以把数据分配到不同实例,这类似于取余操作,余数相同的,放在一个实例上。
一致性哈希分片
分片方式
哈希分片的改进
说明
利于扩展节点,可以有效解决重新分配节点带来的无 法命中问题
常用数据类型
String(字符串)
特点
存储二进制,任何类型数据,最大512MB
示例
缓存,计数,共享Session
Hash (字典)
特点
无序字典,数组+链表,适合存对象 Key对应一个HashMap。针对一组数据
示例
存储、读取、修改用户属性
List (列表)
特点
LinkedList:双向链表,有序,增删快,查询慢
ArrayList:数组方式,有序,增删慢,查询快
示例
消息队列,文章列表 记录前N个最新登录的用户ID列表
Set (集合)
特点
键值对无序,唯一 增删查复杂度均为0(1),支持交/并/差集操作
示例
独立IP,共同爱好,标签
Sorted Set 【Zset] (有序集合)
特点
键值对有序,唯一,自带按权重排序效果
示例
排行榜
数据淘汰算法
数据持久化
RDB
传统数据库中快照的思想。指定时间间隔将数据进行快照存储
AOF
传统数据库中日志的思想,把每条改变数据集的命令追加到AOF文件末尾,这样出问题了,可以重新执行AOF文件中的命令来重建数据集。
常见问题
缓存雪崩
解决方案
使用锁或队列
保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上
为key设置不同的缓存失效时间
在固定的一个缓存时间的基础上+随机一个时间作为缓存失效时间
二级缓存
设置一个有时间限制的缓存+一个无时间限制的缓存。避免大规模访问数据库
缓存穿透
定义
查询无数据返回->直接查数据库
解决方案
如果查询结果为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了。设置一个不超过5分钟的过期时间,以便能正常更新缓存
设置布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力
布隆过滤器
作用
布隆过滤器用于快速识别1个元素不在一个集合中
原理
通过一个长二进制向量和一系列随机映射函数来记录与识别某个数据是否在一个集合中
缓存预热
定义
系统上线后,将相关需要缓存数据直接加到缓存系统中
解决方案
直接写个缓存刷新页面,上线时手工操作
数据量不大时,可以在项目启动的时候自动进行加载
定时刷新缓存
缓存更新
定时清理过期的缓存
当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。
缓存降级
降级的目的是保证核心服务可用,即使是有损的,而且有些服务是无法降级的(如电商的购物流程等); 在进行降级之前要对系统进行梳理,从而梳理出哪些必须保护,哪些可降级。
MemCache
Squid
三种经典缓存使用模式
Cache-Aside pattern【旁路缓存摸式】
定义
将缓存的读取和更新操作与数据库的操作分开处理。
适用场景
读多写少、更新不频繁、对数据一致性要求不是非常严格、高并发下的读性能优化
优点
按需加载数据到缓存,减少数据库的直接访问次数,提高性能。
缺点
存在一致性问题。
数据读取操作步骤
1、根据key从缓存读取
2、若缓存中没有,则根据key在数据库中查找
3、读取到“值”之后,更新缓存
数据写入操作步骤
1、根据key值写数据库
2、根据key删除缓存
Read-Through/Write-Through【读写穿透】
定义
将缓存与数据库紧密结合,使得应用程序在读写数据时都通过缓存层进行操作。
优点
数据一致性更好、简单操作、读写效率高
缺点
性能受限、依赖性强、实现复杂
数据读取操作步骤(Read Through)
1、查询缓存:应用程序首先尝试从缓存中查询数据。
2、缓存未命中:如果缓存中没有找到数据(缓存未命中),缓存层会代表应用程序去数据库查询数据。
3、加载到缓存:查询到的数据会被写入缓存,以便之后的请求 可以直接从缓存中读取
4、返回数据:缓存层将查询到的数据返回给应用程序。
数据写入操作步骤(Write-Through)
1、写入数据库:应用程序通过缓存层直接写入数据库。
2、同步更新缓存:在写入数据库的同时,缓存层也会更新缓存中的数据,确保缓存和数据库的数据一致性。
3、返回结果:写入操作完成后,缓存层将结果返回给应用程序。
Write-Behind【异步缓存写入】
定义
本机制数据先写入缓存,再异步批量写入数据库。
第四阶段:使用服务集群改善网站并发处理能力
集群带来的问题
用户的请求由谁来转发到具体的应用服务器
用户如果每次访问到的服务器不一样,那么如何维护session的一致性
负载均衡技术
应用层(OSI七层模型)负载均衡
HTTP重定向
定义
HTTP重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的群。
特点
实现简单,但性能较差
反向代理服务器
定义
在用户的请求到达反向代理服务器时(已经到达网站机房),由反向代理服务器根据算法转发到具体的服务器。常用的apache、nginx都可以充当反向代理服务器
特点
部署简单,但代理服务器可能成为性能的瓶颈。
传输层(OSI七层模型)负载均衡
DNS域名解析负载均衡
定义
子主DNS域名解析负载均衡就是在用户请求DNS服务器,获取 域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP题
特点
效率比HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障 不能及时通知DNS,而且DNS负载均衡的控制权在域名服务商那里,网站无法做更多的改善和更强大的管理
基于NAT的负载均衡
定义
基于NAT的负载均衡将一个外部IP地址映射为多个IP地址,对每次连接请求动态地转换为一个内部节点的地址
特点
技术较为成熟,一般在网关位置,可以通过硬件实现。像四层交换机一般就采用 了这种技术。
算法
静态算法(不考虑动态负载)
轮转算法
轮流将服务请求(任务)调度给不同的节点(即:服务器)
加权轮转算法
考虑不同节点处理能力的差异
源地址哈希散列算法
根据请求的源P地址,作为散列键从静态分配的散列表找出对应的节点
目标地址哈希散列算法
根据请求目标P做散列找出对应节点
随机算法
随机分配,简单,但不可控
动态算法(考虑动态负载)
最小连接数算法
新请求分配给当前活动请求数量最少的节点,每个节点处理能力相同的情况下
加权最小连接数算法
考虑节点处理能力不同,按最小连接数分配
加权百分比算法
考虑了节点的利用率、硬盘速率、进程个数等,使用利用率来表现剩余处理能力
硬件负载均衡
F5
软件负载均衡
LVS、Nginx、HAproxy
有状态与无状态
分类
有状态服务(stateful service)
与无状态相反,它会在自身保存一些数据,先后的请求是有关联的
无状态服务(stateless service)
对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息。
session共享机制
第五阶段:数据库读写分离
主从数据库结构特点
一般:一主多从,也可以多主多从
主库做写操作,从库做读操作
主从复制步骤
1、主库(Master):更新数据完成前,将操作写入binlog日志文件
2、从库(Slave)打开I/O线程与主库连接,做binlog dump process,并将事件写入中继日志。
3、从库执行中继日志事件,保持与主库一致。
用缓存缓解读库的压力
第六阶段:使用反向代理和CDN加速网站访问
CDN
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。
第七阶段:使用分布式文件系统和数据库系统
第八阶段:使用NoSQL和搜索引擎
第九阶段:业务拆分
第十阶段:分布式服务