系统架构风险是指架构设计中潜在的、存在问题的架构决策所带来的隐患。
敏感点是为了实现某种特定质量属性,一个或多个系统组件所具有的特性。
权衡点是影响多个质量属性,并对多个质量属性来说都是敏感点的系统属性。
质量属性效用树(utility tree)是对系统质量属性进行识别和优先级排序的重要工具。 包括安全性、可靠性、可修改性和性能。
数据流图(Data Flow Diagram)的基本元素及其作用。
数据源或宿(“宿”表示数据的终点)。代表系统之外的实体,可以是人、物或其他软件系统。
数据流。数据流是数据在系统内传播的路径,因此由一组成分固定的数据组成。数据流应该用名词或名词短语命名。
对数据的加工(处理)。加工是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出。
数据存储。表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等。
状态图用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件(event), 以及因状态转移而伴随的动作(action)。
活动图用于描述系统的工作流程和并发行为。活动图其实可看作状态图的特殊形式,活动图中一个活动结束后将立即进入下一个活动(在状态图中状态的转移可能需要事件的触发)。
两者最大的区别是:状态图侧重于描述行为的结果,而活动图侧重描述行为的动作。其次活动图可描述并发行为,而状态图不能。
数据持久层是根据分层思想,通过建立逻辑数据操作接口,采取一定的对象/关系映射策略,隐藏数据库访问代码细节,向业务开发人员提供透明的对象持久化操作机制。能够为项目开发带来的好处:
(1)分离业务逻辑层和数据层,降低两者之间的耦合;
(2) 通过对象/关系映射向业务逻辑提供面向对象的数据访问;
(3) 简化数据层访问,隐藏数据库链接、数据读写命令和事务管理细节。
问题2 项目组应该采用Hibernate框架。原因:
(1) Hibernate支持多种不同类型数据库,满足项目组数据库移植需求;
(2) Hibernate相对于iBatis减少了SQL语句开发的工作量;
(3) iBatis生成的PO是扁平化的,无法像Hibernate—样支持对象的继承和聚合等立体化关系。
增加数据访问层的优势:
(1)由于涉及到多种异构数据库平台,数据访问复杂性增加,不宜与业务逻辑混合在一起。
(2)数据管理变复杂之后,需要使用的代码量增加,分单独层次有利于让逻辑更清晰。
(3)业务逻辑应以相同的方式应对异构的数据库,此时需要单独的数据访问层屏蔽差异性。
数据库程序在线访问方式优点:
1.性能比直接SQL好
2.可以处理复杂查询语句
数据库程序在线访问方式缺点:
1.要求程序员懂SQL语句
2.修改与维护相对困难
ORM优点:
1.使用ORM可以大大降低学习和开发成本。
2.程序员不用再写SQL来进行数据库操作。
3.减少程序的代码量。
4.降低由于SQL代码质量差而带来的影响。
ORM缺点
1.不太容易处理复杂查询语句。
2.性能较直接用SQL差。
本题选择ORM, 主要是因为程序员缺数据库开发经验, SQL语句质量有很大
风险,同时学习成本很高。应用简单, 不用担心ORM对性能的影响。
用例之间的关系包括:包含、扩展、泛化。
“登录系统”用例与“注册课程”用例之间的关系为:包含关系。
“参加考试”用例与“参加补考”用例之间的关系为:扩展关系。
问题3 (11分) 类之间的关系包括:关联、聚合、组合、依赖、泛化、 实现。
类University与类Student之间的关系是:聚合关系。
类University与类Department之间的关系是:组合关系。
类Student与类Course之间的关系是:关联关系。
J2EE平台采用了多层分布式应用程序模型,实现不同逻辑功能的应用程序被封装到不同的构件中,处于不同层次的构件可被分别部署到不同的机器中。
(1)Applet ; (2)Servlet ; (3)EJB容器 ; (4)SessionBean ; (5)EntityBean
javaBean分为:sessionBean 、EntityBean、驱动Bean
MVC架构包含:视图、控制器、模型
模型(Model):模型是应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型能为多个视图提供数据。
视图(View):视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。
控制器(Controller):控制器接受用户的输入并调用模型和视图去完成用户的需求。该部分是用户界面与Model的接口。一方面它解释来自于视图的输入,将其解释成为系统能够理解的对象,同时它也识别用户动作,并将其解释为对模型特定方法的调用;另一方面,它处理来自于模型的事件和模型逻辑执行的结果,调用适当的视图为用户提供反馈。
(1) JSP (2) Servlet (3) Service (4) JavaBean (5) DAO
问题2 (6分) EJB中的Bean分三种类型: Session Bean(会话bean)、 EntityBeans(实体bean)和 Message-Driven Bean(消息驱动bean)。
Session Bean的职责是:维护一个短暂的会话(一次服务器请求)
Entity Beans 的职责是:维护一行持久稳固的数据
Message-Driven Bean的职责是:异步接受消息
MVC架构风格中的M代表模型(Model), V代表视图(View), C代表控制器(Controller)。
在该风格中,模型表示待展示的对象,
视图表示模型的展示,
控制器负责把用户的动作转成针对模型的操作。
模型通过更新视图的数据来反映自身的变化。在本系统中, 模型(M)代表监控组件、 视图(V)代表控制终端、 控制器(C)代表管理模块。
(a) Web 应用层 (b) 界面层 (c) 负载均衡层 (d) CDN 内容分发 (e) 主数据库 (f) 缓存服务器集群 (g) 从数据库 (h) 写操作 (i) 读操作 (j) 文件服务器集群
问题3 (4 分) 根据李工的提议,新的B2C商品交易平台引入了主从复制机制。请针对B2C商品交易平台的特点,简要叙述引入该机制的好处。
参考答案 问题1 (5分) 响应式web设计是指我们设计与开发的页面可以根据用户的行为和不同的设备环境做出相应的响应来调整页面的布局,以提供用户可感知的、流畅的阅读和操作体验。 实现方式:
(1)流式布局 (2) 弹性布局
问题2 (16分) (1) d (2) c (3) f (4) a (5) e (6) h (7) g (8) i
问题3 (4分)
1.提升系统性能 交易平台要求高并发,主从复制方式一主多从,不同的用户请求可以从不同的从数据库读取数据,提高并发度。
2.可扩展性更好 如果采用单台数据库服务器,则访问量持续增加时,数据库瓶颈暴露,且无法迅速解决问题。而主从结构可以快速增加从服务器数量,以满足需求。
3.提升可用性一主多从,一台从服务器出现故障不影响整个系统正常工作。
4.相当于负载均衡一主多从分担任务,相当于负载均衡
5.提升数据安全性 系统中的数据冗余存放多份,不会因为某台机器硬件故障而导致数据丢失。
体系结构风格定义了一个系统家族,即一个体系结构定义了一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
体系结构风格有个分类:
1数据流风格:批处理序列、管道/过滤器
2调用/返回风格:主程序/子程序、面向对象风格、层次风格
3独立构件风格:进程通信、事件系统
4虚拟机风格:解释器、基于规则的系统
5仓库风格:数据库系统、超文本系统、黑板系统。
经典软件体系结构风格:
1管道/过滤器
在该体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成。因此,这里的构件被称为过滤器,而连接件被称为管道。
一个管道/过滤器网络输出的正确性并不依赖于过滤器进行增量计算的过程的顺序。
过滤器是独立的实体,不能与其他的过滤器共享数据。
典型的管道/过滤器风格有:UNIX下的Shell编程。UNIX既提供一种符号以连接各组成部分(进程),又提供某种进程运行时机制以实现管道。另一个例子:传统的编译器。传统的编译器中,一个阶段(包括词法分析、语法分析、语义分析和代码生成)的输出是另一个阶段的输入。
2数据抽象和面向对象组织
数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这个风格的构件就是对象,或者说是抽象数据类型的实例。对象是一种被称为管理者的构件,因为它负责保持资源的完整性。对象通过函数和过程调用来交互。
3基于事件的隐式调用
其思想是:构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程。这样,一个事件的触发导致了另一个模块中的过程的调用。
这个风格的构件是一些模块,这些模块既可以是一些过程,又可以是一些事件的集合。
这个风格的应用很多。
4分层系统
分层系统是一个层次结构,每一层为上一层服务,并作为下层的客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻层可见。这样,系统中的构件在一些层中实现了虚拟机(在另外一些层次系统中层是部分不透明的)。连接件通过决定层间如何交互的协议来定义,其拓扑约束包括对相邻层间交互的约束。
这种风格支持基于可增加抽象层的设计。这样,允许将一个复杂的问题分解成一个增量步骤序列的实现。因为,每一层只影响两层,同时只要给相邻层提供相同的接口,允许每次用不同的方法实现,同样为软件重用提供了强大的支持。
典型的应用是分层通信协议。
5C2风格
C2是一种基于构件和消息的架构风格,可用于创建灵活的、可伸缩的软件系统。一个C2构架可以看成是按照一定规则由连接件连接的许多组件组成的层次网络:系统中的构件和连接件都有一个“顶部”和“底部”;一个构件的“顶部”或“底部”可以连接到一个连接件的“底部”或“顶部”;对于一个连接件,和其相连的构件或连接件的数量没有限制,但是构件和构件之间不能直接相连。
C2架构风格最重要的特性就是“底层无关性”,这在构件的可替代性和可重用性方面具有显著的作用;另外,C2架构引入了“事件转化”的概念,域解释器把构件的请求转化为接收方能够接收的特定形式,同时也把通知转化为该构件能够理解的形式。
C2风格是最常用的一种风格:
系统中的构件可实现应用需求,并能将任意复杂的功能封装在一起。
所有构件之间的通信以连接件为中介的异步消息交换机制。
构件相对独立,依赖性较少。系统中不存在某些构件将在同一地址空间内执行,或某些构件共享控制线程之类的相关性假设。
“4+1”的视图模型
5 个不同的视角包括逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件架构。
()
(1)逻辑视图:主要支持系统的功能需求,即系统提供给最终用户的服务。
(2)开发视图:也称为模块视图,主要侧重于软件模块的组织和管理。 提供给开发人员,应用于软件管理;
(3)进程视图:侧重于系统的运行特性,主要关注一些非功能性的需求,例如系统的性能和可用性。进程视图强调并发性、分布性、系统集成性和容错能力,以及逻辑视图中的主要抽象的进程结构。它也定义逻辑视图中的各个类的操作具体是在哪一个线程中被执行的。进程视图可以描述成多层抽象,每个级别分别关注不同的方面。
(4)物理视图:主要考虑如何把软件映射到硬件上,它通常要考虑到解决系统拓扑结构、系统安装、通信等问题。
(5)场景:可以看作是那些重要系统活动的抽象,它使四个视图有机地联系起来,从某种意义上说,场景是最重要的需求抽象。
逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。
对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统
对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。
软件架构(及软件架构设计师)重点关注的是质量属性。
软件质量特性包括功能性、可靠性、易用性、效率、可维护性、可移植性等 6个方面,每个方面都包含若干个子特性。
功能性:适合性、准确性、互操作性、依从性、安全性;
可靠性:成熟性、容错性、易恢复性;
易用性:易理解性、易学性、易操作性;
效率:时间特性、资源特性;
可维护性:易分析性、易改变性、稳定性、易测试性;
可移植性:适应性、易安装性、遵循性、易替换性;
UML 由构造块、公共机制和架构三个部分组成。
(1)构造块。构造块也就是基本的 UML 建模元素(事物)、关系和图。 建模元素:包括结构事物(类、接口、协作、用例、活动类、组件、节点等)、行为事物(交互、状态机)、分组事物(包)、注释事物。
关系:包括关联关系、依赖关系、泛化关系、实现关系。图: UML 2.0 包括 14 种不同的图,分为表示系统静态结构的静态模型(包括类图、对象图、包图、构件图、部署图、制品图),以及表示系统动态结构的动态模型(包括对象图、用例图、顺序图、通信图、定时图、状态图、活动图、交互概览图)。
数据库管理系统与文件系统相比,优势有:
1.采用复杂的数据模型表示数据结构,数据冗余小,以扩充,实现数据共享。
2.具有较高的数据和程序独立性。包括物理独立性和逻辑独立性。
3.数据库系统为用户提供了方便的用户接口。
4.数据库系统提供了4个方面的数据库控制能力,并发控制、恢复、完整性和安全性。
5.增加了系统的灵活性。
分布式数据库缓存是在内存中管理数据并提供数据的一致性保障,采用数据复制技术实现高可用性,具有较优的扩展性与性能组合。
这种数据存储机制,实现了更短的响应时间,同时极大地降低数据库的事务处理负载,极好地解决了大流量情况下数据库服务器和Web服务器之间的瓶颈。
Memcache不支持数据持久化操作,所以掉电数据会全部丢失,而且无法直接恢复,这存在可靠性问题。
Memcache不支持事务,所以操作过程中可能产生数据的不一致性。
同步方案:
读取数据时,先读取Redis中的数据,如果Redis没有,则从原数据库中读取,并同步更新Redis中的数据。写回时,写入到原数据库中,并同步更新至Redis中。
Redis分布式存储的2种常见方案: redis主从方案、 redis cluster方案。
Redis集群切片的几种常见方式:
客户端分片:
在客户端通过key的hash值对应到不同服务器。
对数据根据key散列到不同的slot上,不同slot对应不同的服务器。
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
支撑SOA的关键是其消息传递架构--企业服务总线(ESB)。
ESB用于实现企业应用不同消息和信息的准确、高效和安全传递。
面向服务的元数据管理: 他必须了解被他中介的两端,即服务的请求以及请求者对服务的要求,以及服务的提供者和他所提供的服务的描述;
通信:服务的发布/订阅、响应/请求、同步/异步消息、路由和寻址等
服务交互:服务接口定义,服务实现的置换,服务消息模型,服务目录和发现等。
服务安全:认证和授权、不可否认和机密性、安全标准的支持等;
非功能性的操作需求、性能需求、安全型需求、文化需求
操作性需求:指用户对系统操作与使用方面的相关需求,如操作的便利性等。
性能需求:指用户对系统响应时间、吞吐量、并发用户数等方面的要求,以达到系统的及时响应和资源的有效利用。
安全性需求:系统为合法用户提供服务并阻止非授权用户使用服务的能力需求。
文化需求:为满足不同人群或种族(文化背景差异)使用系统而形成的系统服务方面的要求。
主从复制机制所带来的好处:
①避免数据库单点故障:主服务器实时复制数据到从服务器,当主数据库宕机时,可在从数据库中选择一个升级为主服务器,从而防止数据库单点故障。
②提高査询效率:根据系统数据库访问特点,可以使用主数据库进行数据的插入、删除及更新等写操作,而从数据库则专门用来进行数据査询操作,将査询操作分担到不同的从服务器以提高数据库访问效率。
DNS负载与反向代理负载区别
基于DNS的负载均衡机制通过DNS服务器实现,通常通过循环复用具有同一域名的多个主机地址的服务器实现负载均衡。
反向代理负载均衡则是将来自Internet的连接请求以反向代理的方式动态转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。