系统架构师·案例分析相关知识点
一、架构风格
软件架构风格的定义:(组织方式、惯用模式)
软件架构风格是一种描述了特定软件系统的组织方式的惯用模式;组织方式则描述了系统的组成构件以及这些构件的组织形式;惯用模式则反映众多软件系统共有的结构和语义。
1、微服务:微服务架构是一种分布式系统架构,将一个应用程序拆分为一组小型的、独立的服务,每个服务都围绕着特定的业务功能构建,并通过轻量级通信机制进行通信。
与单体架构相比的优缺点:
优点:功能的扩展性更强、部署的灵活性更好、业务应用的技术多样性更丰富、运维层面可做到故障隔离、代码开发易于理解和维护;
缺点:由于额外的通信机制会导致系统存在一些潜在的性能问题;分布式系统运维管理起来相对更复杂,增加了一定量工作;以及数据一致性的问题。
2、管道-过滤器 VS 仓库:

管道-过滤器风格通过顺序结构或有限的循环结构进行交互,而数据仓储通过星型的间接方式来完成交互。
管道-过滤器风格主要是以数据流而仓库则以文件或模型的数据结构。
管道-过滤器风格是以数据驱动,仓库则以业务功能驱动。
管道-过滤器风格的扩展方式通过接口适配,而仓库则需要与数据仓储进行数据/模型适配。
3、基于规则 VS 面向对象:
基于规则的架构风格,是以数据的方式定义规则,可依据不同的业务场景动态改变,扩展和灵活性较强,但由于需要实时解释规则,所以性能较差。Drools规则引擎实战
而面向对象的架构风格,是以硬编码的方式将业务规则封装为对象,在系统启动时加载,扩展和灵活性较差,但性能较好,不过当加入新的业务规则场景时,需要在修改后重启系统。
4、面向服务的架构(SOA):
面向服务的体系架构(SOA)是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通信。它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合。
SOA能帮助企业系统架构设计者以更迅速、更可靠、更高重用性设计整个业务系统架构,基于SOA的系统能够更加从容地面对业务的急剧变化。

5、架构设计过程:
(1)解释器架构风格:
为......(业务场景)定义某种语言,并描述其语法语义;
实现解释器对该语言进行解释;
生成对应的脚本语言程序;
(2)隐式调用架构风格:
为....(业务场景)定义一个事件;
实现.......(业务功能)的函数;
维护一个事件注册表,将该事件和这个功能函数相关联;
当xxxx监听到事件时,查找事件注册表,从而触发函数,实现xxx功能。
二、质量效用树
关键的质量属性有7种:
功能性:指系统能完成所期望工作的能力。
性能:指系统的响应能力,即要经过多长时间对某个事件作出响应,或在某段时间内系统所能处理事件的个数。
可用性:指系统能正常运行的时间比例,或者在意外或错误的情况下,能维持软件系统功能的基本能力。
安全性:指系统向合法用户体提供服务的同时能够阻止非授权用户使用的企图。
可修改性:能够快速地以较高性价比对系统进行变更的能力。
可测试性:指软件发现故障并隔离、定位问题的能力特性,以及在一定时间和成本下,进行测试设计、和测试执行的能力。
其他:兼容性、易用性、可维护性等等。
实现质量属性对应的架构策略:
性能:增加计算资源、减少计算复杂度、资源管理(并发)、资源调度(队列)
安全性:授权认证、限制访问、入侵检测、信息审计、记录追踪等等
可用性:Ping/Echo检测、心跳机制、主动冗余等
可修改性:软件模块泛化、使用中介、延迟绑定等
质量属性六元素:
刺激源、刺激、环境;
制品、响应、响应度量。

