系统架构设计精华知识

发布于:2024-04-24 ⋅ 阅读:(16) ⋅ 点赞:(0)
  1. 数据流风格:适合于分阶段做数据处理,交互性差,包括:批处理序列、管理过滤器。
  2. 调用/返回风格:一般系统都要用到,包括:主程序/子程序,面向对象,层次结构(分层越多,性能越差)。
  3. 独立构件风格:构件是独立的过程,连接件是消息传递。包括:进程通信,事件驱动系统(隐式调用)。应用场景,通过事件触发操作。
  4. 虚拟机风格:包括解释器与基于规则的系统,有自定义场景时使用该风格。
  5. 仓库风格(以数据为中心的风格):以共享数据源为中心,其它构件围绕中心进行处理。包括:数据库系统、黑板系统(语言处理,信号处理),超文本系统。
  6. 闭环控制架构(过程控制):定速巡航,空调温控。
  7. MVC:视图(JSP),控制器(Servlet),模型(EJB)。
  8. SOA:粗粒度,松耦合,标准化。Webservice 与 ESB 是 SOA 的实现技术。
  9. ESB:位置透明性、消息路由、服务注册命名、消息转换、多传输协议、日志与监控。
  10. REST 的 5 大原则:所有事物抽象为资源、资源唯一标识、通过接口操作资源、操作不改变资源标识、操作无状态。
  11. 微服务特点:小, 且专注于做一件事情;轻量级的通信机制;松耦合、独立部署。
  12. 微服务优势:技术异构性、弹性、扩展、简化部署、与结构相匹配、可组合性、对可替代性的优化。
  13. 微服务与 SOA 对比:

  1. ADL 的三个基本元素:构件,连接件,架构配置。
  2. DSSA 基本活动:领域分析(建立领域模型),领域设计(获得 DSSA),领域实现(开发和组织可复用信息)。
  3. DSSA 角色:领域专家(有经验的用户、分析、设计、实现人员,“给建议”),领域分析人员(有经验的分析师,完成领域模型),领域设计人员(有经验的设计师,完成 DSSA),领域实现人员(有经验的程序员完成代码编写)。
  4. DSSA 三层次模型:领域架构师对应领域开发环境,应用工程师对应领域特定的应用开发环境,操作员对应应用执行环境。
  5. ABSD 方法是架构驱动,即强调由业务、质量和功能需求的组合驱动架构设计。
  6. ABSD 方法有三个基础:功能的分解,通过选择架构风格来实现质量和业务需求,软件模板的使用。
  7. ABSD 开发过程:
  1. 架构需求(需求获取、生成类图、对类进行分组、打包成构件、需求评审)
  2. 架构设计(提出架构模型、映射构件、分析构件相互作用,产生架构,设计评审)
  3. 架构文档化:从使用者角度编写,分发给所有相关开发人员,保证开发者手中版本最新。
  4. 架构复审:标识潜在的风险,及早发现架构设计中的缺陷和错误。(5)架构实现(复审后的文档化架构,分析与设计,构件实现,构件组装,系统测试)

(6)架构演化(需求变化归类,架构演化计划,构件变动,更新构件相互作用,构件组装与测试,技术评审,演化后的架构)

21、架构评审四大质量属性:

  1. 性能:代表参数(响应时间、吞吐量),设计策略(优先级队列、资源调度)。
  2. 可用性:尽可能少的出错与尽快的恢复。代表参数(故障间隔时间,故障修复时间),设计策略(冗余、心跳线)。
  3. 安全性:破坏机密性、完整性、不可否认性及可控性等特性。设计策略(追踪审计)
  4. 可修改性:新增功能多少人月能完成,设计策略(信息隐藏,低耦合)
  1. 风险点:非专业术语,系统架构风险是指架构设计中潜在的、存在问题的架构决策所带来的隐患。即可能引起风险的因素

非风险点:一般以某种做法,“是可以实现的”、“是可以接受的”方式进行描述。

敏感点:指为了实现某种特定的质量属性,一个或多个构件所具有的特性。

