当前位置:文档之家› 软件体系结构报告

软件体系结构报告

深圳大学实验报告软件体系结构一、实验目的1.了解基于用例的软件体系结构设计/重构过程;2.了解和运用软件体系结构风格/模式来提高应用的可扩展性、可伸缩性和可用性; 3.掌握在设计文档支持下进行应用系统重构的开发技术。

二、实验内容1.根据“网上相册”系统的用例说明文档、架构设计文档(设计指南)和源代码,对该应用的体系结构进行分析;2.对“网上相册”系统进行重构设计,改善其性能、可扩展性和可伸缩性,并使该应用可以部署于Web Farm(即由多台Web服务器组成的机群,将访问负载平衡分配到各台机器)上; 3.使用Microsoft Application Center Test工具对重构前和重构后的“网上相册”系统进行测试,验证你的体系结构重构效果;4.增加“好友管理”、“查看好友共享的相片”和“相片查询Web服务”功能,并依此分析“网上相册”系统在重构前和重构后的可维护性的变化。

三、实验方法和步骤1.网上相册系统的体系结构特点分析如下:1) 应用了3层结构与MVC模式,表示层、业务逻辑层与持久层的分离较清晰。

其优点是:便于组织协作开发;可测试性较好;如果该系统的功能扩展不引入更多的逻辑概念(分析类),则系统中各组件之间耦合较低,可扩展性和可维护性较好。

缺点是:如果该系统的功能扩展不引入更多的逻辑概念(分析类),则系统中各组件的内聚性较低,为可扩展性和可维护性带来影响。

2) 组件之间的交互通过工厂方法和接口完成,数据传递依靠Hash表、无类型DataSet,以解决组件之间交互的对象模型一致问题。

其优点是简化了接口的设计和适应性;其缺点是:缺少编译时类型检查;降低了效率。

3) 由于使用Session对象,简化了跨HTTP的状态保持问题,但会对系统在Web集群中部署、运行带来不利结果,影响了系统的可伸缩性。

综合以上分析,可得出原系统在体系结构设计上的不足。

具体表现如下:(1)原系统的页面处理流程如图1所示。

收到HTTP请求进行用户验证重新装载用于显示的数据响应用户动作,处理输入数据生成HTML代码是否需要跳转?结束跳转到其它页面图1 原《网上相册》系统的页面处理流程(2)考虑到《网上相册》系统可能的业务变化,对原系统需进行的相应修改/扩充评估如下: , 业务模型类(即分析类)增加新字段。

此时需要在WebForm上增加新的输入域;在类型化DataSet中的相应DataTable中增加新字段并重新进行代码生成和编译;修改并编译相应WebForm后端代码;修改CategoryController和PhotoController类;修改CategoryModel和PhotoModel类;在相应数据库表中增加新字段并修改存储过程。

综上所述,需要对原有Web、Controller、Model、Utils组件进行修改和重编译,并修改原有的数据库层;, 增加新的业务模型类。

此时不仅需要在Web、Controller、Model、Utils组件和数据库层中增加新的代码,还需对原有的部分页面控制器代码(包括WebForm后端代码和CategoryController、PhotoController类)进行修改;综上所述,原《网上相册》系统仅是简单地应用三层风格和(基于页面控制器的)MVC模式,未针对可能的业务变化进行有针对性的体系结构设计。

具体说来,主要有以下缺点可以进行改进: , 每个页面的后端代码中均需要调用er 类的方法进行用户验证; , 由于应用基于页面控制器的MVC模式,涉及输入处理和流程控制的部分业务逻辑分散在Web组件中的WebForm后端代码和Controller组件中的CategoryController/PhotoController类中,不便于封装可能变化的部分;, 有关相片和相夹的业务逻辑之间本质上耦合程度较高,但确划分到两个控制器类和两个模型类中,反而影响了可扩展性;, CategoryController/PhotoController类与CategoryModel/PhotoModel类分别划分到Controller组件和Model组件中,但其之间的耦合仍较高;, WebForm后端代码中含有较多的输入聚合、输入验证、输入处理和用于显示的数据装载等逻辑,其中有较多的重复/类似代码难以重用。

(3)Web应用最重要的性能是Web服务器的处理吞吐量,最常见的是使用每秒处理的请求数来进行衡量。

主要的性能和可伸缩性改进方法包括:降低Web服务器的处理负荷(将部分处理负荷交由客户端或数据库服务器去完成),以及应用负载均衡群集。