可靠性的技术手段(架构策略):
1.ping/echo检测:通过发送ICMP回显请求报文来检测网络的连通性。通过检查应答数据包,判断目标主机是否可达,并且获取连接的丢包率和平均往返时间等西信息。
优点是适用于实施简单,但缺点是只能检测网络层的连通性,无法检测应用层的故障。
2.心跳机制:常用于分布式系统中,通过定期发送心跳信号来检测系统组件的状态。心跳信号通常由一个组件发送到另一个组件,如果发送方在一定时间内没有收到确认信号,则认为接收方出现了故障。
优点是适用于复杂的分布式系统,能够实时检测各组件的状态,但缺点是需要额外的通信开销,且需要设计合理的超时时间和确认机制。
风险点、敏感点、权衡点:
风险点是指架构设计中潜在的、存在问题的架构决策所带来的隐患;
敏感点是指为了实现某种特定的质量属性,一个或多个系统组件所具有的特性;
权衡点是指影响多个质量属性,并对多个质量属性都是敏感点的系统属性。
三、生产上常见的技术架构
1.Lambda架构:
是一种用于处理大数据的架构设计模式,将数据处理流程分为批处理层、速度层、和服务层三个部分。其中服务层负责将批处理层和速度层生成的视图合并,提供统一的查询接口给用户。

2.企业服务总线架构(ESB):
企业服务总线是一种面向服务的架构,是传统中间件技术与XML、Web服务等技术结合的产物,主要特点是支持异构系统的集成。ESB基于内容的路由和过滤,具备复杂数据的传输能力,并可以提供一系列的标准接口。其主要功能有:
(1)服务位置透明性;(2)传输协议转换;
(3)消息格式转换;(4)消息路由;(5)消息增强;
(6)安全性;(7)监控与管理。

3、MVC架构:
(1)三元素:
模型:封装数据操作对象;
视图:提供交互界面;
控制器:根据输入指令和业务逻辑操作数据对象,并返回输出。
(2)EJB构件的三种Bean:
Session Bean(会话构件)负责处理客户端与服务端交互的业务逻辑;
Entity Bean(实体构件)表示数据库中存在的业务实体;
Message Driver Bean(消息驱动构件)用于接收异步的JMS消息。

4、J2EE架构

四、模型图
1、数据流图的基本元素及其作用:
数据流图是在结构化开发方法中,需求分析阶段产生的结果;是一种便于理解、分析系统数据流程的模型工具;主要描述了逻辑上系统的外界交互实体、功能(处理过程)、输入输出和数据存储等。

2、时序图/顺序图/序列图:
存在三种消息:同步消息、异步消息、返回消息。
序列图强调消息的时间顺序,常用于分析阶段;协作图强调参与对象之间的交互和关联关系,常用于设计阶段,两者都属于交互图。
序列图表示条件分支序列片段有:opt(可选)、alt(二选一)、loop(循环)和break(中断)、par(并行)
3、数据流图 VS 系统流程图:
数据流图和系统流程图都是图形化的建模工具,前者描述了系统边界、业务处理过程、各功能模块之间的数据流,而后者侧重展示了应用程序从数据输入开始到输出为止的逻辑过程。
(1)数据流图的处理过程可并行,流程图在某个时间点只能处于一个处理过程。
(2)数据流图展现的是系统的数据流,流程图侧重描述系统的控制流。
(3)数据流图展示全局的处理过程,过程之间遵循不同的计时标准,而流程图中处理过程遵循一致的计时标准。
(4)数据流图适用于系统分析中的逻辑建模阶段,流程图适用于系统设计中的物理建模阶段。
高质量数据流图设计时应考虑的三个原则:
(1)复杂性最小化原则。DFD分层结构应把信息切分得相对独立且小。
(2)接口最小化原则。应使得模型中各个元素之间的连接数最小。
(3)数据流一致性原则。一个过程和该过程分解时的数据流内容应保持一致。
4、对象模型、动态模型和功能模型:

