大型互联网站的数据存储与传统存储环境相比不仅是一个服务器、一个数据库那么简单,而是由网络设备、存储设备、应用服务器、公用访问接口、应用程序 等多个部分组成的复杂系统。分为 业务数据层、计算层、数据仓储、数据备份,通过应用服务器软件提供数据存储服务,并且通过监控工具对存储单元监控。
随着系统中用户数据量的线性增长,数据量将会越来越多。在这样一个数据不断膨胀的环境中,数据已经如洪水般汹涌泛滥。数据查找和调用困难,在海量数据中一些用户提交的请求往往要等到第二天才能得知结果,直接影响到了用户满意度的提升和新业务的布局。在技术上而言,这一特点使得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数据库系统中。
相关推荐
### 大型网站应用之海量数据和高并发解决方案 #### 一、网站应用背景 随着互联网的迅猛发展,用户数量激增,对于网站而言,如何高效处理海量数据及应对高并发访问成为了关键技术挑战之一。在初期阶段,一个简单的...
海量数据仓库的特点包括巨大的数据量(TB甚至PB级别),大量并发用户,需要在大型服务器或分布式系统上运行,并支持互联网访问。这些特性带来了管理复杂性,如性能优化、数据安全和高可用性。常见的挑战包括ETL效率...
总结来说,解决MySQL海量数据存储和访问的策略主要包括数据切分(水平切分)、负载均衡、读写分离等,通过这些技术可以有效应对大数据场景下的性能挑战,保证系统的稳定性和扩展性。在实际应用中,需要根据业务需求...
总结,MySQL海量数据的存储和访问解决方案主要包括数据切分、负载均衡和读写分离,这些策略通过分布数据、优化访问路径和平衡负载,有效提升了系统的处理能力和稳定性。在实际应用中,需要根据业务特性和需求,选择...
10. **大数据处理**:面对海量数据,大数据处理技术如Hadoop、Spark等提供了有效解决方案。书中可能讲解如何利用这些工具进行数据处理和分析。 李智慧的这本书全面剖析了大型网站技术架构的方方面面,无论是对于...
- **应用场景**:适用于对海量数据进行并行处理的任务,例如搜索引擎中的网页索引构建、用户行为分析等。 - **工作原理**:主要包括两个阶段——`Map` 和 `Reduce`。`Map` 阶段将输入数据分割成小块,并对这些小块...
- 数据分析:商业银行可能会利用大数据分析技术,对海量交易数据进行挖掘,以便更好地理解客户需求、预测市场趋势、控制风险等。 - 行业数据:通过分析商业银行中间业务的行业数据,能够了解当前中间业务的发展状况...
总的来说,数据仓库与数据挖掘是现代决策支持系统的核心,它们帮助企业从海量数据中提取有价值的信息,驱动更明智的商业决策。通过构建和优化数据仓库,结合有效数据挖掘技术,企业可以提高运营效率,降低风险,并...
在大数据背景下,面对“海量数据+高并发+数据一致性+高可用性”的挑战,大型互联网公司如Google、Facebook、淘宝等,采取了定制化的解决方案。这些方案通常包括数据库分片、利用缓存提升内存效率、数据复制实现读写...
在互联网时代,企业拥有海量数据,数据挖掘技术的运用成为了企业数字化转型的关键。通过有效利用历史数据,企业不仅能优化现有业务,还可以发掘新的商业机会,实现数据驱动的创新和发展。因此,企业应积极探索和投资...
例如,大型互联网公司如Google、Facebook和淘宝,会根据自身业务特点定制解决方案,常用策略包括数据库分片、利用缓存提升IO效率、实现读写分离、采用异步处理机制和避免分布式事务等。 阿里COR(Canal)就是一个...
这本书深入浅出地介绍了大型网站在应对高并发、大数据量、高可用性等挑战时所采用的技术策略和实践经验,是IT行业中尤其是互联网开发者和架构师的重要参考资料。 首先,书中详细讲解了网站架构的基础知识,包括软件...
随着互联网、物联网等技术的广泛应用,数据量呈指数级增长,而这些海量数据中蕴含着巨大的商业价值和社会价值。数据挖掘通过运用统计学、机器学习、人工智能等技术,能够帮助人们从数据中发现隐藏的模式、规律和趋势...
微服务架构是一种流行的解决方案,它将大型应用拆分为小型、独立的服务,每个服务都可以独立部署和扩展,以适应不断变化的需求。 网站技术实战中,还会涉及数据库优化、缓存策略、异步处理和消息队列等技术。数据库...
淘宝作为中国最大的电商平台,每天处理着数以亿计的图片数据。为了应对如此庞大的图片存储需求和快速的图片访问速度,淘宝...这是一套复杂而精细的系统,充分体现了大型互联网公司在面对大数据挑战时的技术创新能力。
《疯狂代码:大型网站架构系列》是一套深入探讨大规模网站架构设计的文档集,涵盖了从基础概念到高级策略的广泛内容。在这个系列中,我们将会深入理解大型网站背后的技术架构和设计思想,以应对高并发、大数据量以及...
这本书通过理论与实践相结合的方式,详细介绍了大型网站在面对海量数据和高并发访问时,如何进行架构设计和优化。 首先,分布式网站架构设计的核心目标是提高系统的可伸缩性、容错性和性能。为了实现这些目标,我们...
2. **数据库分片**:面对海量数据,单机数据库难以胜任,于是采用数据库分片,将数据分布在多个数据库实例上,每个实例负责一部分数据。分片策略通常有范围分片、哈希分片等,需根据业务特性选择合适方案。 3. **...
其次,**分布式数据库**和**数据缓存**是处理海量数据的关键。分布式数据库通过分割数据存储,提高了查询效率和系统的扩展性。而数据缓存如Redis或Memcached则用于存储热数据,减少对后端数据库的访问,进一步提升...