权衡点:影响多个质量属性的特性,是多个质量属性的敏感点。

  1. 基本场景的评估方法:ATAM,SAAM,CBAM。
  2. 架构评估方法,不是代码评估方法,不做测试,不是精确的衡量方法。
  3. ATAM 四大阶段:场景和需求收集、结构视图场景实现、属性模型构造和分析、折中。
  4. SAAM 五个步骤:即场景开发、体系结构描述、单个场景评估、场景交互和总体评估。
  5. 产品线技术应用场景:有多年行业开发经验,做过多个同类产品。
  6. 建立产品线的四种方式:基于现有产品演化式(风险最低),基于现有产品革命式,全新产品线演化式,全新产品线革命式(风险最高)。
  7. 产品线实施成功的决定因素:对该领域具备长期和深厚的经验;一个用于构建产品的好的核心资源库;好的产品线架构;好的管理(软件资源、人员组织、过程)支持。
  8. 构件、对象、模块的对比:

  1. 构件系统架构:构件系统体系结构由一组平台决策、一组构件框架和构件框架之间的互操作设计组成。
  2. 构件的复用:(1)检索与提取构件;(2)理解与评价构件;(3)修改构件;(4)组装构件。
  3. 在构件组装阶段失配问题:由构件引起的失配;由连接子引起的失配;由于系统成分对全局体系结构的假设存在冲突引起的失配等。
  4. 中间件:中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。
  5. 中间件功能:客户机与服务器之间的连接和通信,客户机与应用层之间的高效率通信;应用层不同服务之间的互操作,应用层与数据库之间的连接和控制;多层架构的应用开发和运行的平台,应用开发框架,模块化的应用开发;屏蔽硬件、操作系统、网络和数据库的差异;应用的负载均衡和高可用性、安全机制与管理功能,交易管理机制,保证交易的一致性、一组通用的服务去执行不同的功能,避免重复的工作和使应用之间可以协作。
  6. 采用中间件技术的优点:面向需求;业务的分隔和包容性;设计与实现隔离;隔离复杂的系统资源;符合标准的交互模型;软件复用;提供对应用构件的管理。
  7. 主要的中间件:远程过程调用;对象请求代理;远程方法调用;面向消息的中间件;事务处理监控器。
  8. 中间件技术-Corba(公共对象请求代理体系结构)(代理模式):

伺服对象(Servant):CORBA 对象的真正实现,负责完成客户端请求。

对象适配器(Object Adapter):用于屏蔽 ORB 内核的实现细节,为服务器对象的实现者提供抽象接口,以便他们使用 ORB 内部的某些功能。

对象请求代理(Object Request Broker):解释调用并负责查找实现该请求的对象,将参数传给找到的对象,并调用方法返回结果。客户方不需要了解服务对象的位置、通信方式、实现、激活或存储机制。

  1. Bean 的分类:
  1. 会话 Bean:描述了与客户端的一个短暂的会话。
  2. 实体 Bean:持久化数据,O/R 映射。
  3. 消息驱动 Bean:会话 Bean+JMS,客户把消息发送给 JMS 目的地,然后,JMS 提供者和 EJB 容器协作,把消息发送给消息驱动 Bean。支持异步消息。

40、重量级与轻量级区别:

  1. 重量级:占用资源过多,在开发的过程中效率很低;大部分时间花在配置、运行的过程上,修改复杂;单元测试也比较麻烦。
  2. 轻量级:提高了开发的速度;立即可以看到结果;做单元测试也非常简单;大量现成可供参考的开源代码。

41、WEB 设计维度:

  1. 从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务。
  2. 从缓存来看:MemCache,Redis,Squid。
  3. 从并发分流来看:集群(负载均衡)、CDN。
  4. 从数据库来看:主从库(主从复制),内存数据库,反规范化技术,NoSQL,分区(分表)技术,视图与物化视图。
  5. 从持久化来看:Hibernate,Mybatis。
  6. 从分布存储来看:Hadoop,FastDFS,区块链。
  7. 从数据编码看: XML,JSON。
  8. 从 Web 应用服务器来看: Apache,WebSphere,WebLogic,Tomcat,JBOSS,IIS。
  9. 其它:静态化,有状态与无状态,响应式 Web 设计。
  1. 集群:(1)应用服务器集群;(2)主从集群。
  2. 负载均衡技术:(1)应用层负载均衡:http 重定向、反向代理服务器;(2)传输层负载均衡:DNS 域名解析负载均衡、基于 NAT 的负载均衡;(3)硬件负载均衡:F5;(6)软件负载均衡:LVS、Nginx、HAproxy。

