大型互联网站解决海量数据的常见策略

news/2024/5/20 20:39:42/文章来源:https://blog.csdn.net/sunningzhen/article/details/7781875

本文转自:http://www.javabloger.com/article/big-data-architecture.html

  大型互联网站的数据存储与传统存储环境相比不仅是一个服务器、一个数据库那么简单,而是由网络设备、存储设备、应用服务器、公用访问接口、应用程序 等多个部分组成的复杂系统。分为 业务数据层、计算层、数据仓储、数据备份,通过应用服务器软件提供数据存储服务,并且通过监控工具对存储单元监控。

    随着系统中用户数据量的线性增长,数据量将会越来越多。在这样一个数据不断膨胀的环境中,数据已经如洪水般汹涌泛滥。数据查找和调用困难,在海量数据中一些用户提交的请求往往要等到第二天才能得知结果,直接影响到了用户满意度的提升和新业务的布局。在技术上而言,这一特点使得RDBMS在大型应用场景被大幅限制,唯一的可选方案是Scale Out,通过增加多个逻辑单元的资源,并使它们如同一个集中的资源那样提供服务来实现系统的扩展性。

   系统中的数据就好比我们家里的物品,衣服放在衣柜里,碟子放在碗橱里,数据库、存储系统就好比你的衣柜和碗橱是一个存放的容器,衣服和碟子就好比不同的数据,将不同类型的东西放入合适的存储空间里面,这样系统的效率和利用率将会更高,所以我们将会做出如下设计,如图所示:

查看大图请点击这里

对于大型系统存储单元的结构模型我们分为6个部分组成,清单如下:

1. 业务数据层
各类业务所产生的各种文件类型的数据,其中包含 用户信息、用户操作记录、实时业务数据、手机客户端升级应用程序、图片,等。

2. 计算层
针对不同的数据格式、不同类型的数据文件,通过不同的工具、计算方法进行操作,针对大量的数据计算采用一些分布式、并行计算的算法,例如:MapReduce,BSP。并且对一部分的数据进行缓存,缓解对存储应用服务器的压力。

3. 数据存储层
对于海量数据的查询与存储,特别是针对用户行为日志操作,需要使用到一些列式数据库服务器,对于处理业务和一些业务规则的数据依然存放在关系型数据库中,将采用MySQL来存储。

4. 数据仓储
数据存储主要是针对于用户行为日志和用户行为分析,也是系统中数据量产生较大的一个环节,将会采用Apache Hive、Pig、Mathout 对数据仓储进行构建。

5. 数据备份
分为在线数据备份和离线数据备份,数据备份环节需要经过运维经验的积累,根据业务和用户访问量进行定制合理的备份规律。

6. 硬件
硬件环境是存储单元最基础的部分,分为磁盘、内存、网络设备存储,将不同的业务数据、文件存储在不同的硬件设备上。

技术实现
对于系统不同的业务数据和应用服务器的架构需要采用不同的读写方式,以及数据存储类型存放,数据仓储构建,数据冷热分离、数据索引多个部分组成。例如:业务应用程序、日志采集代理、用户空间文件系统(Filesystem in Userspace)。Data Access Proxy Layer(DDAL/Cache Handler)、OLAP、日志服务器、Oracle(暂定)、MySQL、Redis、Hive、HDFS、Moosefs。

如图所示:

查看大图请点击这里

针对以上设计架构,描述清单如下:

1. Data Access Proxy Layer
统称数据访问代理层(简称 DAPL),封装了DDAL和Cache Handler层,抽象的对编写的应用程序进行了划分,便于扩展和维护,例如:需要对HDFS或者图形数据库操作,上层不需要知道HDFS具体操作,只需要关注提供的接口。DAPL封装了很多访问各种数据源的读写策略。因此,可以保证对不同数据库、数据源操作的事务完整性。

2. DDAL
统称分布式数据访问层(简称 DDAL)主要针对关系数据库的读写分离操作,需要做到读写分离,首先需要对传入的SQL语句进行解析,并且采用Round-Robin算法负载分载对数据大量读取的操作,在代码实现中将使用MySQL-JDBC中的参数配置实现对MySQL-Slave的读取压力分载。

3. Cache Handler
与DDAL的相似,具体区别在于自己实现了Round-Robin算法负载分载对数据大量读取的操作,并且能在Redis Master当机的状态下重新指派新的Master进行写的操作。

4. Redis一主多从
对缓存数据进行读写分离,减少单台机器的I/O瓶颈,值得一提的是Cache不是可靠的存储,所以在设计时,需要容许Cache的数据丢失,因此,Cache的数据全部失效时,会从数据库里重新装载。

