`
lewis122
  • 浏览: 238531 次
  • 性别: 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 的良好结合,让我们通过它快速与测试、生产环境结合起来。

分享到:
评论

相关推荐

    C# Access 大数据量 批量 效率 快速 导入

    在C#编程环境中,处理大数据量的导入任务时,效率是非常关键的一环。"C# Access 大数据量 批量 效率 快速 导入"这个主题聚焦于如何利用C#语言高效地将大量数据批量导入到Access数据库中。Access作为一个小型数据库...

    matlab编写的Lyapunov指数计算程序 (小数据量法)

    本程序是使用MATLAB编写的,专门用于计算Lyapunov指数,特别适合处理小数据量的情况。MATLAB是一种强大的数值计算和编程环境,对于科学研究和工程计算具有广泛的应用。 Lyapunov指数分为最大Lyapunov指数(Largest ...

    虚拟列表控件显示大数据量

    在IT领域,尤其是在开发用户界面时,处理大数据量的列表是一个常见的挑战。"虚拟列表控件显示大数据量"这一主题,就是针对这个问题提供的一种高效解决方案。虚拟列表技术是一种优化策略,它只在需要时渲染屏幕上的...

    WCF大数据量传输解决方案

    WCF在网络传输中,大数据量传输造成网络阻塞,宽带无法承受; 2. 解决方案 解决WCF在网络传输中的大数据量问题: A. 需要把相关数据序列化成字节流,再对字节流进行压缩,再进行传输,到了客户端再做反向操作便可...

    java导出30万数据量的excel(采用生成多个excel,最后打包zip)

    在Java开发中,处理大数据量的Excel导出是一项常见的任务,尤其当数据量达到数十万条时,单个Excel文件可能会遇到性能瓶颈或格式限制。本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们...

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

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

    CelebA_人脸数据集 百度云

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

    matlab Q-learning 无障碍路径规划仿真

    `Q(s, a) <- Q(s, a) + α * [r + γ * max(Q(s', a')) - Q(s, a)]` 其中,s和a分别代表当前状态和动作,s'是执行动作a后的新的状态,r是执行动作a得到的即时奖励,α是学习率,γ是折扣因子。 在仿真过程中,我们...

    Python与数据挖掘期末大作业1

    【Python与数据挖掘期末大作业1】主要涵盖了几个方面的知识点,包括Branching Process(分支过程)、实对称矩阵的对角化、稳态随机过程以及课程学习的个人反思。 首先,我们来详细讨论第1题。Branching Process...

    spiflash w25q128驱动函数

    W25Q128是旺宏电子(Winbond)推出的一款SPI接口的闪存芯片,具有128MB的大容量,适合于需要大量数据存储的应用场景。其主要特点是通过SPI(Serial Peripheral Interface)接口与微控制器进行通信,占用的硬件资源较...

    Luna16数据集转VOC数据集&肺实质分割&生成,Mat.zip

    需要把Luna16数据集的三维图片转换成二维图片,把标注生成对应的.xml文件才行。getDataCsv.py生成.xml及二维图片,getImg.py完成肺实质分割,getMat.py对疑似肺结节切割生成.Mat。 注意!!!!!原始getMat.py、train...

    Delphi使用ADO读Excel的数据,比OLE快n倍

    总的来说,Delphi结合ADO是读取Excel数据的一种高效方法,特别适用于大数据量和高性能要求的应用场景。通过理解ADO的工作原理并掌握如何在Delphi中应用,你可以显著提高你的程序效率。在实际项目中,根据具体需求...

    炬力ADFU驱动

    1. **下载驱动**:首先,你需要从官方网站或者可靠的资源下载最新版的炬力ADFU驱动。确保驱动与你的设备型号和操作系统兼容。 2. **安装驱动**:解压缩下载的文件,运行安装程序。按照向导提示进行操作,同意许可...

    Python实现的基于火力发电厂知识问答库的检索式问答系统/问答系统/对话系统源代码

    1,将火力发电厂知识问答数据集(Q.txt & A.txt)通过预处理,整合为格式规范的数据。 2,基于词袋模型和TFIDF模型,采用余弦相似度作为度量标准,对测试问题语料库中的问题进行文本相似度计算,找出相似度较高的...

    数据结构课程设计:重言式的判别

    数据结构课程设计的主题是“重言式的判别”。重言式是逻辑表达式的一种...总的来说,这个课程设计涵盖了数据结构(栈和二叉树)的应用,逻辑表达式的解析,以及布尔逻辑的计算,是对编程能力和逻辑思维能力的综合考验。

    三菱Q系列PLC指令(完整版)

    三菱Q系列PLC指令手册是一份详尽的技术文档,旨在为三菱Q系列和QnA系列可编程逻辑控制器(PLC)的编程人员提供编程指导。该手册包含了大量的指令集,这些指令集被分为多个部分,包括基本指令和应用指令,为编程提供...

    基于ArcGIS Engine的Excel表格数据导入为Shp数据

    这个Feature Class需要定义对应的几何类型(如点、线、面),以及与Excel数据对应的字段结构。 3. **坐标系统设置**:确保Excel数据中的坐标信息能正确地与地理空间坐标系统关联。这可能需要进行坐标系转换,以匹配...

    老外编写的三菱Q系列PLC 模拟量读写实例程序(有英文注解)write.rar )

    本文将详细解析“老外编写的三菱Q系列PLC 模拟量读写实例程序”,该程序具有英文注解,可帮助我们理解三菱Q系列PLC在处理模拟量输入/输出时的技术细节和编程方法。 三菱Q系列PLC是三菱电机推出的高端PLC产品线,...

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

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

Global site tag (gtag.js) - Google Analytics