静态算法 (不考虑动态负载)

(1)轮转算法:轮流将服务请求 (任务) 调度给不同的节点 (即:服务器)0

(2)加权轮转算法:考虑不同节点处理能力的差异。

(3)源地址哈希散列算法:根据请求的源IP地址,作为散列键从静态分配的散列表找出对应的节点。

(4)目标地址哈希散列算法:根据请求目标IP做散列找出对应节点。

(5) 随机算法:随机分配,简单,但不可控。

动态算法(考虑动态负载)

(1)最小连接数算法:新请求分配给当前活动请求数量最少的节点,每个节点处理能力相同的情况下(2)加权最小连接数算法:考虑节点处理能力不同,按最小连接数分配。

(3)加权百分比算法:考虑了节点的利用率、硬盘速率、进程个数等,使用利用率来表现剩余处理能力。

  1. 有状态和无状态:
  1. 无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息。
  2. 有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的。

解决方法:

  1. 携带session
  2. 服务器间同步session
  3. 将session存入redis
  1. Redis 与 Memcache 能力比较

工作

MemCache

Redis

数据类型

简单 key/value 结构

丰富的数据结构

持久性

不支持

支持

分布式存储

客户端哈希分片/一致性哈希

多种方式,主从、Sentinel、Cluster 等

多线程支持

支持

不支持(Redis6.0 开始支持)

内存管理

私有内存池/内存池

事务支持

不支持

有限支持

数据容灾

不支持,不能做数据恢复

支持,可以在灾难发生时,恢复数据

  1. Redis 集群切片的常见方式

集群切片方式

核心特点

客户端分片

在客户端通过 key 的 hash 值对应到不同的服务器。

中间件实现分片

在应用软件和 Redis 中间,例如:Twemproxy、Codis 等,由中间件实现服务到后台 Redis 节点的路由分派。

客户端服务端协作分片

RedisCluster 模式,客户端可采用一致性哈希,服务端提供错误节点的重定向服务 slot 上。不同的 slot 对应到不同服务器。

  1. Redis 分布式存储方案

分布式存储方案

核心特点

主从(Master/Slave)模式

一主多从,故障时手动切换。

哨兵(Sentinel)模式

有哨兵的一主多从,主节点故障自动选择新的主节点。

集群(Cluster)模式

分节点对等集群,分 slots,不同 slots 的信息存储到不同节点。

  1. Redis 数据分片方案

分片方案

分片方式

说明

范围分片

按数据范围值来做分片

例:按用户编号分片,0-999999 映射到实例 A;1000000-1999999 映射到实例 B。

哈希分片

通过对 key 进行 hash 运算分片

可以把数据分配到不同实例,这类似于取余操作,余数相同的,放在一个实例上。

一致性哈希分片

哈希分片的改进

可以有效解决重新分配节点带来的无法命中问题。

  1. redis持久化

Redis的持久化主要有两种方式: RDB和AOF。

RDB:传统数据库中快照的思想。指定时间间隔将数据进行快照存储

AOF:传统数据库中日志的思想,把每条改变数据集的命令追加到AOF文件未尾,这样出问题了.可以重新执行AOF文件中的命令来重建数据集

对比维度

RDB持久化

AOF持久化

备份量

重量级的全量备份,保存整个数据库

轻量级增量备份,一次只保存一个修改命令

保存间隔时间

保存间隔时间长

保存间隔时间短,默认1秒

还原速度

数据还原速度快

数据还原速度慢

阻塞情况

save会阻塞,但bgsave或者自动不会阻寒

无论是平时还是AOF重写,都不会阻寒

数据体积

同等数据体积:小

同等数据体积:大

安全性

数据安全性:低,容易丢数据

数据安全性:高,根据策略决定

  1. 淘汰策略

淘汰作用范围

策略

不淘汰

禁止驱逐数据,内存不足以容纳新入数据时,新写入操作就会报错。系统默认的一种淘汰策略。。

设置了过期时间的键空间

  1. 随机移除某个key
  2. 优先移除最近未使用的key
  3. ttl值小的key优先移除(剩余生命时间值)

