当前位置:文档之家› 魔方系统架构设计说明书v1.0

魔方系统架构设计说明书v1.0

魔方系统架构设计说明书

Version 1.0

Revision History

日期版本描述作者审核2013.02.27 1.0 文档生成

目录

1文档说明 (5)

2系统说明 (5)

2.1系统目的 (5)

2.2系统背景 (5)

2.3系统服务 (5)

2.4非功能需求 (6)

3整体结构 (6)

3.1架构表示 (6)

3.2架构因素 (7)

3.3技术决策 (8)

3.3.1问题:抓取屏蔽 (8)

3.3.2问题:大数据量存储 (9)

3.3.3问题:渠道适配器的适应性 (9)

3.4子系统 (10)

3.5逻辑视图 (10)

3.5.1总体架构图 (10)

3.5.2技术架构 (11)

3.5.3WEB前端 (13)

3.5.4抓取机器人 (14)

3.6物理架构 (15)

3.6.1部署视图 (15)

3.6.2网络拓扑图 (16)

3.6.3硬件设备 (16)

3.6.4硬件采购 (17)

3.7开发视图 (18)

3.7.1开发框架概述 (18)

3.7.2开发框架分层 (18)

3.7.3项目工程及目录结构 (20)

3.7.4项目工程包依赖关系 (21)

3.7.5开发技术框架使用列表 (21)

3.7.6版本控制 (22)

3.7.7构建及测试 (22)

3.7.8开发环境(虚拟机)搭建 (22)

3.8数据视图 (22)

3.8.1数据流视图 (22)

3.8.2RDBMS数据结构 (23)

3.8.3HBase数据结构 (23)

3.9运行视图 (24)

3.9.1整体运行架构 (24)

3.9.2WEB前端 (25)

3.9.3抓取机器人 (26)

3.10用例视图 (30)

3.11安全视图 (32)

3.11.1身份认证 (32)

3.11.2权限控制 (32)

3.11.3用户身份认证及授权可选方案 (33)

3.11.4数据库安全性 (33)

3.11.5网络安全 (33)

4接口设计 (34)

5领域框架 (34)

6监控 (34)

7架构能力 (35)

7.1可扩展性 (35)

7.1.1系统可扩展性 (35)

7.1.2架构可扩展性 (35)

7.2可运维性 (35)

8风险评估 (36)

8.1抓取机器人IP遭目标网站屏蔽 (36)

8.2目标网站数据格式改变 (36)

9总结 (36)

1文档说明

本架构设计文档主要用来描述运价魔方的架构分析决策,同时也作为帮助开发人员迅速了解本系统的参考文档。

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整体架构分析

抓取引擎

数据采集模块

(适配器)

IP代理模块数据预处理

数据解析器

数据持久化

1.执行抓取

2.获取代理IP

3、执行解析

4、数据存储

5、分析及处理

业务应用

(运价查询、运价分析、

数据预测)

6、提供数据接口

IP数据源

IP提供商

(通过第三方API提取ip)互联网代理IP抓取

代理IP扫描

手工导入

提供IP数据执行抓取

执行抓取

执行抓取

执行抓取

1、任务装载

2、抓取策略

3、调度执行1、任务执行适配器装载

2、同步适配器(后续规划)

3、执行策略

1、大数据存储

2、大数量备份

1、数据索引

2、数量分析与计算

3、数据缓存

1、数据结果识别(HTML、

XML、Json)

2、数据转换与解析

3.2.2关键架构因素

因素测量跟质量场景变化(当前及未来)影响程度优先级困难或风险

反抓取屏蔽由于抓取任务是

定时器任务,具有

规律性,可能会被

目标网站给屏蔽

或者其他措施给

限制。当前-使用代理服务器的

方式来反屏蔽。

进化-未来抓取目标会增

多及抓取频率会增大。

高度影

响,抓取

的数据是

整个系统

的核心数

据。

高高

