一种数据下载系统及方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别是涉及一种数据下载系统及方法。
【背景技术】
[0002]随着信息技术的发展,人们日益习惯于通过网络来获取各种数据。例如,一种通常的方式就是通过数据下载系统来下载所需的内容。
[0003]目前使用较多的下载架构主要有两种,一种是传统的⑶N(Content DeliveryNetwork,内容分发网络)多层缓存架构,另一种是一般的视频网站使用较多的下载架构。
[0004]CDN多层缓存架构的示意图如图1所示,在这种架构中,全局数据仅存储在顶层源站设备中,每个边缘服务节点由Nginx做反向代理,将请求转给后端的Squid, Squid接到用户请求后回源站抓取数据提供服务,前端使用DNS方式进行负载均衡。这种架构通常适用于整体数据量不大,且热点集中的下载业务。
[0005]视频网站使用较多的下载架构如图2所示,在这种架构中,全局建立若干分布式存储集群,各集群间数据没有冗余或冗余较低,使用基于HTTP (HyperText TransferProtocol,超文本传输协议)的第七层负载均衡设备对全局的Nginx服务器进行负载均衡。这种架构通常适用于视频下载业务,整体并发度较低,多为连续读取。
[0006]但是现在一些场合(例如大型软件、游戏等安装程序下载等)中的下载服务通常有如下特点:存储数据量大、文件数量大,且某部分业务用户访问热点不集中等等。因此,迫切需要本领域技术人员解决的技术问题就在于,如何提供一种新的下载架构,能够满足上述要求。
【发明内容】
[0007]本发明提供了一种数据下载系统及方法,能够满足存储数据量大、文件数量大,且某部分业务用户访问热点不集中时的下载服务需求。
[0008]本发明提供了如下方案:
[0009]一种数据下载系统,包括多个下载集群,每个下载集群中包括Linux虚拟服务器LVS、至少两个下载节点Nginx以及一个分布式文件系统HDFS,所述Nginx的操作系统通过用户空间文件系统FUSE挂载HDFS的存储服务;其中:
[0010]所述LVS用于接收用户的下载请求,对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx ;
[0011]所述Nginx用于在接收到LVS转发的下载请求后,通过FUSE访问HDFS中存储的数据,响应用户的下载请求;
[0012]所述HDFS用于存储数据。
[0013]其中,所述LVS具体用于:接收到用户的下载请求后,根据各个Nginx的性能和/或当前负载状况对各个Nginx进行调度选择,将所述下载请求发送给性能和/或当前负载状态符合预置条件的Nginx。
[0014]其中,所述LVS为两个。
[0015]其中,两个LVS互为主备,每个LVS通过一个处于主模式的虚IP向用户提供下载服务,同时存在一个处于备用模式的虚IP ;当一个LVS无法提供服务时,另一个LVS通过启动所述处于备用模式的虚IP来接管该LVS的下载服务。
[0016]其中,所述HDFS包括名字节点及至少两个数据节点,所述名字节点与LVS复用一台服务器,每个数据节点与一个Ngi nx复用一台服务器。
[0017]其中,Nginx的数目与数据节点的数目相同。
[0018]一种数据下载方法,应用于一数据下载系统中,所述数据下载系统包括多个下载集群,每个下载集群中包括Linux虚拟服务器LVS、至少两个下载节点Nginx以及一个分布式文件系统HDFS,所述HDFS用于存储数据,所述Nginx的操作系统通过用户空间文件系统FUSE挂载HDFS的存储服务;所述方法包括:
[0019]通过所述LVS接收用户的下载请求,并由所述LVS对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx ;
[0020]Nginx在接收到LVS转发的下载请求后,通过FUSE访问HDFS中存储的数据,响应用户的下载请求。
[0021]其中,所述对各个Nginx进行调度选择,将所述下载请求转发给选中的Nginx包括:
[0022]根据各个Nginx的性能和/或当前负载状况对各个Nginx进行调度选择,将所述下载请求发送给性能和/或当前负载状态符合预置条件的Nginx。
[0023]其中,所述LVS为两个。
[0024]其中,两个LVS互为主备,每个LVS通过一个处于主模式的虚IP向用户提供下载服务,同时存在一个处于备用模式的虚IP ;当一个LVS无法提供服务时,另一个LVS通过启动所述处于备用模式的虚IP来接管该LVS的下载服务。
[0025]其中,所述HDFS包括名字节点及至少两个数据节点,所述名字节点与LVS复用一台服务器,每个数据节点与一个Nginx复用一台服务器。
[0026]其中,Nginx的数目与数据节点的数目相同。
[0027]其中,还包括:
[0028]对Nginx的参数进行调整,所调整的参数包括Sendfile选项、worker进程数、单进程最大连接数、backlog参数、output_buffers中的一个或多个。
[0029]其中,还包括:
[0030]对HDFS参数进行调整,所调整的参数包括read函数的参数数目、IPCserverlisten队列长度、IPC Server工作线程数、数据传输最大线程数中的一个或多个。
[0031]根据本发明提供的具体实施例,本发明公开了以下技术效果:
[0032]第一,由于在下载系统中应用了 HDFS,因此,使得单个下载集群能够提供百TB级别存储,可通过简单的插拔方式增加存储服务器,提高存储能力,满足大存储数据量的需求;同时,由于不使用硬件RAID卡,而是通过HDFS服务对各磁盘进行并行读取,因此,可以实现单机各磁盘独立读取,能够很好地满足用户访问无热点、文件读取分散的高I/O需求,并提高数据吞吐量。实验数据显示,在使用12块7200转SATA盘的情况下,单机的总1PS可达1000以上;最高可实现单机15000以上的并发连接,IGb以上的带宽吞吐。
[0033]第二,由于每个集群仅将LVS暴露给用户,因此,使得每个集群具有高内聚的特点,也即,如果某个或某些Nginx由于发生故障等无法向外提供服务,可以通过LVS在集群内部予以解决(例如,可以对后端Nginx进行可用性监控,对异常Nginx进行秒级摘除等),不会影响到其他的集群。
[0034]第三,可以直接由LVS在集群内部进行负载均衡。
[0035]第四,由于每个集群内容都对数据进行了存储,因此,可以实现数据在不同集群间的完全冗余,可以保证能够快速地进行流量调度与切换。
[0036]第五,采用上述结构,可以很容易的实现对系统的扩展。例如,若发现前端LVS的网络性能成为瓶颈,可增加独立的LVS服务器或在现有服务器上增加网卡,快速实现性能扩展;若数据存储空间不足、或下载服务不能满足需求,可简单通过增加HDFS的数据节点进行存储空间及下载服务性能扩展,相应的,HDFS会自动完成新节点的数据同步。
【附图说明】
[0037]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0038]图1是现有技术中的下载架构示意图;
[0039]图2是现有技术中的另一下载架构不意图;
[0040]图3是本发明实施例提供的系统的示意图;
[0041]图4是本发明实施例提供的系统中各服务的物理部署示意图;
[0042]图5是本发明实施例提供的方法的流程图。
【具体实施方式】
[0043]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中