一种数据下载系统及方法

文档序号:7887019阅读:206来源:国知局
专利名称:一种数据下载系统及方法
技术领域
本发明涉及计算机技术领域,特別是涉及一种数据下载系统及方法。
背景技术
随着信息技术的发展,人们日益习惯于通过网络来获取各种数据。例如,ー种通常的方式就是通过数据下载系统来下载所需的内容。目前使用较多的下载架构主要有两种,ー种是传统的CDN(Content Delivery Network,内容分发网络)多层缓存架构,另ー种是一般的视频网站使用较多的下载架构。CDN多层缓存架构的示意图如图1所示,在这种架构中,全局数据仅存储在顶层源站设备中,每个边缘服务节点由Nginx做反向代理,将请求转给后端的Squid,Squid接到用户请求后回源站抓取数据提供服务,前端使用DNS方式进行负载均衡。这种架构通常适用于整体数据量不大,且热点集中的下载业务。视频网站使用较多的下载架构如图2所示,在这种架构中,全局建立若干分布式存储集群,各集群间数据没有冗余或冗余较低,使用基于HTTPOlyperText Transfer I^otocol,超文本传输协议)的第七层负载均衡设备对全局的Nginx服务器进行负载均衡。 这种架构通常适用于视频下载业务,整体并发度较低,多为连续读取。但是现在一些场合(例如大型软件、游戏等安装程序下载等)中的下载服务通常有如下特点存储数据量大、文件数量大,且某部分业务用户访问热点不集中等等。因此,迫切需要本领域技术人员解决的技术问题就在干,如何提供一种新的下载架构,能够满足上述要求。