大数据量存储由于航空票价变

化较频繁,我们得

当前-使用HBase进行存

储抓取回来的运价数

高度影

响,如存

高中

到的需求是初期100条航线13个渠道,每小时抓取一次,范围是之后45天之内的数据。这样每小时就会有

45*13*100=58500条数据存储。据,使用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总体架构图

应用集成

客户端

B/S 客户端

IOS/Android 移动终端

第三方系统

价值数据

息安全、效能监控、性能监控、应用监控体系

数据服务

数据预处

应用服务

数据服务运价分析基础应用图表组件

航线设置站点设置缓存管理

日志模块

权限管理

核心数据层

数据存储

数据存储数据汇总

数据汇总ETL/Job

数据分析

数据分析ETL/Job

数据中心

数据中心报告

模型分析

ETL 持久化

定时作业

数据采集模块(适配器)抓取调度模块(抓取引擎)深航适配器国航适配器南航航适配器去哪儿适配器淘宝适配器

其它适配器

调度策略补偿策略适配器热部署

IP 代理调度监控

调度控制

预警管理

关注设置运价查询适配器服务其它服务

Figure 1 总体架构图

3.5.2 技术架构

Figure 2 Web前端子系统技术架构

Figure 3 抓取机器人技术架构3.5.3WEB前端

WEB前端项目层次如下:

Figure 4 前端框架层次图

基于DDD思想,具体框架描述详见3.6.1开发视图/开发框架概述及开发框架分层。

3.5.4抓取机器人

3.5.

4.1类图

Figure 5 抓取机器人类图

详细运行机制可参照抓取机器人的运行视图。

3.6物理架构

3.6.1部署视图

Web前端跟抓取机器人分开不同的机器运行,以使对对方的影响降到最低,也降低Web跟抓

取机器人之间的耦合。Oracle 单独一台机器,HBase 也独立出来,方便水平扩展,也令对其他系统的影响降到最低。

3.6.2 网络拓扑图

负载均衡/web 服务器

应用服务器

目标网站

目标网站外部网络中立区

内部网络

代理服务抓取服务Tengine LVS 备份节点

代理服务抓取服务Tengine LVS 备份节点防火墙

防火墙防火墙

防火墙防火墙

防火墙防火墙防火墙防火墙

防火墙防火墙

防火墙防火墙

防火墙防火墙防火墙Hbase 集群、

hadoop 集群、zookeeper 集群

数据区

数据区

应用服务器1

应用服务器1预处理服务器

预处理服务器应用服务器2

应用服务器2代理服务

抓取服务Tengine LVS 主节点

代理服务抓取服务Tengine LVS 主节点Mysql 服务器

Mysql 服务器

详细服务ip 及端口说明:

数据库层

内网应用层

互联网

运价抓取数据库

(mysql)

运价抓取数据库(oracle)

访问外网

抓取机器人

国航官网东航官网海航官网

...淘宝

代理服务10.144.0.77

应用服务器110.144.0.75

应用服务器

LVS 115.28.0.83

抓取机器人

hadoop 分布式存储系统

Hbase 分布式存

储系统负载均衡

LVS 115.28.0.88Tengine 10.144.0.8

Web 服务器

Tengine 10.144.0.7中立区

消息服务器10.144.0.71

应用服务210.144.0.74

3.6.3 硬件设备

架构各层次节点对硬件的要求对照表(供参考):

CPU

内存

磁盘

备注

Load Balancer 高高一般无应用服务器高高一般无抓取机器人服务器高高一般无Memcache服务器高高一般无HBase服务器高高高无数据库服务器高高高无初期需投入的设备

设备数量用途和备注

LVS 1 负载均衡服务器

应用服务器 2 部署Web前端

抓取机器人服务器 2 部署抓取机器人

HBase服务器 4 部署HBase Master及Slaver

数据库服务器 1 部署Oracle

3.6.4硬件采购

部署项目部署应用

