软件体系结构-课程总结
软件体系结构-课程总结
目录
1.逻辑视图(The Logical Architecture View). 6
2.开发视图(The Development Architecture View). 7
3.进程视图(The Process Architecture View). 7
4.物理视图(The Physical Architecture View). 7
---------------------------------------------------------------------------------------------------------------------------------
一、我对软件体系结构的认识
在《Software Architecture in Practice》一书中,对于软件体系结构的定义是“The software architecture of a system is the set of structures needed to reason about the system. These structures comprise software elements, relations among them, and properties of both.”即软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束构成。
软件体系结构概念的提出最初是为了解决从软件需求向软件实现的平坦过渡问题,但是现在已经逐渐扩展到软件开发的整个生命周期。其包括包括有需求阶段的软件体系结构、设计阶段的软件体系结构、实现阶段的软件体系结构、部署阶段的软件体系结构,后开发阶段的软件体系结构。
软件体系结构主要包括构件、连接件、约束三个部分。他们之间的关系可以简单的表述为:按照系统的性能约束或者功能约束,用连接件将构件组装成软件系统。
①构件:构件是具有某种功能的可复用的软件结构单元,表示系统中主要的计算元素和数据存储。构件是一个抽象的概念,在程序中可以指程序函数、模块、对象、类等等。
②连接件:连接件:表示了组件之间的交互。简单的连接件有:管道,过程调用,事件广播等等。复杂的连接件有:客户-服务器通信协议,数据库和应用之间的SQL连接等等。
软件体系结构的作用犹如建筑工程中的“施工图纸”,没有图纸,不能开工。同样的,软件体系结构是软件开发过程中的蓝图,没有软件体系结构设计,就无法构造复杂的软件系统。
软件的体系结构影响着软件质量属性。软件的质量属性是外部可见的,例如,安全性、可用性、延迟时间。不同的软件体系结构在对相同的数据对象处理时,有时会有明显的优劣之分,如KWIC中几种不同的风格使得对于相同文本的处理最后所耗费的时间和资源是不相同的。因此,挑选恰当的软件体系结构会更容易满足软件的质量属性。通过SA分析能够及早预知系统的质量属性,从而允许架构师和项目经理对软件开发成本和进度进行提前的推理与预测。
通过软件体系结构的设计极大地促进设计的重用性和代码的重用性,并且使得系统的组织结构易被理解,从而使得开发人员将注意力集中在组建的组装上,而不是简单的、重复的在各个项目上创建组件。因此,通过软件体系结构设计,提升了开发人员的创造力,同时也降低了设计系统与系统的复杂性。
二、软件体系结构的课程内容
《软件体系结构》这门课主要包括软件结构和视图、软件质量属性、软件体系结构风格和软件开发框架等内容,下面将一一进行介绍。
在软件结构和视图一章中,我们主要以“4+1”View Model为例,介绍了软件结构的可视化建模方法,当然在之前的概述章节中,我们也简单介绍了基于UML的建模方法,下面以"4+1"View Mode为例。
"4+1"View Mode从五个不同的视角来描述软件体系结构,其包括包括逻辑视图、开发视图、进程视图、物理视图和场景来描述软件体系结构。每一个视图只关心系统的一个侧面,5个视图结合在一起才能反映系统的软件体系结构的全部内容。如下图2.1所示:
(图2.1)
1.逻辑视图(The Logical Architecture View)
逻辑视图主要支持系统的功能需求,即系统提供给最终用户的服务。在逻辑视图中,系统分解成一系列的功能抽象,这些抽象主要来自问题领域。这种分解不但可以用来进行功能分析,而且可用作标识在整个系统的各个不同部分的通用机制和设计元素。逻辑视图常用的风格是面向对象风格(详见二-(四)-1.2面向对象风格),通过抽象、封装和继承等方法,可以用对象模型来代表逻辑视图、用类图来描述,与此同时,还可以使用状态图、协作图来描述逻辑视图。
2.开发视图(The Development Architecture View)
开发视图要考虑软件内部的需求,如软件开发的容易性、软件的重用和软件的通用性,要充分考虑由于具体开发工具的不同而带来的局限性。开发视图所用的风格通常是层次结构风格(详见二-(四)-1.3层次结构风格),其通过系统的输入输出关系的模块图和子系统图来进行描述。
3.进程视图(The Process Architecture View)
进程视图描述系统中的进程,其侧重于系统的运行特性,强调并发性、分布性、系统集成性和容错能力。进程视图可以描述成多层的抽象,每一级别关注不同的方面。
最高层可以看做一组独立可执行的通信程序的逻辑网络,第二层可以看做单个进程,第三层则是任务级的。
4.物理视图(The Physical Architecture View)
物理视图考虑如何将软件映射到硬件上,同时还需要考虑软件的非功能性需求,例如说可用性、可靠性(容错程度)、性能等等,通常包含部署图等。
5.场景(Scenarios)
“4+1”中的“1”,用于刻画构件之间的相互关系,可以看作是那些重要系统活动的抽象,将四个视图有机地联系起来。场景可以描述一个特定的视图内的构件关系,也可以描述不同视图间的构件关系。场景采用文本、图形表示皆可。
在"4+1"View Mode中,逻辑视图和开发视图用于描述系统的静态结构,而进程视图和物理视图用于描述系统的动态结构。对于不同的软件系统来说,侧重的角度也有所不同。例如,对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统,而对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。
软件的质量属性指的是一个系统的用来描述系统满足利益相关者需求的程度的可测量或可测试的属性。常见的软件质量属性有多种,大致可分为功能正确性、设计时质量属性、运行时质量属性、系统质量属性、用户质量属性、其他质量属性等六类,其核心有性能、可用性、伸缩性、扩展性、安全性等。
1.性能
性能是对系统的响应能力的考量,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理事件的个数。
2. 可用性
可用性是系统能够正常运行的时间比例。
3.伸缩性
伸缩性的含义可以理解为软件随外部压力增大所表现的性能表现,也可以理解为软件性能随硬件的扩充所产生的性能变化情况。
4.扩展性
可扩展性指的是软件在未来能够扩展新功能的能力与难易程度,是对软件未来发展潜力的考量。
5.安全性
安全性是指系统向合法用户提供服务的同时,也能够阻止非授权用户使用的企图或拒绝服务的能力。
软件体系结构风格是描述一类体系结构的方式,其独立于实际问题,在实践中多次被应用,是若干设计思想的综合,可以被反复使用。在本章中,我们介绍了多种不同的软件架构风格,包括有调用返回风格、数据流风格、事件驱动风格、黑板风格、客户服务器风格、表示分离风格、SOA风格、Restful风格等,下面将对其中的几个风格进行介绍。
1.调用返回风格
调用返回风格包括主程序-子程序架构风格、数据抽象和面向对象架构风格以及层次结构架构风格。
1.1主程序-子程序架构风格
主程序-子程序架构风格把问题划分为若干处理步骤,构件即为主程序和子程序。子程序通常可合成为模块。过程调用作为交互机制,即充当连接件。调用关系具有层次性,其语义逻辑表现为子程序的正确性取决于它调用的子程序的正确性。
1.2数据抽象和面向对象架构风格
这种风格的构件是对象。对象是抽象数据类型的实例。在抽象数据类型中,数据的表示和它们的相应操作被封装起来。对象的行为体现在其接受和请求的动作。连接件即是对象间交互的方式,对象是通过函数和过程的调用来交互的。对象具有封装性,一个对象的改变不会影响其他对象。对象拥有状态和操作,也有责任维护状态。这种结构风格中包含有封装、交互、多态、集成、重用等特征。
1.3层次风格
在层次系统中,系统将会被组织分解成若干个层次,每个层次由一系列的构件组成,下层的构件将会向上层的构件提供服务,上层的构件将会被看做成是下层的客户端(这里与客户-服务器风格有点类似,上层的构件被看成客户,下层的构件被看成服务器,同时各层之间存在着数据交互、调用返回,因此将其划分为调用返回风格一类)。如下图2.2所示,常见的逻辑分层分为表现层、业务层和数据层,表现层包含着面向用户的功能,用户与系统之间的交互(大多使用GUI);业务层实现了系统的核心功能并封装了相应的业务逻辑;数据层实现了应用与数据之间的交互。
(图2.2)
2.数据流风格
数据流风格包括批处理序列和管道-过滤器架构风格。
2.1批处理风格
组件为一系列固定顺序的计算单元,组件间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在前一步结束后才能开始,数据必须是完整的,以整体的方式传递。
2.2管道-过滤器风格
每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流,经过处理,产生输出数据流。如图2.3所示,这个过程通常通过对输入流的变换及增量计算来完成,包括通过计算和增加信息丰富数据,通过浓缩和删除精炼数据,通过改变记录方式转化数据,递增地转化数据等。在输入被完全消费之前,输出便产生了。这里构件被称为过滤器,连接件就是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
(图2.3)
3.事件驱动风格
分为显式调用和隐式调用两种方式,显式调用各个构件之间的互动都是由显性调用函数或程序来完成,调用的过程和次序是预先设定的,因此也是固定的;隐式调用中的构件则不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另一个模块中的过程的调用。
对于事件系统的连接机制,有事件-过程绑定、事件-事件绑定两种,典型的例子就是我们Spring Petclinic实验中的两个程序,均采用了MVC模式(Model-View-Control)。
4.表示分离风格
表示分离风格将表现与核心功能进行分离,并采用了相应的变化传播机制来确保各部分的协调一致。由于在软件系统中,用户界面是最容易发生变化的部分,因此,将表示分离开,更改用户界面就可以不影响系统的核心功能。表示分离风格主要有MVC风格、MVP风格等。
4.1 MVC风格
就像前面介绍的那样(见详见二-(四)-3.事件驱动风格),MVC风格包括模型(业务逻辑)、视图(用户接口)、控制器(用户输入)三个部分,这种将关注点的分离有利于软件的开发、测试与维护。
4.2 MVP风格
MVP是MVC的一种“变种”,如图2.5所示,其将MVC中的控制器合并至视图中,增加一个Presenter层,能够访问、更新视和模型,控制着视图的所有执行逻辑与视图和模型的同步。
(图2.5)
1.Spring框架
Spring是于2003 年兴起的一个轻量级的Java 开发框架,其是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
(图2.6)
1.1控制反转(IoC)
就是将创建对象并生命周期的管理过程交给Spring处理。在开发中不再需要关注对象的创建和声明周期的管理,其均由Spring框架来提供,这个由Spring管理创建对象和生命周期的机制称为控制反转。创建对象的权力转给Spring框架,由它帮我们创建,我们不再使用new关键词来创建对象。在初始化一个Spring容器时,Spring会解析spring的配置文件,根据标签中的class属性指定的类的路径名找到该类并通过反射来创建该类的Bean,并创建的Bean存入到内置的map容器中管理,其中存入map中的是该标签中的id值。当通过context.getBeans()方法来从容器中获取Bean时,根据id从内置的Map中寻找是否有匹配的值,如果有则返回对象,如果没有则抛出异常。
1.2面向切面(AOP)
面向切面编程是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。Spring可以使用两种方式来实现AOP,基于注解式配置和基于XML配置。
2.Hibernate框架
Hibernatenate是一个Java领域的持久化框架,一个ORM框架。其中,持久化指的是把对象或者是数据库相关的各种操作永久的保存到数据库中,通过ORM映射可以使得关系数据库的表中的记录映射成为对象,以对象的形式展现,这样,程序员就可以用对对象的操作来对数据库进行操作,对象-关系的映射可以采用注解的方式写在实体类代码中。
3.CXF框架
CXF由Celtix和XFire这两门经典的框架组成,是一套非常流行的Webservice框架。如图2.7所示,CXF依靠于Spring、Hibernate完成模块的集成,实现了常见的SOA方式。
(图2.7)
在第二节中,我主要对课程的内容进行了总结与概括,下面主要从几个实验来谈一谈在《软件体系结构》这门课的学习过程中我的收获与感悟。
调试的KWIC程序分别由五种架构风格实现,分别是抽象数据类型风格、黑板风格、基于事件驱动风格(包括显式调用和隐式调用两种)、主程序-子程序风格、管道-过滤器风格。另外,我还使用了比较大的文本对上述的程序进行了性能测试。
通过对KWIC程序的调试,我对上述的几种架构风格有了基本的了解,包括其执行的过程,优缺点等等,下面以基于黑板风格的KWIC实现为例来简要说明(其余的分析均在实验二:比较不同的软件架构风格中有所体现)。
黑板模式主要由三个重要的组成部分构成:黑板(Blackboard)、知识(KnowledgeSource)、控制组件(Control)组成。所有的组件都可以访问黑板(Blackboard)。组件可以生成添加到黑板上的新数据对象。组件在黑板上查找特定类型的数据,并通过与现有的知识源(KnowledgeSource)的模式匹配来查找这些数据。控制组件用来选择、配置和执行各个模块。其优点是:便于多客户共享大量数据,而不必关心数据是何时产生的、由谁提供的以及通过何种途径来提供。便于将构件作为知识源添加到系统中来。其缺点是:修改数据空间的结构非常困难,因为所有应用程序都受到了影响。可能需要同步和访问控制。
本门课程有关Spring案例的实验有两个,一个是Get Started Guides案例,一个是Spring petclinic案例,下面分别进行分析。
1.Get Started Guides案例
相较于Spring Petclinic案例,Get Started Guides案例还是比较简单的,按照教程一步步进行调试即可,在这次实验中,我第一次开始接触了Spring的相关概念,以及Maven项目管理工具等内容。(图3.1、3.2是Get Started Guides案例实验的部分截图)
(图3.1)
(图3.2)
2.Spring Petclinic案例
Spring Petclinic案例相较于Get Started Guides案例要复杂许多,分为Spring Boot和Spring Framework两种实现,其中Spring Framework需要自行配置Tomcat,运行的详细过程在实验三:Spring petclinic案例分析中已经详细地描述过了,因此在此便不再进行展示。
通过这次实验我了解了Tomcat的配置方法,以及Tomcat的下载安装、环境变量的配置、如何将输出结果改为中文以及如何在IDEA中对Tomcat进行配置。同时,通过本次实验我还了解了MYSQL的常见使用方法,包括MYSQL的下载与安装、常见MYSQL语句的用途、如何将*.sql文件导入到数据库中、如何修改数据库源,如何在一台设备上访问同一局域网下的另一台主机等等……
这些虽然不是软件体系结构的内容,但是通过对网上教程的学习以及课程的学习,我对Spring Boot和Spring Framework的框架有了更加深入了解的同时,我还学会了许多其他方面的知识,提高了自己检索信息的能力、动手能力以及解决问题的能力。
通过对CxfSpringHibernateServer程序的调试运行,我对CXF软件开发框架更加深入了解的同时,也对WebService有了一定的了解。
本次程序是我调试时间最长的一个程序,由于CxfSpringHibernateServer程序涉及到War包的配置与部署、Tomcat相关lib的导入、jdk版本的兼容性问题、Mysql的时区问题以及jdbc驱动的版本兼容性等等问题,我在查阅了很多的资料最后才能成功运行,在此,我对本次实验进行了简单的总结。
1.Tomcat的配置
如图3.3所示,在Model界面需要将Tomcat相关的lib进行导入,否则将会出现war包部署失败的问题。
(图3.3)
同时,如图3.4所示,在部署war包的时候也需要将lib加入进去
(图3.4)
2.MYSQL相关问题
2.1时区问题
由于源代码中连接数据库部分并未对时区进行设置,因此在实际运行的过程中有可能会出现时区问题,需要将代码改为
<property name="connection.url">jdbc:mysql://localhost:3306/Extrace01?
useUnicode=true&characterEncoding=utf-
8&useSSL=false&serverTimezone=Asia/Shanghai</property>
2.2jdbc驱动问题
对于8.x的MYSQL,由于程序中采用的是5.x的jar包,在连接数据库的时候会产生报错,因此需要将jar包更换成8.x的,同时需要将com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver
通过老师所布置的一系列实验,我对各种软件架构有了更多的了解,例如,通过KWIC实验,我对几种软件架构风格的特点、性能以及优缺点都更加的熟悉;通过Spring案例的分析,我对Spring MVC的响应过程也有了更加实际的了解,通过Restful风格实验的调试,我对CXF+Spring+HibernateServer的层模式更深刻地了解。除了课本上的内容之外,我觉得通过对本课程的学习,我在这一次次调试的过程中,学到了很多的课本之外的经验与方法。
网络上的资源是十分丰富的,在调试的过程中难免会遇到种种的问题需要我们自己去解决,因此,我们需要合适的检索方法与较强的阅读理解能力才能在网络上找到自己程序出错的原因及其对应的解决方法。虽然这门课程不要求我们自己动手写复杂的程序,但是我觉得在这一次次的调试中我的动手能力也得到了很大的提升,我对IDEA的开发环境也不再局限于JAVA编程中所用的很小的一部分功能。
四、我开发过的软件系统
1.主要技术
影院管理系统基于C语言进行开发,主要的技术有使用链表来对数据进行存储、查询、增加、修改、删除和导出;将用户输入的账户和密码与账户密码库进行比较判断,同时也实现了简单的密码遮盖功能;文件的建立、读写等。
2.软件的功能
该软件分为两个部分,第一个为用户选座系统,第二个为管理员系统,其中影院管理系统分为登录系统、影院管理系统以及票房统计系统。主要的功能如下:
2.1用户选座系统
包括自动生成座位数据、人工购票、查看座位信息等功能。
2.2管理员系统(登录系统、影院管理系统、票房统计系统)
登录系统包括登录界面的跳转、创建账号和修改密码等功能;影院管理系统包括查看查看电影放映信息、查看座位信息、插入放映信息、查找放映信息、删除放映信息、导出放映信息等功能;票房统计系统包括查看各场次上座率、查看各房间上座率、查看电影上座率和票房等功能。
3.软件系统结构
软件的系统结构如图4.1所示:
(图4.1)
该系统为团队合作制作而成,并非自己独立完成。
1. 软件的功能
1.1登录与注册
游客可以通过手机号进行登录与注册,还可以通过手机号进行密码重置。
1.2学生用户
学生用户可以对自己的信息进行修改与完善,还可以新建订单、查看历史订单、进行订单投诉以及进行余额充值等。
1.3接单员用户
接单员用户可以根据订单的信息来筛选订单从而进行接单,同时也可以查看自己的接单历史。
1.4管理员用户
对订单投诉进行处理
2.软件的部分原型
2.1登录注册原型(如图4.2)所示
(图4.2)
影院管理系统相关的源代码已经上传Github,相关链接为:https://github.com/timeran/C_Codes/tree/main/Source
大致可以分为三层,分别为数据采集层、数据处理层、数据输出层。
1.数据采集层
当程序启动时,定位相应的文件(包括Movie_info.txt、User_info、Version_info.txt文件),并将其导入至程序中,若未找到,则输出错误信息后抛出。
2.数据处理层
数据导入后需要对数据进行检查,防止有错误产生;同时对文件中的数据进行排序、排除重复处理。当用户对数据进行修改后,检查修改是否合法后,进行数据的更新处理。
3. 数据输出层
当用户需要相应的信息时(如需要进行购票、查看售出情况),系统将会调用相应的数据输出至屏幕上。
1.性能
该程序由于采用链表导入的方法,在程序启动前需要进行数据导入->数据检查->数据输出等一系列步骤。由于影院信息一般来说数据量并不是非常的大,因此其处理速度也能得到一部分的保证,但是,在系统启动之初就把所有的信息导入终归不是好的方法,因此,后期可以启动时先将部分数据导入然后根据用户的使用的情况再进行数据的调用。
2. 可用性
影院管理系统自设计以来已经过多个版本的迭代,目前最新的版本为3.4,系统的主要功能已经可以正常运行无错误,但执行过程中依然可能出现一些小问题需要更正。
3.伸缩性
正如前面所说,当用户数据量显著增大时,系统的处理速度将会收到比较显著的影响。
4.扩展性
由于软件设计之初就考虑到了可扩展性的问题,进行了分层次设计。因此,软件中的大部分功能都实现了模块化,对软件功能进行扩展将对其他功能几乎没有影响。
5.安全性
在系统启动后会对数据进行错误检查,在用户进行操作时也会进行错误检查,例如在选座时,若用户选择了不存在的座位或已被选择的座位,系统将会进行提示,并不会进行数据提交。同时提供了登录注册功能用来防止非法用户登录管理系统获得影院数据以及对放映信息进行查看、修改。不足的地方在于虽然输入密码时制作了密码遮盖,但是账号和密码依然均是明文的形式进行存储,容易泄漏。
影院管理系统主要采用的是主程序-子程序调用风格,其构件是各个主程序与子程序,连接器为不同程序之间的的调用返回机制。
以登录系统中的密码验证为例,当进入登录系统后,输入账号和密码,其中输入密码的过程中会调用密码加密函数Secretword进行密码加密,当用户提交账号、密码后系统将会调用账户密码匹配函数Match来将用户输入的账号密码同数据库中的已知账户密码进行匹配与比对,匹配完成后向登陆系统返回密码正确或密码错误信息,由登录系统决定下一步的操作。
我选择的是一款应用非常广泛的数据库软件MYSQL。MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的关系数据库应用软件之一。
该软件的源代码下载地址为https://dev.mysql.com/downloads/mysql/以下是对该软件的软件架构分析。
(一)软件结构
MYSQL的软件体系结构如图6.1所示,其大致可以分为三层。
(图6.1)
6.1第一层负责连接处理,授权认证,安全等等
每个客户端连接都会在服务器进程中拥有一个线程,服务器维护了一个线程池,因此不需要为每一个新建的连接创建或者销毁线程。当客户端连接到Mysql服务器时,服务器对其进行认证,通过用户名和密码认证,也可以通过SSL证书进行认证。一旦客户端连接成功,服务器会继续验证客户端是否具有执行某个特定查询的权限。
6.2第二层负责编译并优化SQL
这一层包括查询解析,分析,优化,缓存以及所有的的内置函数。对于SELECT语句,在解析查询前,服务器会先检查查询缓存,如果能在其中找到对应的查询结果,则无需再进行查询解析、优化等过程,直接返回查询结果。所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图。
6.3第三层是存储引擎
存储引擎负责在MySQL中存储数据、提取数据。存储引擎通过API与上层进行通信,这些API屏蔽了不同存储引擎之间的差异,使得这些差异对上层查询过程透明。存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信,而只是简单地响应上层服务器的请求。
1.性能
在第二层中有专门的应用进程负责对SQL语句进行优化处理,以及对相关数据进行缓存,因此MYSQL才能大规模的数据的查找和并发。
2. 可用性
毫无疑问,MYSQL作为最流行的关系数据库之一,其可用性自然无需怀疑。
3.伸缩性
当数据显著增大时,MYSQL依旧能够对数据进行处理,甚至能够支持多人对同一数据对象进行查询。
4.扩展性
MYSQL依旧采用分层模式进行处理,因此若相对功能进行扩展,在相应层次进行扩展即可。
5.安全性
MYSQL从多方面、多角度保护数据的安全。MYSQL要求连接数据库时要提供账户密码,自然是防止非法用户对数据库的访问;同时,MYSQL还提供诸多完整性检查机制和数据恢复机制,尽最大努力保护数据库的完整性以及数据的安全性。
MYSQL数据库采用了客户-服务器风格架构、层次风格架构等软件架构风格。
1.客户-服务器风格架构
客户端发送请求后,sql语句就相当于接口的参数,发送到mysql服务端进行执行。mysql连接池接收到请求后,将sql语句交给sql接口处理。这个过程体现了客户-服务器架构。
2.层次风格架构
如图6.2所示,正如前面所介绍的那样,MYSQL将功能主要分成了三层,每层都与下层进行数据的交互。
(图6.2)
七、选择非开源软件一个软件系统进行分析
以QQ音乐播放器为例,想要进行播放操作,就必须至少进行读取、解析、渲染音频三个步骤。
读取(IO):即获取内容,可以从本地缓存中获取,也可以从Web服务器上获取。
解析(Parser):根据获取的内容不同,需要采用不同的协议来对音频文件进行处理。
渲染(Render):通过扬声器和屏幕来展示获取的内容。
将上述三个功能串起来,就可以得到播放过程的数据流,如图7.1所示。
(图7.1)
1.性能
QQ音乐在全国拥有三亿多的用户数量,需要承受非常庞大数据量的访问与传输,但很少出现崩溃的现象。
2. 可用性
QQ音乐作为当下最流行的音乐播放器之一,其主要功能还是音乐播放。
3.扩展性
QQ音乐通过版本迭代来实现功能的更新,其作为商业软件,每次版本更新肯定在现有的基础上在各层次进行功能的扩展,不可能都会对软件所有构件进行重构来实现。
4.安全性
QQ音乐通过QQ/微信登录的方式来识别用户,同时用户对底层的数据是不可见的,因此,保证了数据的安全性和用户的隐私。
如图7.2所示,QQ音乐的软件体系结构风格可能有层次风格架构、表示分离风格架构等。
1.层次风格架构
QQ音乐的播放功能可能会采用下图7.2所示的层次架构,当然对于整体应用来说,采用的应当也是层次架构风格,最起码包括自定义视图层、最底层的数据层。
(图7.2)
2.表示分离风格架构
由于对于商业软件来说,用户界面是最容易变化的一部分,因此,更改用户界面应该不影响系统的核心功能,所以QQ音乐应该也会使用表示分离风格架构来保证用户界面的更新不会影响到它的功能。
更多推荐
所有评论(0)