原系统中,Web服务器和数据库服务器部署于同一台服务器上,虽然减少了部分网络传输开销,但单台服务器同时作为Web服务器和数据库服务器,会导致对服务器的处理能力要求过高,难以适应较大的访问量;原系统中,使用InProc方式的Session对象来完成跨HTTP请求的状态管理,导致系统无法部署于通常的负载均衡群集上。

另外,增加缓存系统也可大幅度提高应用的性能。

原系统基本未使用任何系统的缓存方式来提高系统的性能。

(4)Web应用中,提高可靠性的最基本的方案是应用负载均衡群集/故障转移群集。

其中,数据库服务器通常可使用故障转移群集(多机热备系统),Web服务器通常使用负载均衡群集。

原系统中Web服务器和数据库服务器均未应用任何群集技术。

2.根据以上对系统体系结构的分析,对“网上相册”系统进行重构设计,改善其性能、可扩展性和可伸缩性,并使该应用可以部署于Web Farm上。

具体改进策略如下:, 用户验证交由独立的HttpModule完成,并应用策略模式,不但令WebForm 后端代码中无需加入用户验证代码,也使得系统可以灵活地配置用户验证策略,提高了系统的可测试性(因使用ACT进行压力测试时,真实的用户验证逻辑将大大增加测试脚本的复杂性,不便于利用录制的方式生成测试脚本)。

, 将Model组件中的CategoryModel和PhotoModel类的功能合并,提高内聚性;, 将输入验证功能交由WebForm上的Validator控件实现;, 将原由页面控制器完成的每个页面的输入处理/数据装载逻辑进一步分解成粒度较小的Action类,并应用反射工厂模式和Command-Chain模式,使之可以在配置文件中针对各个页面进行配置;, 将原先分散在不同的WebForm后端代码中的聚合客户端提交数据的逻辑改由前端控制器根据配置信息完成,既减少了重复代码,又提高了可测试性;, 将原有的与相片/相夹相关的业务逻辑代码(包括action类、Model类)均划分到一个Photo组件中。

新增加的业务模型类同样根据业务概念之间的内聚性划分为不同的组件;, 应用IoC模式,由前端控制器将Action类装载的(用于显示的)数据以数据集方式传递给x相应WebForm,使得Web组件与业务逻辑组件之间完全解耦,配合使用数据绑定技术,使得增加新的业务模型类时,无需修改WebForm后端代码,避免了对Web组件的重编译(只需修改.aspx文件即可);新增加的页面既可以放入Web组件中,也可以划分到新的表示层组件中;, 改进跨HTTP请求的状态管理。

自定义的跨HTTP请求状态管理方案,此方案需要自行编写状态管理代码,虽然增加了工作量,但效果较好。

, 在数据访问层和表示层均增加缓存机制,提高系统的性能。

类似于状态管理方案,缓存机制也必须考虑能否部署于群集系统中;, 数据库服务器使用两台服务器、两台光纤交换机和一台双端口磁盘阵列服务器建立一个双机热备系统,以提高数据库服务器的可靠性;, Web服务器使用两台或多台服务器构成一个基于DNS的负载均衡群集,一方面可提高系统的性能和可伸缩性,同时亦可提高Web服务器的可靠性。

3.使用Microsoft Application Center Test工具对重构前和重构后的“网上相册”系统进行测试,验证你的体系结构重构效果。

验证结果如下:浏览器同时连接数 1 2 1 2每秒平均请求响应数 638 308 712 370从以上图表的数据可以得出重构后比重构前的性能提高平均为15%.4.增加“好友管理”、“查看好友共享的相片”和“相片查询Web服务”功能.对原系统修改如下:增加的文件:BrowseFriendPhoto.aspx //浏览好友相片夹ListFriendCategories.aspx //列出好友列表ManageFriends.aspx //管理好友,对好友进行添加、删除ViewFriendPhoto.aspx //查看好友相片QueryPhotoService.asmx //相片查询Web服务增加的Action:LoadFriendsAction.cs //加载好友列表功能系统在重构前和重构后的可维护性的变化重构前重构后可理解性由于使用了页面控制器风格,故当系统功能较由于使用了前端控制器风格和反多时,控制器代码较为分散,不利于理解整个射工厂技术,系统结构清晰,功系统的构架设计和代码实现。

能模块化,便于理解和分析系统结构和代码实现。

可测试性可扩展性可伸缩性部署方面。

相关主题