数量

(台)

硬件需求

hadoop集群、Zookeeper集群及Hbase集群1 hadoop分布式文件系统主节点

1

CPU双核3.2G

内存:8G

硬盘:300G

2

JobTracker:hadoop分布是计算框架任

务调度节点

3 Hmaster :HBase数据库主节点

4 QuorumPeerMain :zookeeper集群节点

1

SecondaryNameNode :hadoop文件系统

备份节点

1

CPU 双核3.2G

内存:8G

硬盘:300G

2 HMaster:Hbase数据库备用主节点

3 QuorumPeerMain :zookeeper集群节点

1

DataNode :hadoop分布式文件系统数据

节点

5

CPU双核3.2G

内存:8G

硬盘:4T

2

TaskTracker :hadoop分布式计算框架

计算节点

3 HRegionServer :HBase数据库数据节点

4 QuorumPeerMain :zookeeper集群节点

抓取引擎服务器crawlServer1、crawlServer2 3 CPU双核3.2G 内存:8G

硬盘:300G

代理服务服务器ProxyServer 1 CPU双核3.2G 内存:8G

硬盘:300G

web应用服务器JBOSS服务器 1 CPU双核3.2G 内存:8G

硬盘:300G

数据预处理服务器DataProcessServer 1

CPU双核3.2G

内存:8G

硬盘:300G

数据库服务器Memcache缓存服务器

数据库服务器

1

CPU双核3.2G

内存:8G

硬盘:500G

3.7开发视图

3.7.1开发框架概述

运价魔方基于恒拓开源的开发框架进行开发:https://www.doczj.com/doc/b913040110.html,/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.7-1 开发架构分层示意图

展现层:负责为用户提供用户界面,接收用户的输入参数,提交给应用服务层执行相应业务操作,并接收应用服务层的返回结果展示给用户,其直接依赖于应用服务层。

应用层:向外提供业务功能服务,它只负责系统应用级别的逻辑如事务控制、权限控制、日志处理等,以及少量的跨领域对象的业务逻辑,它通过领域层的领域对象仓库获取相关的领域对象,然后调用领域对象的方法完成相应的业务,再把业务结果封装到数据传输对象(DTO )中返回给展示层,这里的DTO 是作为展示层与应用服务层的数据载体,它负有装载请求数据和结果数据的职责。

领域层:包含业务领域内的一系列相关领域服务(传统的Service 层),领域对象及其仓库接口,领域对象封装其领域内的业务逻辑,领域对象通过其仓储接口获取和持久化。

仓储实现层(数据访问DAO 层):提供领域对象的持久化实现,它的作用是把领域对象的具体持久化实现细节封装起来。该层只提供持久化实现,持久化操作的接口由领域层定义,因此,该层依赖于领域层提供相关领域对象的数据结构和持久化操作接口,即仓储接口。

下图展示了系统各逻辑层之间的关系:

展现层(Web 层)

应用层

领域层

仓储实现层(数据访问DAO )

Domain Service

DO

Application

Action

Action

Action

Repository Impl

Application

DO

DO

Domain Repository

Domain Repository

Domain Repository

Application

Repository Impl

Repository Impl

图表 3.7-2 开发框架各层次逻辑关系图

3.7.3项目工程及目录结构

使用Eclipse3.7作为开发环境,同时利用Maven3.0.4进行项目管理,使用一个开源的Maven 插件m2eclipse搭建基于Maven目录结构的开发环境,使用该工具,生成如下的目录结构:

图表3.7-3 项目工程结构一

图中的“taluo”是整个项目的根工程,下面的pom.xml是根工程的Maven项目管理文件,m2eclipse会自动导入根工程下的5个子工程,这些子工程对应于“功能模块”章节中描述的各个子模块和层次。导入后如下图所示:

图表3.7-4 项目工程结构二

下图是子工程的目录结构:

相关主题
文本预览
相关文档 最新文档