5、状态图与活动图:
状态图主要用于描述一个对象在其生存期间的动态行为,引起状态转移的事件,以及因状态转移而伴随的动作;活动图用于描述系统的工作流程和并发行为,可看作是状态图的特殊形式。
两者最大的区别是,状态图侧重于描述行为的结果,而活动图侧重描述行为的动作。其次活动图可描述并发行为,而状态图不能。通俗来说,活动图对各流程的交互描述更详尽、更细节。
五、数据模型设计
1、逻辑数据模型设计包含哪些任务:
(1)画ER图;构建系统上下文数据模型,包含实体与实体之间的联系。
(2)设置主键属性;绘制基于主键的数据模型,为每个实体添加主键属性。
(3)设置非主键属性;绘制全属性的数据模型,为每个实体添加非主键属性。
(4)将模型转换成DDL规范化语句;利用规范化技术建立系统规范化数据模型。
2、超类实体的定义:通过将多个实体中相同的属性组合起来构造出新的抽象实体,即超类实体,原有的多个实体称之为子类实体。
3、派生属性:指某个实体的非主键属性由其他的非主键属性决定。
4、常见的反规范化设计包括:(即增加冗余字段或冗余表)
(1)增加冗余列,避免在查询时多个表的连接操作降低性能。
(2)增加派生列,预先保存计算结果,减少在查询时的计算量,从而提高性能。
(3)新建关联组表,将多个表连接出来的结果数据重新组成一个表来减少连接消耗。
(4)分割表,包括水平分割(数据行切割)或垂直分割(数据列切割)。
与之带来的问题:数据的重复存储,浪费磁盘空间;数据的一致性问题,增加维护复杂度。
5、针对反规范化产生的数据不一致问题,解决方案有:
(1)触发器数据同步;
(2)应用程序数据同步;
(3)采用物化视图。
六、面向对象的分析建模
1、用例之间的关系类型:包含、泛化、扩展
2、类之间的关系类型:泛化、实现、组合、聚合、关联、依赖(员工和公司是聚合关系,部门和公司是组合关系,取决于两者的生命周期是否相同;再比如,学生和学校之间是聚合关系,学校和学院之间是组合关系,学生和课程之间是关联关系)

七、数据库相关应用
1、读写分离的分布式架构:
读写分离架构利用了数据库的复制技术,将数据的读和写分布在不同的处理节点上,从而达到提高可用性和扩展性的目的。
分布式数据库系统需要由多个局部数据库系统、多个热备份数据库系统和多个数据缓存组成。局部数据库负责数据的写入,多个热备份数据库系统用以解决单点故障的问题,数据缓存负责为应用提供所读取的数据。
(1) 读取数据:应用访问缓存,如果命中则返回,否则从局部数据库系统中读取数据并将数据加载到缓存后返回。
(2) 添加数据:采用延迟加载策略,应用将数据直接写入局部数据库。
(3) 更改数据:应用更改局部数据库中的数据,将缓存中的数据标记为失效。
(4) 删除数据:应用删除局部数据库中的数据,将缓存中的数据标记为失效。
2、数据库主从复制的好处:
(1)避免数据库单点故障。主服务器实时、异步复制数据到从服务器,当主数据库宕机时,可在从数据库中选择一个升级为主服务器。
(2)读写分离,提高查询效率。使用主数据库进行数据的插入、删除及更新等写操作,而从数据库则专门用来进行数据査询操作,从而将读写操作分担到不同的服务器以提高性能效率。
3、使用Memcached/Redis代替数据查询缓存的原因:
(1)缓存架构:数据库查询缓存通常是单体架构,因此存储内容受数据库服务器可用内存限制,可缓存数据有限;而Memcached可采用高速分布式缓存服务器结构,不受数据库服务器约束,可扩展性更好。
(2)缓存有效性:数据库查询缓存只要在发生写操作时就会失效,即使更新的是数据库中的其他行;而Memcached可通过键值将数据进行散列缓存,有效降低缓存的更新频率,从而提高缓存的有效性。
(3)缓存数据类型:数据库查询缓存的最小颗粒度只到数据行,而Memcached理论上可缓存任何内容,可以将分散在数据库中的关系或者列表组合后进行缓存,以提高缓存数据的针对性和效率。
4、MongoDB

5、消息中间件具有的技术优势:
(1)异步通信。通过消息中间件,不同的服务之间进行异步通信,可以提高系统的吞吐量和并发性能。
(2)解耦合。将消息发送方和接受方进行解耦,从而能独立开发和部署,提高系统的可扩展性和可维护性。
(3)流量控制或者消息缓冲。可以设置流量控制,当消息量过大时,暂停消息的发送,流量小时,继续发送,实现削峰填谷功能。也可以作为消息缓冲功能,作为缓冲区暂存消息,从而均衡系统的负载和压力。
6、常用的数据脱敏方法:

