`
lewis122
  • 浏览: 237731 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何对应大数据量网站的考验Q&A

 
阅读更多

Q:随着数据量的不断增长以及前端应用的不断水平扩充,数据库的压力会成为明显的问题,这个时候常用的方案是数据拆分,在数据拆分时有些什么较好的拆分方式,以及如何能够做到数据拆分后对已有程序不产生影响或产生很小的影响?

A:这个拆分以应用的特性为主,从业务的特性出发更为重要,不是一个技术层面的通用解决方案,一般来讲先会从业务自身分析,已经有人总结过数据库做拆分的几种方式:
1.按功能划分(垂直切分)
将不同功能相关的表放到不同的数据库中,这样做的好处是非常直观。但当某一部分的功能其数据量或性能要求超出了可控的范围,就需要继续对其进行深入的再切分。
2.按表中某一字段值的范围划分(水平切分)
当伴随着某一个表的数据量越来越大,以至于不能承受的时候,就需要对它进行进一步的切分。一种选择是根据key 的范围来做切分,譬如 ID 为 1-10000的放到A上,ID 为10000~20000的放到B。这样的扩展就是可预见的。另一种是根据某一字段值来划分,譬如根据用户名的首字母,如果是A-D,就属于A,E-H就属于B。这样做也存在不均衡性,当某个范围超出了单点所能承受的范围就需要继续切分。还有按日期切分等等。
3.基于hash的切分
类似于memcached的key hash 算法,一开始确定切分数据库的个数,通过hash取模来决定使用哪台。这种方法能够平均地来分配数据,但是伴随着数据量的增大,需要进 行扩展的时候,这种方式无法做到在线扩容。每增加节点的时候,就需要对hash 算法重新运算,数据需要重新割接。
4.基于路由表的切分
前面的几种方式都是根据应用的数据来决定操作的,基于路由表的切分是一种更加松散的方法。它单独维护一张路由表,根据用户的某一属性来查找路由表决定使用哪个数据库,这种方式是一种更加通用的方案。因为每次数据操作的时候都需要进行路由的查找,所以将这些内容存储到一台独立的Cache上是一个非常好的方式,譬如memcached。这种切分的方式同时也带来了另一个好处,当需要增加数据库节点的时候,可以在不影响在线应用的情况下来执行,当然这也跟应用 程序的架构设计相关,你的设计必须适用这种增加。
最后我还需要说明的是数据不止可以存在数据库中,大的概念来讲,像邮件系统中的邮件、视频文件等都有着相同的分布式存储的算法。我自己经历过的邮件、播客等都应用了大量的数据切分的模式将数据切分到数百台存储节点中去。

 

 

Q:数据拆分只是解决数据量增长后带来的问题的一种解决方案,请问是否还有一些其他的方式来解决数据量增长带来的问题呢,以及如何来实现这些方式呢?
A: 原则上来讲只有两种方法来解决数据增长带来的问题:拆分和增容。也就是拆到多个节点去,或是提升单个节点的容量能力。但是也有一些特别的方式,它们不通用,需要从业务关点来仔细评估:
1.Cache 是一种应用已久的方案,通过提前计算,将数据缓存起来。传统新闻网站的新闻的分发、Cache应用已久,而且当动态计算无法支撑时,静态化、缓存化总是百试不爽的终级方案。
2.阶段计算、阶段存储,通过阶段的计算,减少最终数据量。例如mrtg(一种通用的snmp监控程序)它的rrd 存储就是这样阶段计算、阶段存储的例子,最终使用的24小时数据、月/ 年数据总是最少的,不一定需要所有的详细数据。

 

 

Q:互联网应用的功能都是出于一种高速发展的状况,如果所有功能都在同一个系统上的话,会带来维护困难、机器性能无法合理发挥以及水平扩展性不够好等问题,对于此类问题应如何解决,解决时带来些什么技术挑战呢?
A:互联网的应用已经将IT 行业自身与其他行业的结合融合了起来。从前的系统运营、业务运营、软件开发甚至硬件开发等结合到了一起。最为核心的是将外包服务者和技术服务提供者融合了起来。未来将是服务为王的时代,所以这个时代给技术带来的挑战皆因从服务提供到运营提供带来的转变:
1)软件开发如何从软件工程的迟钝变得敏捷起来,互联网运营要求软件系统每月、每周甚至每日发布。
2)配置管理如何从并行数个版本的分支态,转变为只有当前开发版本和线上运行版本;从发布软件包,转变为发布到数十、数百、数千台服务器上的发布。
3)系统运营的统一化、细节化且快速反应的能力,在互联网不再看到之前几小时响应的招牌,更多的是可用性。
更为本质的,就是将传统的技术如何完成需求达成项目,转变为整个技术团队为服务品质(可用性等)、质量(未知Bug数量)去努力的工作目标。

 

 

Q:大型网站经常会碰到如下现象,同样功能不同的用户使用时会由于其数据量或其他原因造成不同级别的响应时间,这种现象很容易带来这样的问题:响应慢的用户大量访问时影响到本来响应快的用户的访问,对于此类问题应如何解决呢?
A:
1.应用系统与数据一样需要切分。比如同样是缓存池,小文件的页面、图片、flv 的视频就应该使用完全不同的服务器群。
2.从系统层面也有一种策略就是将所有的应用部署在所有的设备上,通过流量分流来动态调整、切分应用间的相互影响。

 

 

Q:9月1日Gmail 出现了100分钟不可用的现象,其事后的声明表明这是由于他们采取的一个保障服务可用性的策略造成的流量过大的问题,对于这个问题您有什么解决的建议呢?
A:错误任何人都会犯,从一个技术人员为出发点我表示理解。从一个管理者为出发点我认为是对于该项工作投入不足,不过有哪一家公司拥有充足的资源呢?
对于这样的问题,我也同样从技术和管理两个角度来提建议:
从技术角度来讲,显然Gmail 的新策略在实施过程中过分乐观,造成了流量积累性的冲击,而整体系统的冗余并不能提供充分的切换空间。这样必须从容量估算和切换时的计算再进行理性的评估,当然切换时间点也可以考虑。
从管理角度来讲,这样的工作是一个经验型、技巧型的工作,让更有经验、了解更多技巧的优秀工程师和更多资源的投入必然能提前性地解决这样的问题。拥有更多最优秀的人才应该是每一个企业管理者的重要工作。

 

 

Q:对于大型网站而言,经常要面对不可预知的热点事件带来的高流量,如何能够做到避免这样突发的高流量造成网站的不可用呢?
A:
1.业务运营原则上来讲应该可以有所预知,像奥运这样的热点事件应很早就可以预知。
2.系统自身就因为面对过热点事件,而拥有冗余能力。
3.系统快速部署能力和扩展方式非常重要,之所以Cache在大型网站应用广泛,就是因为其扩展方式支持极快的部署。
4.分布式服务更可以利用GSLB在全网调动流量,使得单个服务点的故障得以解决,同时也可以充分地利用多个节点的冗余能力。

 

 

Q:高度可伸缩是互联网追求的目标,基于您的经验,请提供一些构建高度可伸缩系统的最佳实践?
A:在系统架构中,我自己应用最多的是这三个原则:
1.让数据靠近CPU ;
2.消减重复的计算;
3.让计算前置。
这些原则考虑的更多一些,但是基于业务的灵活应用非常重要。

 

 

Q:云计算是目前互联网领域中相当热门的话题,您如何看待云计算给互联网领域带来的挑战以及利益呢?
A:云计算本身就是互联网带来的一种服务,所以它是让互联网更为深入生活的一个技术,它带着互联网积累的一系列技术和经验去改变传统行业的架构模式。未来每个企业都会有自己的云,每个云都会与其他的云建立起密不可分的关系。而中小企业将会逐步改变对虚拟主机和主机拖管的模式,走入云中。

 

 

Q:成本问题逐渐成为互联网行业关注的重点问题,请提供一些可降低成本的技术方法,并介绍一下这些技术方法会带来些什么挑战?
A:从成本上来说,实质上是越来越低的,我们会发现磁盘容量、计算能力已经越来越便宜。降低成本的方法即是勇敢地尝试和探索新的技术。从互联网的发展来看,有几个技术非常值得我们去关注:
1. 存储技术。一些新的存储技术, 如Sun 的ZFS和基于ZFS的存储解决方案已经在很多地方使用起来。而且基于应用层的分布式存储技术也大量出现。它将原有EMC和Netapp的存储模型完全打倒。
2.负载均衡技术。基于Linux 的LVS和BSD的PF的负载均衡技术其实早已经被大量使用。但现在数G带宽的应用越来越多,相信未来与交换机结合在一起的二层、三层负载均衡技术又会兴起。另一方面,基于应用系统架构设计的七层负载均衡技术与互联网的壮大在各个公司里变得越来越重要。
从挑战上来讲,这些技术会让之前人们认为很“值钱”的某某认证付诸东流,而对于自己所掌握的技术能力会有更高的要求。现在来看,互联网的大容量正是会培养出一批优秀系统工程师、系统架构师的基础,谁能培养出这些人才并留住,必然会取得领先。

 

 

Q:自动化能大幅度地提升开发、测试、部署效率,甚至是更好的保障系统可用性,您觉得在互联网行业中哪些方面的自动化是最为重要的,如何来实现呢?
A:说实话,完全的自动化是相对的,必竟在执行任务过程中的意外会很多,而这样的意外必须由人来控制。在我自己面对的系统中,已经实施自动化的主要是:
1.帐号管理和同步:我自己使用ssh、scp 和cron 加shell 脚本完成这样的工作。
2.可控的自动化测试环境、生产环境部署,以及部署的回退:我们使用一个叫做Capistrano 的小工具完成这个工作,它是基于ruby 和ssh 的小工具,帮助我们完成在服务器群中的快速部署和回退。它与svn 的良好结合,让我们通过它快速与测试、生产环境结合起来。

分享到:
评论

相关推荐

    stm32f429通过dma读写大量数据给w25q128

    W25Q128是一款128MB的大容量SPI闪存芯片,广泛应用于数据存储领域。 在这个项目中,STM32F429通过DMA与W25Q128进行大量的数据交换,实现了高效的读写操作。以下将详细阐述这个过程中的关键知识点: 1. **STM32F429...

    java csv大数据量导出(千万级别,不会内存溢出)

    在Java开发中,处理大数据量的数据导出是一个常见的挑战,特别是在CSV格式的文件处理上。CSV(Comma Separated Values)是一种广泛使用的数据交换格式,因其简单性和通用性而受到青睐。然而,当数据量达到千万级别时...

    在QTableWidget中显示大数据量

    以此索引可以定位到内存中的数据集对应的当前应被提取的第一个数据的索引;由于tableWidget的height是知道的,那么该显示的个数应也是可知的,即数据集该提取的长度也是可知的;只取这部分数据显示到tableWidget中。

    C#Excel大量数据快速导入数据库

    3. **数据预处理**:在读取数据后,可能需要进行一些预处理,例如数据清洗、格式转换或验证,以确保数据符合数据库的约束。 4. **批量插入数据库**:为了提高性能,应避免每次读取一行数据就执行一次数据库插入操作...

    将Excel数据对应写入已做好的Word模板的指定位置(分发)

    2. **Excel数据准备**:在Excel文件“将Excel数据对应写入已做好的Word模板的指定位置(分发).xls”中,你需要组织好对应的数据结构,每行数据应与Word模板中的一份通知相对应。例如,每一行可能包含授课人的姓名、...

    CelebA_人脸数据集 百度云

    根据提供的文件信息,我们可以深入探讨CelebA人脸数据集的相关知识点。CelebA是一个广泛用于计算机视觉、机器学习以及深度学习研究领域的人脸属性数据集。以下是对该数据集的详细解析。 ### CelebA数据集简介 ...

    C# Excel大量数据快速导入数据库源码

    `Frm_SetColumns.cs`和`Frm_SetColumns.Designer.cs`可能用于设置数据映射,因为导入数据时,往往需要指定Excel列与数据库表字段之间的对应关系。用户可能需要通过这个界面来配置这些映射规则。 `Frm_SetServer.cs`...

    SPIFlash W25Q64 新唐单片机程序

    - 容量:W25Q64提供8MB(64Mb)的存储空间,足以存储大量的程序代码、配置数据或其他类型的信息。 - 速度:它支持高速SPI模式,数据传输速率可达到最大33MHz,满足快速读写需求。 - 电压范围:工作电压为2.7V到...

    W25Q256FV中文资料

    基于SPI数据储存的芯片W25Q256FV,32MB的储存空间。本文是英文原版翻译版,解决了查看英文原版的麻烦,加速硬件的开发速度。

    已知两个坐标系下对应点坐标求转换矩阵

    本问题中,你拥有在两个不同坐标系下的多个对应点坐标,通过这些数据可以计算出两坐标系之间的转换矩阵。下面我们将详细探讨这一过程。 转换矩阵通常是一个4x4的矩阵,称为齐次坐标变换矩阵。在三维空间中,它可以...

    C# SerialPort IO操作 支持大数据收发

    支持串口大量数据读写操作,能一次性读取数据,通过设置超时大小控制一次读取串口所有数据。支持事件触发,异步发送接收数据。附件有demo,可下载Virtual Serial Port Driver模拟串口测试。

    C#中Chart控件

    在这个特定的资源中,我们关注的是如何利用Chart控件在C#中绘制曲线图,并在数据量较大时处理x轴的滚动条,以实现全局视图和滚动视图的功能。 首先,让我们了解一下Chart控件的基本用法。在C#的WinForms或WPF应用...

    三菱Q系列编程手册(中文 全)

    这些文档详细介绍了Q系列CPU的硬件特性、I/O接口、定时器/计数器的使用、数据处理指令、程序结构和控制流指令等。通过学习,读者可以了解到如何编写高效、稳定的PLC程序,同时掌握如何调试和优化程序。 Q系列PLC...

    4个可视化数据大屏demo源码

    在数据分析和大数据领域,可视化是至关重要的工具,它能够帮助我们直观地理解复杂的数据,从而进行有效的决策。本文将深入探讨“4个可视化数据大屏demo源码”的关键知识点,这些源码提供了直接运行的示例,且已预留...

    c#读取大智慧数据接口源码(经典)适合大智慧新一代、分析家6.0

    "C#读大智慧dat数据源码DzhData.rar"进一步证实了上述假设,dat文件是一种常见的二进制或文本格式,用于存储各种类型的数据,尤其是大量结构化的数据,如股票的历史价格和交易量。这个源码可能包含了解析dat文件的...

    W25Q64Flash芯片STM32操作

    - `void W25Q64_Write(uint32_t Address, uint8_t *pData, uint32_t NumByteToWrite)`:向W25Q64写入数据。 - `void W25Q64_EraseSector(uint32_t SectorAddr)`:擦除指定扇区。 **6. 完整流程** 在实际应用中,...

    数据可视化大屏的css背景+边框+demo

    数据可视化是一种将复杂的数据集转化为易于理解的图形或图像的过程,它在IT行业中扮演着至关重要的角色,特别是在大数据分析和决策支持系统中。本资源包“数据可视化大屏的css背景+边框+demo”提供了丰富的素材,...

    GroupLens_MovieLens数据集(完整版含三个数据量文件)

    三个文件数据简介如下: MovieLens 100k 100,000 ratings from 1000 users on 1700 movies. MovieLens 1M 1 million ratings from 6000 users on 4000 movies. MovieLens 10M 10 million ratings and 100,000 tag ...

    C#导出数据到Excel(百万级3秒)

    C# datatable直接导出数据到Excel,(数据量百万级只需3秒)

    新闻数据集(对应新闻文本分类案例)

    该新闻数据集与 https://blog.csdn.net/weixin_47176703/article/details/124304692?spm=1001.2014.3001.5501此篇python项目-新闻文本分类详细对应,代码详尽,读者可自取实现。

Global site tag (gtag.js) - Google Analytics