魔方系统架构设计说明书v1.0.doc_第1页
魔方系统架构设计说明书v1.0.doc_第2页
魔方系统架构设计说明书v1.0.doc_第3页
魔方系统架构设计说明书v1.0.doc_第4页
魔方系统架构设计说明书v1.0.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

范文范例参考魔方系统架构设计说明书Version 1.0Revision History日期版本描述作者审核2013.02.271.0文档生成目 录1文档说明52系统说明52.1系统目的52.2系统背景52.3系统服务52.4非功能需求63整体结构63.1架构表示63.2架构因素73.3技术决策73.3.1问题:抓取屏蔽73.3.2问题:大数据量存储83.3.3问题:渠道适配器的适应性93.4子系统93.5逻辑视图93.5.1总体架构图93.5.2技术架构103.5.3WEB前端123.5.4抓取机器人133.6物理架构143.6.1部署视图143.6.2网络拓扑图153.6.3硬件设备153.6.4硬件采购163.7开发视图173.7.1开发框架概述173.7.2开发框架分层173.7.3项目工程及目录结构183.7.4项目工程包依赖关系193.7.5开发技术框架使用列表203.7.6版本控制203.7.7构建及测试203.7.8开发环境(虚拟机)搭建203.8数据视图203.8.1数据流视图213.8.2RDBMS数据结构213.8.3HBase数据结构223.9运行视图233.9.1整体运行架构233.9.2WEB前端233.9.3抓取机器人243.10用例视图293.11安全视图303.11.1身份认证303.11.2权限控制303.11.3用户身份认证及授权可选方案313.11.4数据库安全性313.11.5网络安全314接口设计325领域框架326监控327架构能力337.1可扩展性337.1.1系统可扩展性337.1.2架构可扩展性337.2可运维性338风险评估348.1抓取机器人IP遭目标网站屏蔽348.2目标网站数据格式改变349总结341 文档说明本架构设计文档主要用来描述运价魔方的架构分析决策,同时也作为帮助开发人员迅速了解本系统的参考文档。2 系统说明2.1 系统目的运价魔方通过互联网到航空官网以及各大网站进行数据采集,存入运价数据中心库,通过对数据进行全面的监控和科学分析,将有价值的数据提供给航空公司、代理人作决策支持。2.2 系统背景目前航空公司是通过人工上网搜索各航空公司官网及各相关网站的航线的运价信息,手工录入excel,然后再手工制作报表,所有的操作都是通过人工进行的。业务人员希望通过运价信息抓取的自动化,及运价查询,报表等的自动化,来降低运维人员的工作量,同时提高精确度,避免人为错误导致的数据偏差,提高数据分析效率。2.3 系统服务本系统作为一个面向浏览器的系统,将会提供一个WEB系统入口,用来进行日常的运营数据分析及数据抓取设置管理,主要功能如下图所示:2.4 非功能需求安全性:系统有严格的安全要求,数据传输、存储过程中需要加密。稳定性:系统要求具有高稳定性。可维护性:系统具有高可维护性,允许在非高峰生产时间段进行系统的升级,系统升级时间30分钟;高峰生产时间段,系统出现问题需要在5分钟内能够恢复或切换到备机。性能:最大同时在线人数500,最大同时并发人数50。可扩展性:系统要提供可扩展的接口。3 整体结构3.1 架构表示此软件架构文档从以下几个方面来描述软件架构:1. 逻辑视图-最重要的层的概念性的组织方式,子系统,包,框架,类,接口等,及描述主要的功能及结构。2. 数据流视图-数据流的总览,持久化数据方式,所使用数据库等。3. 部署视图-描述物理部署节点及各节点的配置。4. 技术架构-描述所选用的主要技术。5. 开发视图-主要描述项目目录组织,如何进行构建及执行冒烟测试。如何进行版本管理等。6. 用例视图-包含最重要的或者有代表性的用例或用例实现及非功能性需求。7. 安全视图-主要描述哪些安全性被应用到系统。8. 运行视图-主要描述系统处理过程,各逻辑元素的责任,协作等。3.2 架构分析3.2.1 整体架构分析3.2.2 关键架构因素因素测量跟质量场景变化(当前及未来)影响程度优先级困难或风险反抓取屏蔽由于抓取任务是定时器任务,具有规律性,可能会被目标网站给屏蔽或者其他措施给限制。当前-使用代理服务器的方式来反屏蔽。进化-未来抓取目标会增多及抓取频率会增大。高度影响,抓取的数据是整个系统的核心数据。高高大数据量存储由于航空票价变化较频繁,我们得到的需求是初期100条航线13个渠道,每小时抓取一次,范围是之后45天之内的数据。这样每小时就会有45*13*100=58500条数据存储。当前-使用HBase进行存储抓取回来的运价数据,使用Oracle来存储运营数据。进化-随着目标的增多及频率的增大,数据量会越来越大。高度影响,如存储性能太低,会大大影响用户体验。高中渠道适配器的适应性由于抓取的目标文件格式可能是各种文本格式,包括txt,xml,jason,而每种格式的数据结构不同,即使是同一种格式,随着网站的改版,数据结构也可能发生改变。当前-专门针对目标编写特定的适配器。进化-随着需求的增加及网站改版,特定的目标格式会增多。中度影响,会影响系统的运营及扩展。但对系统最终用户的影响较小。对系统运维人员影响较大。中高3.3 技术决策3.3.1 问题:抓取屏蔽解决方案概括:使用改变ip的方法来应对。因素自动改变ip解决方案当前,我们使用代理服务器来运行机器人抓取任务。随着频率的增大,我们需要更多更稳定的代理服务器来满足我们的业务需求,即使ip遭到屏蔽,由于可能伤害到其他普通ADSL用户,所以也不大可能永远屏蔽,过一段时间ip解除屏蔽后,这些代理服务器又可以实现复用。所需要的代理服务器数量的计算方法:假设频率至少为5分钟/ip才不会遭到屏蔽,根据初期需求,每个渠道每小时内有4500个请求,五分钟内就有375个请求,这样的话就至少需要375个代理服务器ip才可以避免被屏蔽,我们就会保持在ip地址池中至少有375个ip是可用的。代理服务器ip获取方法可以有如下几种方式:1. 通过网络扫描,自动获取。2. 通过向专业服务商购买。第二种方式目前我们供应商给我们的数据是300元/月,有15万个ip可用。这个目前来说足够满足我们的需求了。动机运价数据是整个系统的中心,用户希望系统能够稳定地抓取数据,有稳定的数据来源。以支持后续的数据分析及查询。3.3.2 问题:大数据量存储解决方案描述:使用云计算平台因素需要支持海量数据存取。解决方案目前数据量还不大的时候,我们使用HBase来存储抓取的运价数据,经过对比之后把变化的数据保存入数据库。随着数据的增大,以及并发的增加,我们会考虑使用Hadoop云计算平台来支持大数据量的快速存取。同时使用Memcache缓存来加快查询速度,对于某些功能,比如最低价查询,我们还会使用预处理的方式先把最低价保存在一张表中,加快处理速度。动机随着数据量的增大,如果用普通的关系型数据库,很快会面临性能问题,一旦性能有问题,用户体验就会大打折扣,试想每次查询都要等几十秒钟甚至几分钟,那很快用户就会失去耐心,很快就会抛弃你的系统。所以保持快速响应是非常重要的目标之一。3.3.3 问题:渠道适配器的适应性解决方案描述:提供自定义适配器的界面。因素提供多种方式让适配器或者解析方式是可配置的。解决方案1 用户可以用java编写自己的渠道实现(实现IPlaneService),系统会根据配置自动加载相应的渠道实现。2 可以使用规则引擎或者动态语言提供另外一种除java之外的适配器编写方式。以上2种方式不需要重新启动服务器就能让新的适配器生效,但缺点是需要运维人员具备相应语言的开发能力。3 提供界面让用户自定义数据节点对应,以xml为例,用户指定航班号,起飞时间,航空公司等应该对应什么节点,然后xml通用适配器就会取得对应节点的值把它作为航班号,起飞时间,航空公司等,类似可以指定所有其他的节点对应关系。最后xml通用适配器取完所有的值之后就存入数据库。Jason格式也类似,也会有jason通用适配器来处理。动机系统运维人员希望系统上线之后,如果遇到目标网站改版,添加新的抓取渠道等要修改适配器或者添加适配器的时候,能尽可能简单,同时尽可能把成本降到最低。3.4 子系统本系统从逻辑上可以分为2个子系统:1 WEB前端子系统:前端用户界面,提供运价查询,抓取设置管理等用户接口。2 抓取机器人子系统:读取用户在WEB前端设置的任务,按计划运行。3.5 逻辑视图3.5.1 总体架构图Figure 1 总体架构图3.5.2 技术架构Figure 2 Web前端子系统技术架构Figure 3 抓取机器人技术架构3.5.3 WEB前端WEB前端项目层次如下:Figure 4 前端框架层次图基于DDD思想,具体框架描述详见3.6.1开发视图/开发框架概述及开发框架分层。3.5.4 抓取机器人 类图Figure 5 抓取机器人类图详细运行机制可参照抓取机器人的运行视图。3.6 物理架构3.6.1 部署视图Web前端跟抓取机器人分开不同的机器运行,以使对对方的影响降到最低,也降低Web跟抓取机器人之间的耦合。Oracle单独一台机器,HBase也独立出来,方便水平扩展,也令对其他系统的影响降到最低。3.6.2 网络拓扑图详细服务ip及端口说明:3.6.3 硬件设备架构各层次节点对硬件的要求对照表(供参考):CPU内存磁盘备注Load Balancer高高一般无应用服务器高高一般无抓取机器人服务器高高一般无Memcache服务器高高一般无HBase服务器高高高无数据库服务器高高高无初期需投入的设备设备数量用途和备注LVS1负载均衡服务器应用服务器2部署Web前端抓取机器人服务器2部署抓取机器人HBase服务器4部署HBase Master及Slaver数据库服务器1部署Oracle3.6.4 硬件采购部署项目部署应用数量(台)硬件需求备注hadoop集群、Zookeeper集群及Hbase集群1hadoop分布式文件系统主节点1CPU双核3.2G内存:8G硬盘:300G2JobTracker:hadoop分布是计算框架任务调度节点3Hmaster :HBase数据库主节点4QuorumPeerMain :zookeeper集群节点1SecondaryNameNode :hadoop文件系统备份节点1CPU 双核3.2G内存:8G硬盘:300G2HMaster:Hbase数据库备用主节点3QuorumPeerMain :zookeeper集群节点1DataNode :hadoop分布式文件系统数据节点5CPU双核3.2G内存:8G硬盘:4T2TaskTracker :hadoop分布式计算框架计算节点3HRegionServer :HBase数据库数据节点4QuorumPeerMain :zookeeper集群节点抓取引擎服务器crawlServer1、crawlServer2 3CPU双核3.2G内存:8G硬盘:300G代理服务服务器ProxyServer1CPU双核3.2G内存:8G硬盘:300Gweb应用服务器JBOSS服务器 1CPU双核3.2G内存:8G硬盘:300G数据预处理服务器DataProcessServer1CPU双核3.2G内存:8G硬盘:300G数据库服务器Memcache缓存服务器数据库服务器1CPU双核3.2G内存:8G硬盘:500G3.7 开发视图3.7.1 开发框架概述运价魔方基于恒拓开源的开发框架进行开发:/p/dddlib/。目的是支持快速开发,减少冗余代码和配置文件的编写,避免花大量时间搭建持久层等基础设施层,使开发人员可以立刻针对对业务进行编程。开发框架基于DDD思想,且不耦合具体的IoC容器(Spring,Guice),持久层框架(Hibernate、JPA、JDBC),能够尽可能保持核心业务层(即领域层)的纯净,提供最大限度的重用。开发框架功能列表: 不依赖IoC容器,适配多种IoC容器:Spring/Guice(Google)/Tapestry IoC 不依赖持久层框架,支持多种主流实现:JPA/Hibernate 提供一系列工具类和模式重用:Excel/Script Engine(脚本引擎,JSR223)/Rule Engine(规则引擎支持,JSR94)/Observer模式 单元测试基类:提供DBUnit,数据库事务等支持,不必重复搭建 核心业务保留在领域层,高重用 不必重复搭建基础设施 立刻针对业务进行开发 十分便捷的支持持续集成:持续构建,一键发布,构建结果反馈(邮件、MSN、GTalk)3.7.2 开发框架分层图表 3.71 开发架构分层示意图展现层:负责为用户提供用户界面,接收用户的输入参数,提交给应用服务层执行相应业务操作,并接收应用服务层的返回结果展示给用户,其直接依赖于应用服务层。应用层:向外提供业务功能服务,它只负责系统应用级别的逻辑如事务控制、权限控制、日志处理等,以及少量的跨领域对象的业务逻辑,它通过领域层的领域对象仓库获取相关的领域对象,然后调用领域对象的方法完成相应的业务,再把业务结果封装到数据传输对象(DTO)中返回给展示层,这里的DTO是作为展示层与应用服务层的数据载体,它负有装载请求数据和结果数据的职责。领域层:包含业务领域内的一系列相关领域服务(传统的Service层),领域对象及其仓库接口,领域对象封装其领域内的业务逻辑,领域对象通过其仓储接口获取和持久化。仓储实现层(数据访问DAO层):提供领域对象的持久化实现,它的作用是把领域对象的具体持久化实现细节封装起来。该层只提供持久化实现,持久化操作的接口由领域层定义,因此,该层依赖于领域层提供相关领域对象的数据结构和持久化操作接口,即仓储接口。下图展示了系统各逻辑层之间的关系:图表 3.72 开发框架各层次逻辑关系图3.7.3 项目工程及目录结构使用Eclipse3.7作为开发环境,同时利用Maven3.0.4进行项目管理,使用一个开源的Maven插件m2eclipse搭建基于Maven目录结构的开发环境,使用该工具,生成如下的目录结构:图表 3.73 项目工程结构一图中的“taluo”是整个项目的根工程,下面的pom.xml是根工程的Maven项目管理文件,m2eclipse会自动导入根工程下的5个子工程,这些子工程对应于“功能模块”章节中描述的各个子模块和层次。导入后如下图所示:图表 3.74 项目工程结构二下图是子工程的目录结构:图表 3.75 子工程目录结构上图为子工程“taluo-core”,src/main/java目录放置的是Java源代码文件,src/main/resources目录放置的是相关资源文件(如SpringContext等),src/test/java目录放置的是Java测试用例源代码文件,src/test/resources目录放置的是Java测试用例的相关资源文件。JRE System Library和Maven Dependencies放置的是JRE的类库和由Maven管理的第三方依赖类库文件,target是工程的编译输出路径,可以通过Eclipse配置进行选择,一般选用target作为编译路径。 pom.xml是子工程的Maven项目管理文件。WEB应用子工程的目录结构与其他JAR子工程的目录结构基本一致,唯一的不同是在src/main目录下面需要放置一个webapp目录,里面按照web应用的标准目录结构放置jsp等页面资源文件,同时webapp目录下的WEB-INF下需要有个web.xml文件。Figure 6 抓取机器人工程目录结构由于抓取机器人功能简单且独立,我们把他作为一个单独的工程。采用Maven标准的目录结构。3.7.4 项目工程包依赖关系子工程包之间的依赖关系已经在“功能模块”的“核心领域层”中有图示说明。3.7.5 开发技术框架使用列表语言平台:JDK 1.6.0开发工具:Eclipse 3.7(插件:m2eclipse,subclipse)开发数据库:Oracle10构建工具:Maven3.0.4开发框架:基于/p/dddlib框架(Struts、Spring3.1.2.RELEASE、Hibernate3.5.6-Final)3.7.6 版本控制使用SVN进行版本控制,同时在eclipse安装Subclipse插件,可以在Eclipse里面方便地进行源代码的checkin及checkout操作。3.7.7 构建及测试用构建工具Maven进行构建,然后发布到应用服务器(Tomcat)进行测试。Maven可以方便地进行项目的编译,打包,项目报告,及文档化。3.7.8 开发环境(虚拟机)搭建搭建开发环境可以把Web前端跟抓取机器人部署到同一台机器上,HBase只用一台Slaver,这样的话总共需要4台服务器。在虚拟机上虚拟4台服务器分别安装上图所示的服务器,推荐用C档的服务器来安装虚拟机。3.8 数据视图3.8.1 数据流视图抓取机器人定时从目标网站上抓取数据,经过分析提取,保存入HBase数据库。这个是整个系统关键的数据来源。3.8.2 RDBMS数据结构3.8.3 HBase数据结构Row-keyTimes tampColumn Family:“PlaneInfo”起点城市_终点城市_起飞日期_抓取渠道_航空公司_航班型号_倒置的抓取时间戳T1carrierKey:MUT2carrierName:航空公司T3carrierFullName:中国海航空公司空公司T4flightBatch:MU3540T5flightBatchDate:2012-05-19T6flightBatchStartTime:19:30:00T7flightBatchEndTime:21:30:00T8lowprPrice:最低价格T9highPrice:最高价格T10agentName:最低价代理商信息由于HBase是非关系型数据库,跟关系型数据库有很多不同,如它不支持直接查询一个日期区间航班的最低价,需要取出所有价格进行迭代找出最低价,所以对于某些功能,如最低价查询,我们会使用预处理的方式来加快处理速度,把每个渠道每天指定航线的最低价找出存入HBase,最低价表如下所示:Row-keyColumn Family:“FlyInfo”起点城市_终点城市_起飞日期_抓取渠道_倒置的抓取时间戳carrierKey:MUcarrierName:航空公司carrierFullName:中国海航空公司空公司flightBatch:MU3540flightBatchDate:2012-05-19flightBatchStartTime:19:30:00flightBatchEndTime:21:30:00lowestPrice:最低价格planeModel:航班型号agentName:最低价代理商信息上表为最低价信息表,用来存储每个渠道每条航线的最低价信息,根据这张表可以快速查询到各个渠道每条航线的最低价信息。3.9 运行视图3.9.1 整体运行架构上图展示了当客户端请求发起的时候,整个运行的序列图:1. 客户端用户操作浏览器中的页面,发起请求2. LVS接收到请求之后,根据调度策略把请求分发到对应的Web Server上去。3. Web Server处理请求4. Web Server返回响应。3.9.2 WEB前端Figure 7 WEB前端子系统运行架构上图展示了用户发起请求的时候Web前端系统的运行序列图:5. 客户端用户操作浏览器中的页面,发起请求。6. Action收到请求。调用Service。7. Application收到请求处理业务逻辑,调用Domain领域层。8. Domain调用Repository对数据进行持久化。3.9.3 抓取机器人 总体运行视图Figure 8 抓取机器人运行视图上图展示了抓取机器人的运行序列图:1. 用户启动抓取机器人。2. 抓取机器人读取数据库的配置。3. 生成相应的计划任务。 渠道实现的总体运行视图上图展示了渠道实现的总体运行序列图:1. 抓取任务根据配置调用相应的渠道实现。2. 渠道实现调用HttpClient。3. HttpClient(HTMLUnit)调用ProxyIPFactory获取代理ip。4. HttpClient发送请求给目标网站。5. 目标网站返回数据。6. 抓取任务获得数据并提取。7. 保存如HBase数据库。 渠道实现的详细运行视图步骤:1. 创建代理主机proxy。2. 创建post请求对象post。3. 创建HttpClient。4. 设置HttpClien的代理为之前创建的proxy。5. 循环设置post请求的header。6. 调用HttpClient的execute方法以post为参数。7. 获得response。8. 检查response的encode属性如果为gzip,需要对其进行解压。9. 对获得的响应进行提取。步骤:1. 以返回的InputStream流is为参数创建gzip流的读取流GZIPInputStream。2. 创建输出流os用来保存解压之后的is。3. 创建缓存数组data。4. 循环将is读入到data,然后将data里面的二进制字节写入os。5. 将os转换成InputStream,返回。步骤:1. 创建DocumentBuilderFactory。2. 在创建的DocumentBuilderFactory对象上调用newDocumentBuilder生成DocumentBuilder对象parser。3. 在parser上调用parse方法以输入流is作为参数,返回的对象就是W3C的Document对象(JAXP)。4. 创建XPathFactory对象用来取xml的数据。5. 在刚才创建的XPathFactory对象上调用newXPath方法,返回一个XPath对象xpath。6. 用xpath在Document对象上循环取值并创建PlanInfo对象用来保存取得的值,然后将PlaneInfo对象加入到之前创建的ArrayList对象list。7. 返回list。3.10 用例视图用例1:抓取目标数据范围:抓取机器人级别:子功能级别主要参与者:定时器(系统时钟)涉众及其关注点:-用户:希望能够定时,稳定地获取目标网站的数据。前置条件:定时起必须已经启动。成功保证(或后置条件):获取到目标网站的数据并提取然后保存至数据库。主成功场景(或基本流程):1. 抓取机器人读取数据库内要抓取的航线的配置。2. 生成任务。3. 抓取目标网站的数据。4. 对返回数据进行分析提取。5. 保存结果到数据库。扩展(或替代流程):*a.在任意时刻失败:1.记录本次失败任务。2.下次重新执行本次失败的任务。发生频率:频繁发生。用例2:添加预警规则范围:WEB前端级别:用户目标主要参与者:用户涉众及其关注点:-用户:希望能够快速,准确地添加预警规则。前置条件:用户必须登录至系统。成功保证(或后置条件):存储预警规则。主成功场景(或基本流程):6. 用户打开预警规则管理页面。7. 点击“添加”按钮,进入添加预警规则页面。8. 在添加页面输入所需的所有必要信息。9. 点击“保存”按钮,返回到预警规则列表页面。扩展(或替代流程):*a.用户在任意时刻点击“取消”按钮:1.返回预警列表页面发生频率:可能会不断发生。未决问题:1.不存在的航线是否自动添加?3.11 安全视图3.11.1 身份认证用户必须通过身份认证才能登陆运价魔方。每个用户都必须登陆(HTTPS/Spring Security),系统验证用户名和密码是否匹配。运价魔方的登录验证流程,与大多数B/S结构的系统相似,如下:1. 系统用户访问系统2. 如果用户尚未登陆,则重定向到login.jsp页面3. 用户输入用户名和密码4. 系统根据用户名和密码,结合数据库存储的信息进行验证5. 验证通过则允许进入系统,否则拒绝3.11.2 权限控制基于开源的权限管理系统(Spring Security)。Spring Security 是一个基于角色及资源的权限控制系统,可以过滤所有基于http的资源请求。提供的主要特性如下: 与Spring集成非常易于配置。 非侵入式设置。 可插拔的架构。对于客户端系统而言,只需要如下几个步骤,即可完成系统功能权限控制:1. 在web管理界面上,把系统需要管理的资源和请求录入到权限管理平台上2. 在web管理界面上,定义好角色,对角色进行功能权限授权,同时把账号关联到对应的角色3. 在客户端系统的web.xml中配置Filter,如果使用Spring需要定制行为,只需要加入对应的xml配置即可3.11.3 用户身份认证及授权可选方案Java Authentication and Authorization Service (JAAS):J2SE的标准API。3.11.4 数据库安全性借助Oracle强大的数据库活动监控和分块、授权用户和多要素访问控制、数据分类、透明的数据加密、统一的审计和报表编制、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论