7、SQL注入攻击:
SQL注入攻击,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串中,最终达到欺骗服务器的目的,执行恶意的SQL命令。
可以通过以下方式抵御SQL注入攻击:
(1)使用正则表达式;
(2)使用参数化的过滤性语句;
(3)检査用户输入的合法性;
(4)用户相关数据加密处理;
(5)使用存储过程来执行所有的查询;
(6)使用数据库专业的安全防护技术:如扫漏、加密、防火墙、脱敏、安全审计等。
8、Redis高速缓存架构:

(1)Redis分布式部署的三种常见方案:主从、哨兵或集群架构
(2)Redis集群三种常见的分片方式:基于主键、基于范围、基于哈希
(3)Redis持久化存储的两种方式:RDB(时间批处理)和AOF(事务流触发)

八、信息安全
1、对称加密策略:
(1)机密性:发送者利用对称密钥对要发送的数据进行加密,只有拥有正确相同密钥的接收者才能将数据正确解密,从而提供机密性。
(2)完整性:发送者根据要发送的数据生成消息认证码(或消息摘要),利用对称密钥对消息认证码进行加密并附加到数据上发送;接收者使用相同密钥将对方发送的消息认证码解密,并根据接收到的数据重新生成消息认证码,比较两个认证码是否相同以验证数据的完整性。
2、公钥加密策略:
(1)机密性:发送者利用接收者的公钥对要发送的数据进行加密,只有拥有对应私钥的接收者才能将数据正确解密,从而提供机密性。
(2)完整性:发送者根据要发送的数据生成消息认证码(或消息摘要),利用接收者的公钥对消息认证码进行加密并附加到数据上发送;接收者利用自己的私钥将对方发送的消息认证码解密,并根据接收到的数据重新生成消息认证码,比较两个认证码是否相同以验证数据的完整性。
3、Oracle数据库提供的两种加密技术:
(1)加解密API:数据库管理系统提供可在SQL语句中调用的加解密API,应用可以利用这些API构建自己的基础架构,对数据进行加密保护。
(2)透明加密:安全管理员为数据库敏感字段选择加密方式及密钥强度,应用访问受保护数据时只需使用口令打开或关闭密钥表,对数据的加密和解密由数据库管理系统自动完成。
总结:加解密API方式的灵活性强,但构建和管理复杂;而透明加密方式管理简单,应用程序负担轻,但灵活性较差。
九、其他(论文)
1、分布式锁:https://blog.csdn.net/llwszx/article/details/148817734
2、分布式存储中常用的冗余技术:
3、可靠性的设计、分析技术与应用:
4、云上自动化运维:
5、NoSQL数据库技术及其应用:
6、云原生架构及其应用:
7、企业信息化规划的实施与应用:
8、数据持久层架构设计:
9、企业架构设计与应用:
10、企业集成平台的技术与应用:
11、论信息系统建模与方法:
12、决策支持系统的开发与应用:
13、基于REST服务的WEB应用系统设计
14、基于架构的软件设计方法及应用
15、论应用服务器基础软件
16、论微服务架构及其应用
17、论数据分片技术及其应用
18、论数据湖技术及其应用
19、论数据访问层及其应用
20、论系统安全架构及其应用
21、论负载均衡技术在Web系统的应用
22、论软件设计模式及其应用
23、论面向切面的编程技术及其应用(AOP)
24、面向服务的架构及其应用
25、基于构件的软件开发方法及应用
26、论湖仓一体及应用
27、论边缘计算及其应用
28、论数据挖掘及应用
选定的几个方向:
C1、面向服务的架构、微服务架构
C2、软件维护及其应用(数据维护、功能扩展、性能扩展)
C3、论多源异构数据集成方法
C4、Lambada处理架构及其应用
C5、数据持久层架构设计、论数据访问层及其应用
C6、基于REST服务的WEB应用系统设计
C7、分布式存储中常用的冗余技术