全键空间

1、随机移除某个key

2、优先移除最近未使用的key

  1. 缓存常见问题

1、缓存雪崩

1、使用锁或队列:保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。

2、为key设置不同的缓存失效时间:在固定的一个缓存时间的基础上+随机一个时间作为缓存失效时间.

3、二级缓存:设置一个有时间限制的缓存+一个无时间限制的缓存。避免大规模访问数据库。

2、缓存穿透

查询无数据返回->直接查数据库

  1. 如果查询结果为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了。设置一个不超过5分钟的过期时间,以便能正常更新缓存。

2、设置布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个-定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

查询无数据返回->直接查数据库

  1. 缓存预热

系统上线后,将相关需要缓存数据直接加到缓存系统中。

解决方案

  1. 直接写个缓存刷新页面,上线时手工操作。
  2. 数据量不大时,可以在项目启动的时候自动进行加载

3、定时刷新缓存。

  1. 缓存与数据库的协作

数据读取:根据 key 从缓存读取;若缓存中没有,则根据 key 在数据库中查找;读取到“值”之后,更新缓存。

数据写入:根据 key 值写数据库;根据 key 更新缓存。

  1. REST 概念:REST(Representational State Transfer,表述性状态转移)是一种只使用 HTTP 和 XML 进行基于 Web 通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。

REST 的五个原则:网络上的所有事物都被抽象为资源;每个资源对应一个唯一的资源标识;通过通用的连接件接口对资源进行操作;对资源的各种操作不会改变资源标识;所有的操作都是无状态的。

  1. 响应式 Web 设计:响应式 WEB 设计是一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。方法:采用流式布局和弹性化设计、响应式图片。
  2. 业务中台和数据中台区分:
  1. 多个电商渠道使用一个下单服务,一个订单接口同时为多个前台系统提供服务,这是业务中台提供的能力。
  2. 多个前台系统,根据一个用户的手机号,获取对应的画像,用户的标签,这是数据中台提供的服务。
  3. 将多个支付通道,抽象建立成一个支付 API,暴露给前台业务系统,这是业务中台提供的能力。

  4. 通过一个订单编号,来获取可能的商品推荐清单,从而做到交叉销售,这是数据中台提供的服务。
  1. MDA(Model Driven Architecture):Model-客观事物的抽象表示;Architecture-构成系统的部件、连接件及其约束的规约;Model-Driven-使用模型完成软件的分析、设计、构建、部署、维护等各开发活动。
  2. 主从数据库结构特点:

一般:一主多从,也可以多主多从。

从库做写操作,从库做读操作。

主从复制步骤:

主库(Master)更新数据完成前,将操作写 binlog 日志文件。

从库(Salve)打开 I/O 线程与主库连接,做 binlog转存处理,并将事件写入中继日志。

从库执行中继日志事件,保持与主库一致。

55、DFD是表达系统内数据的流动并通过数据流描述系统功能的一种方,DFD还可被认为是一个系统模型,在信息系统开发中,如果采用结构化方法,则一般将DFD作为需

求规格说明书的一个组成部分

  1. 类图:静态图,为系统的静态设计视图,展现一组对象、接口、协作和它们之间的关系
  2. 状态图:动态图,展现了一个状态机,描述单个对象在多个用例中的行为,转换可以通过事件触发器触发,事件触发后相应的监护条件会进行检查。
  3. 动态图,是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程。用来描述操作的行为,也用于描述用例和对象内部的工作过程。
  4. 序列图:即顺序图,动态图,是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。侧重以时间为参照描述对象发送消息、接收消息、处理消息、返回消息的顺序。
  5. 通信图(协作图)它强调收发消息的对象的结构组织。顺序图和通信图表达了类似的基本概念,但它们所强调的概念不同,顺序图强调的是时序,通信图强调的是对象之间的组织结构
  6. 嵌入式操作系统特点:可裁剪性、可移植性、可固化性、强实时性、强确定性、强定制性、强稳定性、强紧凑性、较强的硬件适应性、高质量代码、标准接口弱交互性、操作简洁方便、。
  7. 从嵌入式操作系统体系架构看,主要存在 4 种结构:整体结构、层次结构、客户/服务器结构和面向对象结构。