5. MySQL双主多从
这种方式是MySQL架构设计中最折中的方案,对数据的访问压力分载和数据的可靠性都有了相应的保障。前端2台Master MySQL相互进行数据备份,后端大量的Slave MySQL对Master写入的数据进行同步,所以每台机器节点上的MySQL数据库中的数据都是一致的,并且DDAL应用程序将数据轮询写入Master MySQL数据库中。

6. 数据库读写分离
主要采用mysql的策略,学习MySQL-Prxoy的策略,自己开发对MySQL书籍节点进行读写分离的方法,MySQL驱动支持读写分离的数据完整性,当数据量超大规模的时候将会采用Sharding策略。

7. 缓存读写分离
缓存Redis的策略,采用自己开发的应用程序需要实现Round Robin算法,对Redis Master和Slave缓存集群进行读写分离操作。

8. ETL Tools
采用Apache Hadoop项目中的Pig对海量的行为数据进行清洗,Pig可以针对有规律的半结构化数据执行类似SQL的脚本,并且可以将计算压力分载到每台服务器上进行分布式、并行处理。

9. Hive集群
针对数据仓库的建设由Apache Hive进行构建,是一个建立在Hadoop上的数据仓库框架,它提供了一个方便的数据集成方法和类似SQL的Hive QL查询语言,实现了Map/Reduce算法支持在Hadoop框架上进行大规模数据分析。

10. HDFS分布式文件系统
Hive中的数据全部存储在Hadoop分布式文件系统中,所有被存储的数据都会有数据的存储副本,这样对数据的可靠性有了保障。

11. Moosefs分布式文件系统
与上面提到的HDFS一个文件系统是有区别的,Moosefs不需要任何客户端程序对分布式文件进行操作的服务器,可以直接与任何运行环境进行对接,而且服务端也有副本复制的功能。

12. 冷热数据分离
将系统中产生的进行归类存放,将用户更多关心、热门话题等内容 抽象为“最近几天”的“热数据”,而越早的数据我们在设计中抽象的分为“冷数据”。由此可见,“热节点”存放最新的、被访问频率较高的数据。对于这部分数据,我们希望能给用户提供尽可能快的查询速度,因此无论在硬件还是软件的选择上都会有了明显的区分,例如:最近常访问频率高的数据将会存储在系统缓存中,需要经常性被的业务数据将会存储在MySQL或者Oracle数据库系统中,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_890941.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在IIS上部署ASPNETMVC Beta网站

在IIS上部署ASPNETMVC Beta网站 在IIS上部署ASPNETMVC Beta网站,实际上和在IIS上部署其他类型的网站并没有太大的区别。个人觉得唯一比较有意思的是在配置IIS时,我们可以配置各种自定义的ISAPI扩展名(也在MVC应用配置的,通常在Gl…

网页制作--苹果官方网站模仿

初入WEB前端设计第四天,我仿着做了一个网站,做的很垃圾,也没有一些约束(浏览器页面小时会显示错误) 成品图如下: 在这里我用了CSS字体 font awesome,不懂的可以去这篇博客:CSS图标…

初学盲打,免费,免安装,高颜值的在线打字练习网站

小时候不怎么接触电脑没有练习过打字,长大后深刻地意识到盲打对工作效率的提高,于是下决心学盲打。和大家一样,刚开始的时候四处搜寻办法,直到遇见了下面两个网站。 免费免安装,高颜值 练习打字的网站,均无…

分享一个打字练习网站

成为一个优秀的程序员,打字速度虽然不是必要条件。但是一个打字快的程序员,必然会享受自己的打字速度,速度快听着啪啪声实在是爽的不行。 Ratatype Ratatype 是一个在线的打字教程网站,能够帮助你提高键盘输入速度。 TYPING TUTO…

微信域名防屏蔽防封系统,轻松微信中域名网站被屏蔽被封的问题

做微信营销活动,域名没被封过,那你的营销人生肯定是不完整的。如果做到微信域名防封呢?这就要借助一些工具来实现有效的防封措施了。 第一步 你需要有一个微信域名检测接口,自己开发或是购买都可以。 第二步 配置你的程序&…

为什么中国免费学习网站那么少?都是收费的?

最近看到很多微信公众说不用钱,免费资料,但是到最后还是收钱,气人啊 ,一个学学习程序员的新手有没有钱,什么程序员免费资源等等公众号,最后找到一个良心公众号真的免费资料,就是资源有点少&…

关于IIS6.0配置网站打开出现空白问题解决方法

1)iis配置中默认文档未设置成【index.html】 如图 2)未把html交给.net托管 配置html给.net托管如下 1.打开IIS属性找到主目录选项卡 2.点击【配置】出现如下图 在其中ISAPI扩展中添加一条扩展名为【.html】的记录 其中可执行文件大多数都在【C:\WINDOWS\Microso…

