本发明涉及应用文件下载技术领域,具体而言涉及一种基于cdn的反劫持下载方法和系统。
背景技术:
目前,很多企业将自己开发的app放在公网cdn上,便于用户下载至用户端使用。但用户在使用过程中,经常在下载完成时发现并非原app,即该下载过程有可能被第三方所劫持。
在专利号为cn201410369830.1的发明专利“一种应用下载中防止dns劫持的方法、装置和系统”中,通过对比分别从第一服务器、第二服务器处接收到的响应消息中的第一特征信息和第二特征信息是否匹配,来判断当前下载过程是否被劫持,如被劫持,采用第二服务器获取下载应用。其中,第一特征信息和第二特征信息可以为md5值或内容长度信息。
前述发明专利必须在通过比对后才能识别出下载过程是否被劫持,对于被劫持的用户来说,需要等待一段时间才能够获取第二服务器的地址,用户体验不佳。
技术实现要素:
本发明目的在于提供一种基于cdn的反劫持下载方法和系统,通过统计用户端和cdn节点的下载失败率,对被劫持率进行预估,对于设定时间范围内下载失败率较高的用户端和cdn节点的应用下载请求,在备用服务器的带宽占用率满足条件的情况下,直接发送备用地址给用户端,减少用户端的等待时间,提高用户体验;另外,设置多台备用服务器,满足劫持风险高的情况下的用户下载需求,提高用户端的更新成功率;同时,通过管理多台备用服务器的启动情况,在确保下载需求得到满足的同时,尽可能地减少资源占用。
为达成上述目的,结合图1,本发明提出一种基于cdn的反劫持下载方法,所述下载方法包括:
s1:创建用户数据库和cdn节点数据库,所述用户数据库用于存储第一设定时间范围内所有下载失败率大于第一下载失败率阈值的用户id,所述cdn节点数据库用于存储第二设定时间范围内所有下载失败率大于第二下载失败率阈值的cdn节点的ip地址。
s2:接收用户端发送的应用下载请求,所述应用下载请求中包括请求下载文件信息、用户id和/或cdn节点的ip地址。
s3:将所述应用下载请求中包含的用户id与用户数据库做比对,将所述应用下载请求中包含的cdn节点的ip地址与cdn节点数据库做比对,如果所述应用下载请求中包含的用户id和/或cdn节点的ip地址中的任意一个存储在用户数据库和/或cdn节点数据库中,进入步骤s4,否则,进入步骤s5。
s4:对请求下载文件的备用地址所在的备用服务器的带宽占用率进行检测,如果备用服务器的带宽占用率小于带宽占用率阈值,返回请求下载文件的备用地址至用户端,否则定期循环检测带宽占用率,直至循环次数达到第一预设次数阈值,返回等待信息至用户端,结束流程。
s5:返回请求下载文件的下载主地址、备用地址、md5值和文件大小。
s6:接收用户端发送的下载结果反馈信息,如果下载结果反馈信息为主地址下载成功,结束流程,如果下载结果反馈信息为备用地址下载成功,统计所述下载结果反馈信息对应的用户id在第一设定时间范围内的失败率、和对应的cdn节点的ip地址在第二设定时间范围内的失败率,根据统计的失败率确定是否更新用户数据库和cdn节点数据库,结束流程。
基于前述方法,本发明还提及一种基于cdn的反劫持下载系统,所述系统包括下载管理模块、服务器管理模块、至少一个备用服务器。
所述下载管理模块包括请求接收单元、用户数据库、cdn节点数据库、比对单元、带宽占用率检测单元、统计单元。
所述用户数据库用于存储第一设定时间范围内所有下载失败率大于第一下载失败率阈值的用户id。
所述cdn节点数据库用于存储第二设定时间范围内所有下载失败率大于第二下载失败率阈值的cdn节点的ip地址;接收用户端发送的应用下载请求,所述应用下载请求中包括请求下载文件信息、用户id和/或cdn节点的ip地址。
所述请求接收单元用于接收并解析用户端发送的应用下载请求,所述应用下载请求中包括请求下载文件信息、用户id和/或cdn节点的ip地址。
所述比对单元用于将所述应用下载请求中包含的用户id与用户数据库做比对,将所述应用下载请求中包含的cdn节点的ip地址与cdn节点数据库做比对:
如果所述应用下载请求中包含的用户id和/或cdn节点的ip地址中的任意一个存储在用户数据库和/或cdn节点数据库中,调用带宽占用率检测单元对请求下载文件的备用地址所在的备用服务器的带宽占用率进行检测,并根据检测结果将返回请求下载文件的备用地址或者返回等待信息;否则,返回请求下载文件的下载主地址、备用地址、md5值和文件大小。
所述统计单元用于接收用户端发送的下载结果反馈信息,根据下载结果反馈信息统计所述下载结果反馈信息对应的用户id在第一设定时间范围内的失败率、和对应的cdn节点的ip地址在第二设定时间范围内的失败率,根据统计的失败率确定是否更新用户数据库和cdn节点数据库。
所述服务器管理模块根据更新的应用文件的类型、用户数据库中的用户id数量、cdn节点数据库中的cdn节点的ip地址数量,对所述至少一个备用服务器的启动状态进行管理。
本发明提出,通过统计用户端和cdn节点的下载失败率,对被劫持率进行预估,当某一用户id的下载失败率较高时,说明该用户端有可能被劫持,当某一cdn节点的下载失败率较高时,说明该cdn节点有可能被劫持或者出现了系统故障,针对前述三种情况,如果仍然返回下载主地址,比对失败和/或下载失败的可能性很高,用户在等待一段时间后,将会从备用服务器下载文件。
为了减少用户等待时间,提高用户体验,对于设定时间范围内下载失败率较高的用户端和cdn节点的应用下载请求,在备用服务器的带宽占用率满足条件的情况下,直接发送备用地址给用户端,使用户直接链接至备用服务器进行文件下载,省去特征信息的获取时间以及以及比对时间。
为了不影响备用服务器的正常运行,本发明还设置如下:只有在备用服务器的带宽占用率小于带宽占用率阈值时,才会返回备用地址。
以上本发明的技术方案,与现有相比,其显著的有益效果在于:
1)通过统计用户端和cdn节点的下载失败率,对被劫持率进行预估,对于设定时间范围内下载失败率较高的用户端和cdn节点的应用下载请求,在备用服务器的带宽占用率满足条件的情况下,直接发送备用地址给用户端,减少用户端的等待时间,提高用户体验。
2)通过设置多台备用服务器,满足劫持风险高的情况下的用户下载需求,提高用户端的更新成功率。
3)通过管理多台备用服务器的启动情况,在确保下载需求得到满足的同时,尽可能地减少资源占用。
应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。另外,所要求保护的主题的所有组合都被视为本公开的发明主题的一部分。
结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本发明教导的具体实施方式的实践中得知。
附图说明
附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:
图1是本发明的基于cdn的反劫持下载方法的流程图。
图2是本发明的用户端获取下载相关信息的其中一个例子的流程图。
图3是本发明的用户端下载应用文件的其中一个例子的流程图。
具体实施方式
为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。
结合图1,本发明提及一种基于cdn的反劫持下载方法,所述下载方法包括:
s1:创建用户数据库和cdn节点数据库,所述用户数据库用于存储第一设定时间范围内所有下载失败率大于第一下载失败率阈值的用户id,所述cdn节点数据库用于存储第二设定时间范围内所有下载失败率大于第二下载失败率阈值的cdn节点的ip地址。
s2:接收用户端发送的应用下载请求,所述应用下载请求中包括请求下载文件信息、用户id和/或cdn节点的ip地址。
s3:将所述应用下载请求中包含的用户id与用户数据库做比对,将所述应用下载请求中包含的cdn节点的ip地址与cdn节点数据库做比对,如果所述应用下载请求中包含的用户id和/或cdn节点的ip地址中的任意一个存储在用户数据库和/或cdn节点数据库中,进入步骤s4,否则,进入步骤s5。
s4:对请求下载文件的备用地址所在的备用服务器的带宽占用率进行检测,如果备用服务器的带宽占用率小于带宽占用率阈值,返回请求下载文件的备用地址至用户端,否则定期循环检测带宽占用率,直至循环次数达到第一预设次数阈值,返回等待信息至用户端,结束流程。
s5:返回请求下载文件的下载主地址、备用地址、md5值和文件大小。
s6:接收用户端发送的下载结果反馈信息,如果下载结果反馈信息为主地址下载成功,结束流程,如果下载结果反馈信息为备用地址下载成功,统计所述下载结果反馈信息对应的用户id在第一设定时间范围内的失败率、和对应的cdn节点的ip地址在第二设定时间范围内的失败率,根据统计的失败率确定是否更新用户数据库和cdn节点数据库,结束流程。
结合图2、图3,在一些例子中,步骤s5中,所述用户端接收返回的下载主地址、备用地址、md5值和文件大小,按照以下步骤下载请求下载文件:
s51:获取下载主地址上的实际文件大小,将之与返回的文件大小做比对,如果比对成功,进入步骤s52,否则,循环获取下载主地址上的实际文件大小,将之与返回的文件大小做比对,直至比对失败次数达到第二预设次数阈值,进入步骤s54。
s52:获取下载主地址上的文件的实际md5值,将之与返回的md5值做比对,如果比对成功,进入步骤s53,否则,循环获取下载主地址上的文件的实际md5值,将之与返回的md5值做比对,直至比对失败次数达到第三预设次数阈值,进入步骤s54。
s53:从下载主地址下载文件,并返回主地址下载成功指令,结束流程。
s54:从备用地址下载文件,并返回备用地址下载成功指令,结束流程。
只有当两次比较(文件大小、md5值)均比对成功时,才会从下载主地址进行下载,否则将切换至备用地址进行下载。
例如,某一用户端请求更新应用,将依次执行以下步骤:
步骤1、androidapp请求更新接口,成功后返回app更新的下载主地址,备用地址,前1024字节的md5值,app文件的大小。
步骤2、用httpurlconnection请求主地址下载androidapp,首先用httpurlconnection的getcontentlength()方法获取文件的大小,与接口返回的文件大小相比较,如果相等则进行步骤3,否则继续执行步骤2,循环10次退出,切换备用地址下载。
步骤3、用httpurlconnection的getinputstream()获取文件流,读取前1024字节到缓存中,计算其md5值,与接口返回的md5值相比较,一致则继续下载直至下载完毕;不一致则继续进行步骤3,循环10次退出,切换备用地址下载。
步骤4、备用地址下载,采用httpurlconnection请求下载,androidapp放在企业自有服务器上,不存在被劫持的可能。
步骤5、下载完成(失败)后,给服务器发请求,告诉管理服务器下载结果,即下载成功(失败)。
步骤6、下载失败时,接口返回失败的cdn节点的ip地址及用户id给服务器,服务器分别计算用户id和cdn节点的下载失败率。
当下次用户id启动更新时,获取备用服务器带宽冗余状态,在用户失败率高于50%(其中一种第一下载失败率阈值的例子)且带宽占用低于50%(带宽占用阈值)时,全部返回备用地址,提高用户更新app成功率。cdn节点的判断规则类似。
经过测试,在采用前述方法解决劫持问题之后,用户能够正常更新,更新成功率达99%,同时,用户体验效果佳,下载等待时间接近无劫持时的下载等待时间。
在另一些例子中,所述第一设定时间范围为以当前时刻作为终点的第一设定时间区间范围。所述第二设定时间范围为以当前时刻作为终点的第二设定时间区间范围。
关于下载失败率阈值(包括第一下载失败率阈值和第二下载失败率阈值)和设定时间范围(包括第一设定时间范围和第二设定时间范围),由于其分别用来衡量用户端和cdn节点,因此取值应该根据用户端和cdn节点的特性分别设置,例如用户端的下载次数较少,两次下载请求之间的时间间隔较长,用户端的相关属性相对而言较为稳定,因此,可以直接统计用户id在一个较长时间范围内的下载失败率。而cdn节点的下载总数多,两次下载请求之间的时间间隔短,并且cdn节点服务器通常设置有管理机制,日常维护较为频繁,并且当出现异常时,管理人员会尽快介入对cdn节点进行调整,即cdn节点服务器的相关属性较之用户端来说更为动态,同时,一个cdn节点同时为大量用户提供服务,如果长期将cdn节点列入cdn节点数据库,对用户和备用服务器的影响均比较大,因此,对于cdn节点,可以统计其在一个较短时间范围内的下载失败率。
直接划分至备用地址下载的应用下载请求中,有可能存在部分能够比对成功从下载主地址进行下载的应用下载请求,这部分请求(为了便于描述,将之定义成正常请求)的占比如果过大,将会造成备用服务器的负荷较重。为此,本发明提出通过合理选择下载失败率阈值来控制前述正好请求的占比。换言之,下载失败率阈值的取值和备用服务器的性能相关,对于同一批应用下载请求,设置的下载失败率阈值越低,被直接划分至备用地址下载的请求越多,其中包含的正常请求的占比也越大,备用服务器的运算负荷也越大。
优选的,考虑到用户端对备用服务器的影响小于cdn节点对备用服务器的影响、以及cdn节点动态属性、维护频繁等特点,第一下载失败率阈值小于第二下载失败率阈值。
在另一些例子中,所述方法还包括:
设置多个备用服务器,每个备用服务器提供一个备用地址,选取其中一个备用服务器作为常用备用服务器,其余备用服务器被定义成临时备用服务器。
如果以下两个条件同时成立:1)更新了新的应用文件,2)常用备用服务器的带宽占用率大于等于带宽占用率阈值,启动一个或者多个临时备用服务器。
在新的应用文件更新时,单位时间内的应用下载请求数量会在短时间内维持较高的数值,划分至备用服务器的请求数量可能会同步增长。考虑到这一点,本发明提出设置多个备用服务器,当以下两个条件同时成立时,:1)更新了新的应用文件,2)常用备用服务器的带宽占用率大于等于带宽占用率阈值,启动一个或者多个临时备用服务器,将异常请求(与正常请求相对的概念)分配至多个临时备用服务器,减少用户的等待时间和重复操作时间,提高用户体验,增加用户粘性。
其中,所述启动一个或者多个临时备用服务器是指,
结合更新的应用文件的类型、用户数据库中的用户id数量、cdn节点数据库中的cdn节点的ip地址数量,计算得到临时备用服务器的启动数量。
所述更新的应用文件的类型包括应用文件的更新等级,例如系统强制升级等强制更新、系统优化等可选更新等。当更新的应用文件的类型为强制更新时,更新量无疑会比较大,此时需要启动较多的临时备用服务器,而对于可选更新,启动较少的临时备用服务器或者不启动任何临时备用服务器,以节约服务器资源。
另外,当用户数据库中的用户id数量、cdn节点数据库中的cdn节点的ip地址数量较多时,例如多个cdn节点服务器被劫持,同样会导致大量请求被划分至备用服务器处理,此时需要启动较多的临时备用服务器。
在某些情形下,还需要考虑常用备用服务器的工作状态等等。
应当理解,在实际应用中,需要结合以上多种影响因素进行综合考虑,计算得到临时备用服务器的启动数量,尽可能合理地利用服务器资源。
优选的,所述方法还包括:
对所述备用服务器定义优先级,其中,常用备用服务器的优先级最高,实时检测每个处于启动状态的临时备用服务器的带宽占用率。
响应于接收到用户端发送的应用下载请求、并且所述应用下载请求中包含的用户id和/或cdn节点的ip地址中的任意一个存储在用户数据库和/或cdn节点数据库中,筛选出所有用户带宽占用率小于带宽占用率阈值的备用服务器,将其中优先级最高的备用服务器所对应的备用地址返回至用户端。
通过该方式,使多个备用服务器之间有序工作,避免造成分配紊乱或者服务器资源的浪费。
基于前述方法,本发明还提及一种基于cdn的反劫持下载系统,所述系统包括下载管理模块、服务器管理模块、至少一个备用服务器。
所述下载管理模块包括请求接收单元、用户数据库、cdn节点数据库、比对单元、带宽占用率检测单元、统计单元。
所述用户数据库用于存储第一设定时间范围内所有下载失败率大于第一下载失败率阈值的用户id。
所述cdn节点数据库用于存储第二设定时间范围内所有下载失败率大于第二下载失败率阈值的cdn节点的ip地址;接收用户端发送的应用下载请求,所述应用下载请求中包括请求下载文件信息、用户id和/或cdn节点的ip地址。
所述请求接收单元用于接收并解析用户端发送的应用下载请求,所述应用下载请求中包括请求下载文件信息、用户id和/或cdn节点的ip地址。
所述比对单元用于将所述应用下载请求中包含的用户id与用户数据库做比对,将所述应用下载请求中包含的cdn节点的ip地址与cdn节点数据库做比对:
如果所述应用下载请求中包含的用户id和/或cdn节点的ip地址中的任意一个存储在用户数据库和/或cdn节点数据库中,调用带宽占用率检测单元对请求下载文件的备用地址所在的备用服务器的带宽占用率进行检测,并根据检测结果将返回请求下载文件的备用地址或者返回等待信息;否则,返回请求下载文件的下载主地址、备用地址、md5值和文件大小。
所述统计单元用于接收用户端发送的下载结果反馈信息,根据下载结果反馈信息统计所述下载结果反馈信息对应的用户id在第一设定时间范围内的失败率、和对应的cdn节点的ip地址在第二设定时间范围内的失败率,根据统计的失败率确定是否更新用户数据库和cdn节点数据库。
所述服务器管理模块根据更新的应用文件的类型、用户数据库中的用户id数量、cdn节点数据库中的cdn节点的ip地址数量,对所述至少一个备用服务器的启动状态进行管理。
在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。本公开的实施例不必定义在包括本发明的所有方面。应当理解,上面介绍的多种构思和实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。
虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。