预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

大型互联网站解决海量数据的常见策略作者:H.E.|您可以转载,但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:HYPERLINK"http://www.javabloger.com/article/big-data-architecture.html"http://www.javabloger.com/article/big-data-architecture.html大型互联网站的数据存储与传统存储环境相比不仅是一个服务器、一个数据库那么简单,而是由网络设备、存储设备、应用服务器、公用访问接口、应用程序等多个部分组成的复杂系统。分为业务数据层、计算层、数据仓储、数据备份,通过应用服务器软件提供数据存储服务,并且通过监控工具对存储单元监控。随着系统中用户数据量的线性增长,数据量将会越来越多。在这样一个数据不断膨胀的环境中,数据已经如洪水般汹涌泛滥。数据查找和调用困难,在海量数据中一些用户提交的请求往往要等到第二天才能得知结果,直接影响到了用户满意度的提升和新业务的布局。在技术上而言,这一特点使得RDBMS在大型应用场景被大幅限制,唯一的可选方案是ScaleOut,通过增加多个逻辑单元的资源,并使它们如同一个集中的资源那样提供服务来实现系统的扩展性。系统中的数据就好比我们家里的物品,衣服放在衣柜里,碟子放在碗橱里,数据库、存储系统就好比你的衣柜和碗橱是一个存放的容器,衣服和碟子就好比不同的数据,将不同类型的东西放入合适的存储空间里面,这样系统的效率和利用率将会更高,所以我们将会做出如下设计,如图所示:HYPERLINK"http://ww3.sinaimg.cn/large/6579bcb1gw1dnrt44y0esj.jpg"\t"_blank"查看大图请点击这里对于大型系统存储单元的结构模型我们分为6个部分组成,清单如下:1.业务数据层各类业务所产生的各种文件类型的数据,其中包含用户信息、用户操作记录、实时业务数据、手机客户端升级应用程序、图片,等。2.计算层针对不同的数据格式、不同类型的数据文件,通过不同的工具、计算方法进行操作,针对大量的数据计算采用一些分布式、并行计算的算法,例如:MapReduce,BSP。并且对一部分的数据进行缓存,缓解对存储应用服务器的压力。3.数据存储层对于海量数据的查询与存储,特别是针对用户行为日志操作,需要使用到一些列式数据库服务器,对于处理业务和一些业务规则的数据依然存放在关系型数据库中,将采用MySQL来存储。4.数据仓储数据存储主要是针对于用户行为日志和用户行为分析,也是系统中数据量产生较大的一个环节,将会采用ApacheHive、Pig、Mathout对数据仓储进行构建。5.数据备份分为在线数据备份和离线数据备份,数据备份环节需要经过运维经验的积累,根据业务和用户访问量进行定制合理的备份规律。6.硬件硬件环境是存储单元最基础的部分,分为磁盘、内存、网络设备存储,将不同的业务数据、文件存储在不同的硬件设备上。技术实现对于系统不同的业务数据和应用服务器的架构需要采用不同的读写方式,以及数据存储类型存放,数据仓储构建,数据冷热分离、数据索引多个部分组成。例如:业务应用程序、日志采集代理、用户空间文件系统(FilesysteminUserspace)。DataAccessProxyLayer(DDAL/CacheHandler)、OLAP、日志服务器、Oracle(暂定)、MySQL、Redis、Hive、HDFS、Moosefs。如图所示:HYPERLINK"http://ww4.sinaimg.cn/large/6579bcb1gw1dnrtomacd5j.jpg"\t"_blank"HYPERLINK"http://ww4.sinaimg.cn/large/6579bcb1gw1dnrtomacd5j.jpg"\t"_blank"查看大图请点击这里针对以上设计架构,描述清单如下:1.DataAccessProxyLayer统称数据访问代理层(简称DAPL),封装了DDAL和CacheHandler层,抽象的对编写的应用程序进行了划分,便于扩展和维护,例如:需要对HDFS或者图形数据库操作,上层不需要知道HDFS具体操作,只需要关注提供的接口。DAPL封装了很多访问各种数据源的读写策略。因此,可以保证对不同数据库、数据源操作的事务完整性。2.DDAL统称分布式数据访问层(简称DDAL)主要针对关系数据库的读写分离操作,需要做到读写分离,首先需要对传入的SQL语句进行解析,并且采用Round-Robin算法负载分载对数据大量读取的操作,在代码实现中将使用MySQL-JDBC中的参数配置实现对MySQL-Slave的读取压