第一次使用Python中的Django框架搭建网站学习路线总结

历时三个星期的零零散散时间,终于成功完成了数据库的综合实验---------一个小的网站。 第一次涉及Web开发领域,选择的是Python中的Django框架搭建的。本片博客用于学习路线的总结,方便日后快速回忆起来。如果你想要在短时间内搭建一个网站&a…

[转]2005年依始奥索推出综合网站排名搜狐傲立鸡群[1.3-1.9]

[转]2005年依始奥索推出综合网站排名搜狐傲立鸡群[1.3-1.9] 1. sohu.comwww.sohu.com - 信息 2. baidu.comwww.baidu.com - 信息 3. 3721.comwww.3721.com - 信息 4. 163.comwww.163.com - 信息 5. sina.com.cnwww.sina.com.cn - 信息 6. allyes.comwww.allyes.com - 信息 7. g…

phpcms v9网站搬家的方法(含域名更改)

PHPCMS V9内容管理系统 V9采用OOP(面向对象)方式自主开发的框架。框架易扩展,稳定且具有超强大负载能力,完全可以满足政府机构、教育机构、事业单位、商业企业、个人站长使用。 本文介绍phpcms v9网站搬家更换域名的方法&#xff…

关于python爬取笔趣阁网站上面完美世界小说

1这个是用BS爬下来的,其实是不难的,理解了就好,点击这里恩这本小说很不错的 2看下这个就是用正则表达式来提取的章节链接,不过这个是要前面加上前缀 3打开之后,我使用BS处理的,因为这个处理这个内容中间的…

python中用Beautifulsoup提取集搜客网站的信息

1爬取集搜客网站上面的信息点击打开链接 2看下这个源代码 3使用正则表达式提取出来 # coding:utf8 import urllib2 import time from bs4 import BeautifulSoup class YZW():#先是定义一个模块然后就是用来包含用到的函数def __init__(self):self.user_agentMozilla/5.0 (Wi…

利用压缩网页来提升网站浏览速度

级别: 中级 刘 冬 (javayougmail.com), 开发工程师,   2007 年 2 月 28 日 本文主要介绍如何通过对页面进行压缩从而节省网站的带宽以及提升用户的访问速度。 网站的访问速度是由多个因素所共同决定的,这些因素例如应用程序的响应速度、网络带宽、服…

网站多级缓存的分层架构

参考:大型网站多级缓存的分层架构 假设一个网站,需要提高性能,缓存可以放在浏览器,可以放在反向代理服务器,还可以放在应用程序进程内,同时可以放在分布式缓存系统中。 从用户请求数据到数据返回&#x…

网站中如何处理重复的代码

网站中如何处理重复的代码 作者:闪吧 类型:原创 来源:闪吧 style"PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 400px; PADDING-TOP: 0px; HEIGHT: 25px" src"teachInfo.aspx?id4051" frameborder&…

网站优化十大方法之关键字篇

1、 选择有效的关键字: 关键字是描述你的产品及服务的词语,选择适当的关键字是建立一个高排名网站的第一步。选择关键字的一个重要的技巧是选取那些常为人们在搜索时所用到的关键字。 2、 理解关键字: 在你收集所需的关键字之前,…

孩子上网抄作业 习题网站点击率高 ----回想当年....我们真是落伍了

孩子上网抄作业 习题网站点击率高 作者:王迪 | 2005-01-13 | 原始出处: 四川在线-华西都市报 昨日上午,家住成都的黄先生打进本报教育新闻热线(028-86969195)无奈地说:"在一些网站上,初中各科的课后习题的解题过程…

Java、JSP基于Web的小型购书网站

技术:Java、JSP等 摘要:俗话说活到老,学到老,当今社会正在快速的发展,人民生活的更加节奏化,大多数的人不再仅仅追求物质上的满足,而且还在追求精神方面的满足。由于在现实生活中,互…

【服务计算】REST API学习与设计——模仿GithubAPI设计博客网站API

文章目录 什么是REST?了解Web API学习Github-API设计博客网站API获取用户信息获得某用户所有文章总览访问用户的某一个指定的文章查看某用户关注信息获取用户下的分类专栏文章发布文章发布评论修改文章删除文章 错误处理404 Not Found400 Bad Request401 Unauthoriz…

相对定位父子元素触发mouseover和mouseout事件实验

最近做的一个项目中有个功能是鼠标移动到某一块id为A,然后A的子元素id为B在下方紧贴着父元素A显示出来,B里面的内容是鼠标移动到A元素上才请求服务端获取数据。 我使用了mouseover,mouseout事件,采用jquery的on方法。大致如下 $(…