发明内容
本发明提供了一种数据下载系统及方法,能够满足存储数据量大、文件数量大,且某部分业务用户访问热点不集中时的下载服务需求。本发明提供了如下方案ー种数据下载系统,包括多个下载集群,每个下载集群中包括Linux虚拟服务器 LVS、至少两个下载节点Nginx以及ー个分布式文件系统HDFS,所述Nginx的操作系统通过用户空间文件系统FUSE挂载HDFS的存储服务;其中所述LVS用于接收用户的下载请求,对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx;所述Nginx用于在接收到LVS转发的下载请求后,通过FUSE访问HDFS中存储的数据,响应用户的下载请求;所述HDFS用于存储数据。其中,所述LVS具体用于接收到用户的下载请求后,根据各个Nginx的性能和/ 或当前负载状况对各个Nginx进行调度选择,将所述下载请求发送给性能和/或当前负载状态符合预置条件的Nginx。
其中,所述LVS为两个。其中,两个LVS互为主备,每个LVS通过一个处于主模式的虚IP向用户提供下载服务,同时存在一个处于备用模式的虚IP ;当一个LVS无法提供服务时,另一个LVS通过启动所述处于备用模式的虚IP来接管该LVS的下载服务。其中,所述HDFS包括名字节点及至少两个数据节点,所述名字节点与LVS复用一台服务器,每个数据节点与一个Nginx复用一台服务器。其中,Nginx的数目与数据节点的数目相同。一种数据下载方法,应用于一数据下载系统中,所述数据下载系统包括多个下载集群,每个下载集群中包括Linux虚拟服务器LVS、至少两个下载节点Nginx以及一个分布式文件系统HDFS,所述HDFS用于存储数据,所述Nginx的操作系统通过用户空间文件系统FUSE挂载HDFS的存储服务;所述方法包括通过所述LVS接收用户的下载请求,并由所述LVS对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx ;Nginx在接收到LVS转发的下载请求后,通过FUSE访问HDFS中存储的数据,响应用户的下载请求。其中,所述对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx包括根据各个Nginx的性能和/或当前负载状况对各个Nginx进行调度选择,将所述下载请求发送给性能和/或当前负载状态符合预置条件的Nginx。其中,所述LVS为两个。其中,两个LVS互为主备,每个LVS通过一个处于主模式的虚IP向用户提供下载服务,同时存在一个处于备用模式的虚IP ;当一个LVS无法提供服务时,另一个LVS通过启动所述处于备用模式的虚IP来接管该LVS的下载服务。其中,所述HDFS包括名字节点及至少两个数据节点,所述名字节点与LVS复用一台服务器,每个数据节点与一个Nginx复用一台服务器。其中,Nginx的数目与数据节点的数目相同。其中,还包括对Nginx的参数进行调整,所调整的参数包括kndfile选项、worker进程数、单进程最大连接数、backlog参数、output-buffers中的一个或多个。其中,还包括对HDFS参数进行调整,所调整的参数包括read函数的参数数目、IPCserverlisten队列长度、IPC Server工作线程数、数据传输最大线程数中的一个或多个。根据本发明提供的具体实施例,本发明公开了以下技术效果第一,由于在下载系统中应用了 HDFS,因此,使得单个下载集群能够提供百TB级别存储,可通过简单的插拔方式增加存储服务器,提高存储能力,满足大存储数据量的需求;同时,由于不使用硬件RAID卡,而是通过HDFS服务对各磁盘进行并行读取,因此,可以实现单机各磁盘独立读取,能够很好地满足用户访问无热点、文件读取分散的高I/O需求,并提高数据吞吐量。实验数据显示,在使用12块7200转SATA盘的情况下,单机的总IOPS可达1000以上;最高可实现单机15000以上的并发连接,1( 以上的带宽吞吐。
第二,由于每个集群仅将LVS暴露给用户,因此,使得每个集群具有高内聚的特点,也即,如果某个或某些Nginx由于发生故障等无法向外提供服务,可以通过LVS在集群内部予以解决(例如,可以对后端Nginx进行可用性监控,对异常Nginx进行秒级摘除等),不会影响到其他的集群。第三,可以直接由LVS在集群内部进行负载均衡。第四,由于每个集群内容都对数据进行了存储,因此,可以实现数据在不同集群间的完全冗余,可以保证能够快速地进行流量调度与切换。第五,采用上述结构,可以很容易的实现对系统的扩展。例如,若发现前端LVS的网络性能成为瓶颈,可增加独立的LVS服务器或在现有服务器上增加网卡,快速实现性能扩展;若数据存储空间不足、或下载服务不能满足需求,可简单通过增加HDFS的数据节点进行存储空间及下载服务性能扩展,相应的,HDFS会自动完成新节点的数据同步。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是现有技术中的下载架构示意图;图2是现有技术中的另一下载架构示意图;图3是本发明实施例提供的系统的示意图;图4是本发明实施例提供的系统中各服务的物理部署示意图;图5是本发明实施例提供的方法的流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例首先提供了一种数据下载系统,其示意图如图3所示。在该系统中,包括多个下载集群(图中仅示出一个下载集群),每个下载集群中都包括LVS(LinuXVirtual Server, Linux虚拟服务器)、至少两个下载节点Nginx以及一个HDFS(HadoopDistributed File System,分布式文件系统),其中,Nginx所运行的操作系统通过FUSE (Filesystem in herspace,用户空间文件系统)挂载HDFS的存储服务。为了便于理解本发明实施例,下面首先对HDFS、LVS、Nginx以及FUSE进行简单地介绍。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上,而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。正是由于HDFS具有上述特点,本发明实施例试图将HDFS应用到在线的下载服务中,并提供相应的解决方案。当然,在现有技术中,HDFS 一般用于线下的数据存储,尚未有将HDFS应用于在线的数据下载架构中的应用。LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS采用IP负载均衡技术和基于内容请求分发技术,其调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器能够自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。Nginx是一个高性能的HTTP和反向代理服务器,在高连接并发的情况下,Nginx是一个不错的选择。FUSE是Linux操作系统中的概念,指完全在用户态实现的文件系统,用于挂载某些网络空间,到本地文件系统的模块。传统上操作系统在内核层面上对文件系统提供支持,而通常内核态的代码难以调试,生产率较低;但在利用了 FUSE之后,能够大幅提高生产率,简化为操作系统提供新的文件系统的工作量,特别适用于各种虚拟文件系统和网络文件系统。基于上述特点,本发明实施例提供了一种新型的数据下载系统。其中,在每个集群内部,数据通过HDFS进行存储,集群最外层暴露LVS虚IP向用户提供服务,也即,由LVS接收用户的下载请求;并且LVS在接收到用户的下载请求之后,会对各个Nginx进行调度,选择合适的Nginx,并将用户的下载请求转发给该选中的Nginx。Nginx在接收到用户的下载请求之后,就可以通过FUSE访问HDFS中存储的数据,以此来响应用户的下载请求。其中,LVS具体在对Nginx进行调度时,可以依据各个Nginx的性能(包括服务器的硬件性能指标等)和/或当前负载状况进行,选择出性能和/或当前负载状态符合预置条件的Nginx,并将用户的下载请求发送给该Nginx即可。通过上述系统架构,可以使得本发明实施例提供的数据下载系统具有以下特点第一,由于在下载系统中应用了 HDFS,因此,使得单个下载集群能够提供百TB级别存储,可通过简单的插拔方式增加存储服务器,提高存储能力,满足大存储数据量的需求;同时,由于不使用硬件RAID卡,而是通过HDFS服务对各磁盘进行并行读取,因此,可以实现单机各磁盘独立读取,能够很好地满足用户访问无热点、文件读取分散的高I/O需求,并提高数据吞吐量。实验数据显示,在使用12块7200转SATA盘的情况下,单机的总IOPS可达1000以上;最高可实现单机15000以上的并发连接,1( 以上的带宽吞吐。第二,由于每个集群仅将LVS暴露给用户,因此,使得每个集群具有高内聚的特点,也即,如果某个或某些Nginx由于发生故障等无法向外提供服务,可以通过LVS在集群内部予以解决(例如,可以对后端Nginx进行可用性监控,对异常Nginx进行秒级摘除等),不会影响到其他的集群。第三,可以直接由LVS在集群内部进行负载均衡。第四,由于每个集群内容都对数据进行了存储,因此,可以实现数据在不同集群间的完全冗余,可以保证能够快速地进行流量调度与切换。第五,采用上述结构,可以很容易的实现对系统的扩展。例如,若发现前端LVS的网络性能成为瓶颈,可增加独立的LVS服务器或在现有服务器上增加网卡,快速实现性能扩展;若数据存储空间不足、或下载服务不能满足需求,可简单通过增加HDFS的数据节点进行存储空间及下载服务性能扩展,相应的,HDFS会自动完成新节点的数据同步。
由于可以对系统进行扩展,因此,在实际应用中,LVS可以是多个。例如,在图3所示的示意图中,LVS可以为两个,同时向用户提供下载服务。此时,这两个LVS可以互为主备,每个LVS通过一个处于主模式的虚IP向用户提供下载服务,同时存在一个处于备用模式的虚IP ;当一个LVS无法提供服务时,另一个LVS通过启动所述处于备用模式的虚IP来接管该LVS的下载服务。通过这种机制,进一步保证了单个集群内部的高可靠性,避免由于LVS出现故障导致下载服务的失败。此外,HDFS还具有以下特点HDFS是一个主从结构的体系,一个HDFS集群是由名字节点(NameNode,NN)和数据节点(DataNode,DN)组成,名字节点是一个管理文件的命名空间和调节客户端访问文件的主服务器,数据节点用来管理存储。换言之,名字节点操作文件命名空间的文件或目录操作,如打开,关闭,重命名,等等,它同时确定数据与数据节点的映射。数据节点来负责来自文件系统用户的读写请求,同时还要执行数据的创建,删除,和来自名字节点的数据复制指示。其中,名字节点和数据节点都是软件运行在普通的机器之上。在实际应用中,为了实现硬件资源的充分利用,降低系统规模,提高系统的维护性,各个服务在物理上可以通过以下方式进行部署参见图4,HDFS的名字节点(NN)服务与LVS服务进行服务器的复用,例如,图4中,当存在两个LVS时,系统中也可以同时存在两个名字节点。也即,在名字节点上部署数据同步客户端,并部署FUSE挂载HDFS,通过FUSE向HDFS更新数据。在下载服务过程中,名字节点仅响应集群内部少量的RPC请求,负载很低;LVS服务属于CPU与网络密集型服务,但效率很高,因此,这样进行复用,能够充分利用系统资源且不会对HDFS服务产生影响。另外,如图4所示,每个数据节点可以与一个Nginx复用一台服务器,也即,在每个数据节点(DN)上部署FUSE和Nginx提供下载服务。此时,每个数据节点中存储的数据都可以是全部的数据,并且Nginx的数目与数据节点的数目可以是相同的,也即,在一个集群内部的各个不同的下载节点之间,也可以实现数据的完全冗余。总之,这种机制可以进一步提高系统的可靠性,同时,得益于HDFS的特性,对HDFS数据的绝大多数请求都直接访问本机的HDFS服务,不会发生跨机访问,因此,可以提高响应速度,规避内网传输瓶颈。当然,在实际应用中,在不同的Nginx之间,也可以实现数据的部分冗余。需要说明的是,LVS具有两种路由模式,一种是NAT模式,另一种是DR(DirectRouting)模式。在本发明实施例中,LVS可以工作于DR模式,在这种模式下,入流量(用户请求)通过LVS,但出流量(响应数据)可以直接从后面的数据节点返回,不再流经LVS。这样可以避免NAT模式中,出入流量都走LVS,使得LVS成为网络带宽瓶颈的问题。在具体实现时,为了更好地适应下载服务高并发、低延迟、高数据吞吐量的要求,还可以对Nginx参数以及HDFS服务进行调整。其中,在调整Nginx参数时,可以包括以下方面(a)关闭kndfile选项;(b)将worker进程数从默认的1增加为256 ; (c)将单进程最大连接数调整为512 ; (d)将hcklog参数调整为204800 ;(e)将output-buffers设置为“ 1128k”。在调整HDFS服务时,可以包括下方面(a) Hi. read 1 publicsynchronized int read (byte buf [], int off, intlen) throws IOException包括三个参数=Buf (缓存)、Off (数据在buf偏移),Len (读取长度),本发明实施例可以在此基础上增加一个参数position (文件偏移),以此来减少数
8据预读,降低读请求压力;(b)将IPC server listen队列长度由128增加为1024 ; (c) IPCServer工作线程数增加由3为IOM ; (d)数据传输最大线程数由256增加为4096。当然,在实际应用中,也可以根据实际需要,调整其中的一部分参数,或者将这些参数的具体数值调整为其他的值,或者调整其他的参数,等等,这里不进行限定。与本发明实施例提供的数据下载系统相对应,本发明实施例还提供了一种数据下载方法,该方法应用于图3所示的数据下载系统中,参见图5,该方法包括以下步骤S501 通过所述LVS接收用户的下载请求,并由所述LVS对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx ;S502 =Nginx在接收到LVS转发的下载请求后,通过FUSE访问HDFS中存储的数据,响应用户的下载请求。其中,在具体实现时,LVS具体可以在接收到用户的下载请求后,根据各个Nginx的性能和/或当前负载状况对各个Nginx进行调度选择,将所述下载请求发送给性能和/或当前负载状态符合预置条件的Nginx。另外,系统中的LVS为两个,并且,两个LVS可以互为主备,每个LVS通过一个处于主模式的虚IP向用户提供下载服务,同时存在一个处于备用模式的虚IP ;当一个LVS无法提供服务时,另一个LVS通过启动所述处于备用模式的虚IP来接管该LVS的下载服务。为了实现硬件资源的充分利用,降低系统规模,提高系统的维护性,HDFS的名字节点可以与LVS复用一台服务器,HDFS的每个数据节点与一个Nginx复用一台服务器。并且,Nginx的数目与数据节点的数目可以是相同的。另外,在实际应用中,为了更好地适应下载服务高并发、低延迟、高数据吞吐量的要求,还可以对Nginx参数以及HDFS服务进行调整。通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上对本发明所提供的一种数据下载系统及方法,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种数据下载系统,其特征在干,包括多个下载集群,每个下载集群中包括Linux虚拟服务器LVS、至少两个下载节点Nginx以及ー个分布式文件系统HDFS,所述Nginx的操作系统通过用户空间文件系统FUSE挂载HDFS的存储服务;其中所述LVS用于接收用户的下载请求,对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx ;所述Nginx用于在接收到LVS转发的下载请求后,通过FUSE访问HDFS中存储的数据, 响应用户的下载请求;所述HDFS用于存储数据。
2.根据权利要求1所述的系统,其特征在干,所述LVS具体用于接收到用户的下载请求后,根据各个Nginx的性能和/或当前负载状况对各个Nginx进行调度选择,将所述下载请求发送给性能和/或当前负载状态符合预置条件的Nginx。
3.根据权利要求1所述的系统,其特征在干,所述LVS为两个。
4.根据权利要求3所述的系统,其特征在干,两个LVS互为主备,每个LVS通过ー个处于主模式的虚IP向用户提供下载服务,同时存在一个处于备用模式的虚IP ;当ー个LVS无法提供服务时,另ー个LVS通过启动所述处于备用模式的虚IP来接管该LVS的下载服务。
5.根据权利要求1所述的系统,其特征在干,所述HDFS包括名字节点及至少两个数据节点,所述名字节点与LVS复用一台服务器,每个数据节点与ー个Nginx复用一台服务器。
6.根据权利要求5所述的系统,其特征在干,Nginx的数目与数据节点的数目相同。
7.ー种数据下载方法,应用于一数据下载系统中,其特征在干,所述数据下载系统包括多个下载集群,每个下载集群中包括Linux虚拟服务器LVS、至少两个下载节点Nginx以及 ー个分布式文件系统HDFS,所述HDFS用于存储数据,所述Nginx的操作系统通过用户空间文件系统FUSE挂载HDFS的存储服务;所述方法包括通过所述LVS接收用户的下载请求,并由所述LVS对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx;Nginx在接收到LVS转发的下载请求后,通过FUSE访问HDFS中存储的数据,响应用户的下载请求。
8.根据权利要求7所述的方法,其特征在干,所述对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx包括根据各个Nginx的性能和/或当前负载状况对各个Nginx进行调度选择,将所述下载请求发送给性能和/或当前负载状态符合预置条件的Nginx。
9.根据权利要求7所述的方法,其特征在干,所述LVS为两个。
10.根据权利要求9所述的方法,其特征在干,两个LVS互为主备,每个LVS通过ー个处于主模式的虚IP向用户提供下载服务,同时存在一个处于备用模式的虚IP ;当ー个LVS无法提供服务时,另ー个LVS通过启动所述处于备用模式的虚IP来接管该LVS的下载服务。
11.根据权利要求7所述的方法,其特征在干,所述HDFS包括名字节点及至少两个数据节点,所述名字节点与LVS复用一台服务器,每个数据节点与ー个Nginx复用一台服务器。
12.根据权利要求11所述的方法,其特征在干,Nginx的数目与数据节点的数目相同。
13.根据权利要求7所述的方法,其特征在于,还包括对Nginx的參数进行调整,所调整的參数包括kndfile选项、worker进程数、单进程最大连接数、backlog參数、output-buffers中的ー个或多个。
14.根据权利要求7所述的方法,其特征在于,还包括对HDFS參数进行调整,所调整的參数包括read函数的參数数目、IPCserver listen队列长度、IPC Server工作线程数、数据传输最大线程数中的ー个或多个。
全文摘要
本发明公开了一种数据下载系统及方法,其中,所述系统包括多个下载集群,每个下载集群中包括Linux虚拟服务器LVS、至少两个下载节点Nginx以及一个分布式文件系统HDFS,所述Nginx的操作系统通过用户空间文件系统FUSE挂载HDFS的存储服务;其中LVS用于接收用户的下载请求,对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx;Nginx用于在接收到LVS转发的下载请求后,通过FUSE访问HDFS中存储的数据,响应用户的下载请求;HDFS用于存储数据。通过本发明,能够满足存储数据量大、文件数量大,且某部分业务用户访问热点不集中时的下载服务需求。
文档编号H04L29/08GK102571959SQ20121000767
公开日2012年7月11日 申请日期2012年1月11日 优先权日2012年1月11日
发明者王力, 王 锋 申请人:北京奇虎科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1