网页访问请求处理方法和分配方法

文档序号:6551088阅读:190来源:国知局
网页访问请求处理方法和分配方法
【专利摘要】本发明公开了处理用户访问网页的请求的方法及系统,其中,在同一台代理服务器中预先启动至少两个进程,每个进程中创建至少两个处理单元,所述方法包括:在接收到多个用户访问网页的当前请求时,根据各个用户的属性信息以及各个进程的状态信息,为各个用户的当前请求分配进程;在所述分配的进程中为所述当前请求分配处理单元;通过所述分配的处理单元,向所述当前请求对应的网页服务器发送请求以获取网页内容,以便返回给客户端进行展现。能够在大用户量并发的情况下,提高代理服务器的响应速度。
【专利说明】网页访问请求处理方法和分配方法
[0001]本发明专利申请是申请日为2012年05月02日、申请号为201210135416.5、名称为“处理用户访问网页的请求的方法及系统”的中国发明专利申请的分案申请。

【技术领域】
[0002]本发明涉及计算机【技术领域】,特别是涉及处理用户访问网页的请求的方法及系统。

【背景技术】
[0003]浏览器是用来从网站获取网页内容的工具软件。一般而言,它必须具备解析网页上的各种元素的能力,解析完成之后,要进行页面各个元素的定位计算。然后,浏览器在调用基于平台的API来完成页面的绘制,最终页面上的各种元素才会显示在用户面前。这个过程在PC上是一个很顺畅的过程,但是在手机等移动终端上,由于移动通信技术的限制,目前移动终端上网不可能达到以太网所能够达到的传输速度,另外,由于一些移动终端的硬件处理能力有限,而渲染、排版和绘制网页页面会耗费大量的资源进行计算,对于这些处理能力有限的移动终端来说,需要消耗的时间和电量等开销就好比较大,为了解决这些问题,基于服务器渲染排版的技术便应运而生了。
[0004]该技术把耗时且费资源的操作封装在服务端,使用这种技术的浏览器通常被设计为c/s(客户端/代理服务器)架构。在这种架构下,用户访问网页的请求会被浏览器的客户端发送到代理服务器端,代理服务器向网页服务器发送访问网页的请求,并获取到网页资源之后,能够对大流量的资源进行压缩和处理,然后将压缩和处理过的数据发送至客户端,客户端只需对数据做简单的操作就能显示网页内容。这种轻客户端的模式降低了对移动终端的要求,但是又能够在移动终端用户使用的网络低速,以及移动设备的处理能力有限的情形下,也能获得比较好的用户体验。所以目前这种基于服务端渲染排版的模式在手机等移动终端使用的浏览器上大行其道,并且该技术向着客户端更轻量化、服务端更重量化的方向发展,例如,服务端负责大流量资源文件的压缩、页面的解析、页面的定位计算和页面的排版,以及将排版后的结构体转换为能够让客户端解析出来的二进制数据,这样客户端直接根据对这些二进制数据进行解析,然后进行相应的绘制及显示即可。这种发展方向有利于降低对移动终端硬件性能的要求,但是其缺点在于:由于服务端需要处理的工作大幅增加了,而所有使用其客户端的用户请求都会发送到服务端,由服务端进行处理,因此,在同一时间段内多个用户请求并发的情况下,可能会降低服务端的响应速度,结果反而降低了用户的移动终端上浏览器的响应速度。


【发明内容】

[0005]本发明提供了处理用户访问网页的请求的方法及系统,能够在大用户量并发的情况下,提高代理服务器的响应速度。
[0006]本发明提供了如下方案:
[0007]—种处理用户访问网页的请求方法,在同一台代理服务器中预先启动至少两个进程,每个进程中创建至少两个处理单元,所述方法包括:
[0008]在接收到多个用户访问网页的当前请求时,根据各个用户的属性信息以及各个进程的状态信息,为各个用户的当前请求分配进程;
[0009]在所述分配的进程中为所述当前请求分配处理单元;
[0010]通过所述分配的处理单元,向所述当前请求对应的网页服务器发送请求以获取网页内容,以便返回给客户端进行展现。
[0011]其中,将同一用户的不同请求分配给同一进程。
[0012]其中,所述在接收到多个用户访问网页的当前请求时,根据各个用户的属性信息以及各个进程的状态信息,为各个用户的当前请求分配进程,包括:
[0013]根据各个用户的属性信息判断当前请求是否为新用户的请求;
[0014]如果当前请求不是新用户的请求,则根据该用户的分配历史以及各个进程的状态信息为所述当前请求分配进程。
[0015]其中,所述根据各个用户的属性信息判断当前请求是否为新用户的请求包括:
[0016]获取所述当前请求对应的用户的属性信息;
[0017]如果当前请求对应的用户的属性信息未出现在所述历史分配记录中,则所述当前请求为新用户的请求;其中,所述历史分配记录用于记录在历史处理过程中,用户请求对应的用户的属性信息与分配给该用户请求的进程之间的对应关系。
[0018]其中,所述如果当前请求不是新用户的请求,则根据该用户的分配历史以及各个进程的状态信息为所述当前请求分配进程,包括:
[0019]如果所述当前请求不是新用户的请求,并且历史分配记录中该用户的属性信息对应的进程包含空闲的处理单元,则将该进程分配给当前请求。
[0020]其中,所述历史分配记录中还记录有用户请求对应的用户的属性信息与分配给请求的处理单元之间的对应关系;
[0021]所述在分配的进程中为所述请求分配处理单元,包括:
[0022]将历史分配记录中该用户的属性信息对应的处理单元分配给当前请求。
[0023]其中,还包括:
[0024]如果当前请求是新用户的请求,则将当前具有最多空闲处理单元的进程分配给当前请求。
[0025]其中,还包括:
[0026]如果全部进程中都不存在空闲处理单元,则判断是否存在处理时间超时的处理单元,如果是,则将该处理单元所在的进程分配给当前请求;
[0027]所述在所述分配的进程中为所述当前请求分配处理单元包括:
[0028]将所述处理时间超时的处理单元的当前任务结束,并将其分配给当前请求。
[0029]其中,所述代理服务器为至少两个,所述方法还包括:
[0030]为各个用户的当前请求分配代理服务器。
[0031]其中,所述为各个用户的当前请求分配代理服务器包括:
[0032]对各代理服务器进行实时的心跳监控,将能够正常监测到心跳信息的代理服务器加入到可用代理服务器列表中;
[0033]从所述可用代理服务器列表中为当前请求分配代理服务器。
[0034]其中,还包括:
[0035]将未能监测到心跳信息的代理服务器从所述可用代理服务器列表中删除;当重新监测到代理服务器的心跳信息时,将其加入到所述可用代理服务器列表中。
[0036]一种处理用户访问网页的请求系统,在同一台代理服务器中预先启动至少两个进程,每个进程中创建至少两个处理单元,所述系统包括:
[0037]进程分配模块,用于在接收到多个用户访问网页的当前请求时,根据各个用户的属性信息以及各个进程的状态信息,为所述各个用户的当前请求分配进程;
[0038]处理单元分配模块,用于在所述分配的进程中为所述当前请求分配处理单元;
[0039]网页内容处理模块,用于通过所述分配的处理单元,向所述当前请求对应的网页服务器发送请求以获取网页内容,以便返回给客户端进行展现。
[0040]其中,将同一用户的不同请求分配给同一进程。
[0041]其中,所述进程分配模块包括:
[0042]判断子模块,用于根据各个用户的属性信息判断当前请求是否为新用户的请求;
[0043]进程分配子模块,用于如果当前请求不是新用户的请求,则根据该用户的分配历史以及各个进程的状态信息为所述当前请求分配进程。
[0044]其中,所述判断子模块包括:
[0045]用户标识获取子模块,用于获取所述当前请求对应的用户的属性信息;
[0046]比对子模块,用于如果当前请求对应的用户的属性信息未出现在所述历史分配记录中,则所述当前请求为新用户的请求;其中,所述历史分配记录用于记录在历史处理过程中,用户请求对应的用户的属性信息与分配给该用户请求的进程之间的对应关系。
[0047]其中,所述进程分配子模块具体用于:
[0048]如果所述当前请求不是新用户的请求,并且历史分配记录中该用户的属性信息对应的进程包含空闲的处理单元,则将该进程分配给当前请求。
[0049]其中,所述历史分配记录中还记录有用户请求对应的用户的属性信息与分配给请求的处理单元之间的对应关系;
[0050]所述处理单元分配模块具体用于:
[0051]将历史分配记录中该用户的属性信息对应的处理单元分配给当前请求。
[0052]其中,还包括:
[0053]新用户请求分配模块,用于如果当前请求是新用户的请求,则将当前具有最多空闲处理单元的进程分配给当前请求。
[0054]其中,还包括:
[0055]超时处理模块,用于如果全部进程中都不存在空闲处理单元,则判断是否存在处理时间超时的处理单元,如果是,则将该处理单元所在的进程分配给当前请求;
[0056]所述处理单元分配模块具体用于:
[0057]将所述处理时间超时的处理单元的当前任务结束,并将其分配给当前请求。
[0058]其中,所述代理服务器为至少两个,所述系统还包括:
[0059]代理服务器分配模块,用于为各个用户的当前请求分配代理服务器。
[0060]其中,所述代理服务器分配模块包括:
[0061]心跳监控子模块,用于对各代理服务器进行实时的心跳监控,将能够正常监测到心跳信息的代理服务器加入到可用代理服务器列表中;
[0062]代理服务器分配子模块,用于从所述可用代理服务器列表中为当前请求分配代理服务器。
[0063]其中,还包括:
[0064]列表更新模块,用于将未能监测到心跳信息的代理服务器从所述可用代理服务器列表中删除;当重新监测到代理服务器的心跳信息时,将其加入到所述可用代理服务器列表中。
[0065]根据本发明提供的具体实施例,本发明公开了以下技术效果:
[0066]通过本发明,可以预先在同一台代理服务器中启动多个进程并在每个进程中创建多个处理单元,这样,就不必在用户请求到达时再重新进行进程及处理单元的创建,因此,可以缩短用户实际感知到的处理时间,而且能够满足大用户量并发时的处理需求;同时,多进程的方式可以充分代理服务器中多核的资源,提高处理效率,这也能提高服务器的响应速度。

【专利附图】

【附图说明】
[0067]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0068]图1是本发明实施例提供的方法的流程图;
[0069]图2是本发明实施例提供的另一方法的流程图;
[0070]图3是本发明实施例提供的第一系统的示意图;
[0071]图4是本发明实施例提供的第二系统的示意图;
[0072]图5是本发明实施例提供的第三系统的示意图。

【具体实施方式】
[0073]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
[0074]首先需要说明的是,本发明实施例是在基于服务器的网页渲染排版技术基础上进行的改进,前提仍然是将耗时且费资源的操作封装在服务端,由服务端进行需要大量计算作业的网页资源压缩、页面的解析、定位以及渲染排版等工作,通过这一系列的操作,将网页转化为更加适合移动终端设备显示的页面,并将页面以二进制数据的形式发送至移动终端设备,由移动终端设备进行解析,由此,降低了使用移动终端设备访问网页时对网络的需求,以及移动终端处理网页资源时的计算量。然而,随着移动终端设备的多元化和普及程度的提高,使用移动终端访问网页服务器的用户数量高速增长,这就对传统的基于服务器渲染排版的技术提出了新的要求,比如在同一时间段内,如果大量的用户请求并发,可能会降低服务端的响应速度,服务端的作业出现延时甚至是服务器的部分资源停止响应,结果反而降低了浏览器的响应速度。
[0075]为了避免上述情况的发生,本发明实施例提供了相应的解决方案,在此方案中,可以在代理服务器中预先启动多个进程,并在每个进程中启动多个处理单元;这些处理单元的作用相当于普通浏览器(相对于C/S架构浏览器)中的窗口(例如用户在点击某链接时,普通的网页浏览器会创建一个窗口,最终将页面显示在该窗口中),但也不完全等同。具体而言,这种处理单元可以对用户访问网页的请求进行处理,例如,包括将请求发送到网页服务器,然后对接收到的网页数据进行解析、渲染、排版等一系列操作,但不同之处在于,由于这种处理单元位于代理服务器端,因此并不需要具有显示界面;而真正的显示界面是由用户计算机上安装的客户端来创建的,因此,这种处理单元需要将网页数据的处理结果通过一些私有的协议发送给客户端,由客户端进行绘制并显示在用户界面上。
[0076]换言之,本发明实施例中启动的处理单元,与传统的C/S架构下用于处理用户请求的处理单元的作用相同,但创建的时机不同;在传统的C/S架构下,一般是在接收到用户请求之后,再进行处理单元的创建,这样相当于创建窗口的耗时也成为用户可感知的网页处理时间的一部分;虽然一般而言创建窗口是很快的,但是在大用户量并发的情况下,仍然可能会导致整体处理时间的延长。而在本发明实施例中,处理单元是预先创建好的,当接收到用户请求之后,只需要将用户请求按照一定的策略分配到指定的处理单元即可,而不需要每接收到一个用户请求时再分别创建处理单元,因此可以从整体上提高响应速度,从一定程度上缩短用户可感知的处理时间。
[0077]另外,由于具体的处理单元是需要在一定的进程中创建的,而一个进程中允许创建多个处理单元,这样可以使得在一个进程中处理多个用户请求,因此,在本发明实施例中,采用了这种在进程中创建多个处理单元的方式。同时,一个进程中允许创建的处理单元数目毕竟也是有限的,如果一台代理服务器上仅启动一个进程,则能够容纳的用户请求数量仍然会比较有限;另一方面,代理服务器一般会采用多核技术,也就是说一台代理服务器具有多个内核,不同的进程在不同的内核上可以同时运行,这样可以大大提高处理速度。因此,在本发明实施例中,还采用了在同一台代理服务器上创建多个进程的方式,这样,可以提高单台代理服务器可容纳的用户请求数量,同时充分利用代理服务器的多核的资源。当然,代理服务器上的进程也是先于用户请求启动的。
[0078]在以上所述的前提下,参见图1,本发明实施例提供的处理用户访问网页的请求的方法包括以下步骤:
[0079]SlOl:在接收到多个用户访问网页的当前请求时,根据各个用户的属性信息以及各个进程的状态信息,为所述各个用户的当前请求分配进程;
[0080]S102:在所述分配的进程中为所述当前请求分配处理单元;
[0081]用户计算机上安装的浏览器客户端会首先接收到用户访问某网页的当前请求(例如用户当前点击了某链接,或者当前在地址栏中输入了某网址并执行了确认操作等),然后客户端将该当前请求发送到服务器端。代理服务器端由于已经预先启动了多个进程,因此,在接收到用户请求之后,就可以将用户的当前请求分配到其中一个进程中。当然,具体能够对用户请求进行处理的是处理单元,而一个进程中还创建了多个处理单元,因此,还需要将当前请求分配到一个具体的处理单元中进行处理。
[0082]具体在根据各个用户的属性信息以及各个进程的状态信息,为各个用户的当前请求分配进程及处理单元时,可以有多种方式,例如,直接将当前请求分配到空闲处理单元最多的进程中,然后在该进程中任选一个空闲的处理窗口等等。或者,在本发明实施例中,为了保证资源的重复利用,可以尽量将同一用户的不同请求分配到同一进程中,这样可以进一步节省处理时间。例如,有些网站(如某些购物网站等)需要用户的账户及密码等登录信息,一般情况下,用户在访问同一网站下的不同网页时,只登录一次即可,例如,用户在某网站的首页上登录之后,在访问该网站的所有网页时,登录信息都是有效的。但在本发明实施例中,由于同一台代理服务器上会处理多个用户的请求,要实现这种效果,其前提是这些网页对应的处理单元在同一进程中。这是因为,当在某进程中处理用户的首次登陆请求后,可以在浏览器的Cookie中进行保存一些信息,例如,在网站中的登录信息,后续当同一用户访问同一网站中的其他网页时,就可以从Cookie中取出保存的这些信息,从而保证登录状态的连续性。或者,Cookie中还可以保存用户访问过的网页的数据信息等,针对用户访问过的一个网页,当再次发起访问时,可以直接根据保存的信息返回给用户,而不必再重新向网页服务器发起请求,等等。这种Cookie会进行持久化存储,但是如果是同一进程的不同处理单元或者不同的进程处理“已经有历史记录”的请求时,需要从持久化存储获取一次信息,这样不如直接由历史处理单元处理时高效。因此,在本发明实施例中,为了实现前述目的,在为用户请求分配进程时,可以进来将同一用户的请求分配到同一进程,甚至还可以尽量分配到同一处理单元。为了该目的,具体实现时,可以首先判断当请请求是否为新用户的请求,然后根据判断的结果向当前请求进行进程的分配。具体实现时,参见图2,还可以采用如下方式来处理:
[0083]S201:判断当前请求是否为新用户的请求;如果是,则进入步骤S202,否则进入步骤 S206 ;
[0084]为了能够判断当前请求是否为新用户的请求,可以在历史处理的过程中,在为用户请求分配进程的同时,还可以记录下用户请求对应的用户属性信息与为该请求分配的进程之间的对应关系,这样,在代理服务器端就可以维护一个历史分配列表,在该列表中记录了为各个用户分配的进程分别是哪个。当接收到一个当前请求时,同样可以先获取到该请求对应的用户属性信息,然后判断该用户属性信息是否出现在历史分配列表中,如果是,则证明该用户之前访问过其他的网页,也就是说,该当前请求不是一个新用户的请求;否则,如果未出现在历史分配列表中,则证明当前请求是一个新用户的请求。
[0085]需要说明的是,历史分配记录中记录的数据并不是永久性的,而是要在一定时间后删除,例如,对于某一条记录,自生成之时起经过一段预置的时间之后,就可以将其从历史分配记录中删除。也就是说,同一个用户的请求对应着一个大的会话(sess1n),该会话建立之后,即使中间插入了其他用户的请求,也不会中断,但是该会话的存续仍然存在超时时间,当接收了一个用户的某请求之后,如果很长一段时间之后都没有再收到该用户的请求,则证明用户目前可能不再需要访问其他的网页,相应的,该会话也就可以结束。可见,这里所谓的“新用户”并不是新入网的用户,或者新安装了该C/S架构的浏览器的用户等等,而是指在一定时间段内是否有过访问请求的用户。
[0086]在具体实现时,用户属性信息可以由浏览器客户端的ID来表示。在实际应用中,在安装浏览器客户端时,会带有唯一标识该浏览器客户端的ID,客户端在向服务器发送用户的访问请求时,会携带该ID,因此,就可以通过该ID来区分不同的用户。当然,如果用户注册过浏览器账户,并且当前处于登录状态,则也可以根据用户的登录信息来获取用户属性信息,或者,还可以将用户的IP地址作为用户属性信息,等等。关于各个进程的状态信息可以包括进程包括的空闲处理单元的数目等等。
[0087]S202:判断各个进程中是否存在空闲处理单元;如果是,则进入步骤S203,如果每个进程中都不存在空闲的处理单元,进入步骤S204 ;
[0088]S203:选出空闲窗口最多的进程分配给当前请求,并从中选择一个空闲窗口分配给当前请求;
[0089]S204:判断进程中是否存在处理时间超时的处理单元;如果是,则进入步骤S205,否则,可以等待,直到有处理单元空闲,或者有处理单元的处理时间超时;
[0090]如果某处理单元的处理时间超时,则证明该处理单元可能发生了故障,客户端测的窗口可能早已被用户关闭,因此,可以将其结束,分配给其他请求使用。
[0091]S205:将超时时间最长的处理单元及其对应的进程分配给当前请求;
[0092]S206:获取该用户的历史请求所在的进程,将该进程分配给当前请求;
[0093]当然,在将该用户的历史请求所在的进程分配给该当前请求之前,还可以首先判断下该进程是否存在空闲的处理单元,如果存在,则将其分配给当前请求,否则,可以等待,直到有处理单元完成当前的处理,或者将其他进程分配给该当前请求。
[0094]S207:判断该用户的历史请求对应的历史处理单元是否空闲,如果空闲,则进入步骤S208 ;否则进入S209 ;
[0095]S208:将该历史处理单元分配给当前请求;
[0096]S209:在该用户的历史请求所在的进程选择一个空闲处理单元分配给当前请求。
[0097]步骤S207及S208为可选的步骤,也就是说,在实际应用中,在步骤S206之后可以直接进入步骤S209,将该用户的历史请求所在的进程中任意一个空闲处理单元分配给当前请求;但如果经过该步骤S207,则可以将同一用户的请求尽量分配到同一进程的同一处理单元中,这样,可以进一步保证资源的重复利用,提高处理效率。
[0098]可见,通过上述处理,不仅能够增加代理服务器的吞吐量,还可以尽可能保证同一用户在访问中的连续性,从而进一步提高处理及响应速度。当然,在实际应用中,有些窗口可能在运行中会出现故障,此时,如果将用户请求分配给该窗口,则会导致该请求无法得到及时处理。因此,在本发明实施例中,可以对各个处理单元的状态进行监控,当发现某处理单元出现故障时,为了避免同一进程中其他处理单元的正常运行,可以首先将故障处理单元所在的进程打上标记,避免有新的请求被分配到该进程,然后,等到该进程中所有的处理单元正在处理的任务都完成之后,再将该进程关闭,然后再重新启动该进程,并重新创建处理单元。
[0099]除此之外,为了进一步提高吞吐量及响应速度,在代理服务器端还可以采用服务器集群的方式,也就是说,可以在服务器端部署多个代理服务器,每个代理服务器中都具有前述所有功能,例如,都可以预先启动多个进程,每个进程中初始化多个处理单元,并且还可以进行同一用户的连续性访问等处理。当然,每台代理服务器的硬件配置可以是不同的
[0100]在采用服务器集群的情况下,还涉及到将用户的当前请求在不同的代理服务器之间进行分配的问题,此时,还可以在服务器端部署一个专门用于分发的服务器,当然也可以在某一台代理服务器上增加分发模块。当客户端发送的用户当前请求到达服务器端时,可以首先到达该分发服务器或分发模块,然后由分发服务器或分发模块为当前请求分配代理服务器。在分配代理服务器时,可以采用多种策略来实现,例如,可以预先获取到各个代理服务器的性能参数,根据代理服务器的性能参数确定出各自的处理能力,然后基于各自的处理能力,为各个代理服务器进行请求的分配。或者,还可以对各个代理服务器处理的请求总数进行监控,或者由各个代理服务器上报各自正在处理的请求总数,然后结合各自的处理能力,进行更有效的分配。
[0101]分发服务器或分发模块在各个代理服务器之间进行分配时,可以采用类似DNS的方式来实现,但是,在实际应用中,代理服务器也可能出现故障,此时,为了避免对用户请求的处理速度产生影响,应该能够及时停止向该发生故障的代理服务器分配用户请求。然而,如果使用DNS的方式进行分发,则无法达到该要求,这是因为,传统的DNS服务在单台服务器出现故障之后,并不会停止转发新请求到故障的服务器上,而必须首先修改DNS配置,而DNS服务器存在缓存,缓存的更新需要时间,所以修改DNS配置之后,转发不会立即停止,需要等到各级DNS缓存更新完毕之后,才能停止转发新请求到故障的服务器上。为此,在本发明实施例中,可以不使用DNS的方式进行分发,而是直接在分发服务器或者分发模块中,对各个代理服务器进行实时或准实时心跳监测(可以配置监控的时间间隔,单位在秒级别),所谓的心跳监测也就是对代理服务器进行故障监测,如果某代理服务器发生故障,则当分发服务器或分发模块向其发送心跳测试信号时,将无法返回响应,这样,代理服务器上线下线都能监控到并处理。同时,还可以将能够正常监测到心跳信息的代理服务器加入到可用代理服务器列表中,在向当前请求分配代理服务器时,从该列表中选择代理服务器,这样就可以保证有故障的代理服务器不会被选择到。对于已经处于可用代理服务器列表中的代理服务器,当又发现未能监测到其心跳信息时,还可以将其从可用代理服务器列表中删除,一旦故障服务器恢复之后,分发服务器或分发模块监测到故障服务器的心跳信息了,则故障服务器就会重新加入到可用代理服务器列表中,当有用户请求时,又可以重新分配到该代理服务器中。
[0102]在将某当前请求分配到某代理服务器上之后,对于进程以及处理单元的分配可以按照前文所述的来处理,这里不再赘述。可见,在这种服务器集群的方式下,可以实现两个层次的调度,一个是代理服务器之间的物理层,另一个是进程层,通过这种多级调度机制,可以提高整体的处理能力以及响应速度。
[0103]S103:通过所述分配的处理单元,向所述当前请求对应的网页服务器发送请求以获取网页内容,以便返回给客户端进行展现。
[0104]在给一个请求分配了处理单元之后,该处理单元就可以对请求进行解析,然后构造网页访问请求到网页服务器,以获取网页资源,在获取到网页资源之后就可以进行解析、渲染、排版等处理,之后转换成二进制数据返回给客户端,供客户端进行绘制及网页的显示。当然,本发明不仅仅适用于上述处理单元执行了解析、渲染、排版等处理的情况,在处理单元所需执行的操作发生变化时(例如代理服务器变得更重或者更轻),也可以使用本发明实施例提供的方案来实现。
[0105]需要说明的是,在一个处理单元完成了对一个请求的处理之后,该处理单元并不会关闭,而是将处理该请求时申请的资源(包括与网页服务器建立连接时的链接资源、用于对各种资源进行缓存的存储资源、计算资源等等)释放掉,然后等待其他请求的到来,以此周而复始。当然,为了达到前述同一用户的不同请求能够复用一些资源的目的,处理单元可以不必释放页面请求的结果。
[0106]与本发明实施例提供的处理用户访问网页的请求的方法相对应,本发明实施例还提供了一种处理用户访问网页的请求系统,在该系统中,需要在代理服务器中预先启动至少两个进程,每个进程中创建至少两个处理单元,参见图3,该系统包括:
[0107]进程分配模块301,用于在接收到多个用户访问网页的当前请求时,根据各个用户的属性信息以及各个进程的状态信息,为所述各个用户的当前请求分配进程;
[0108]处理单元分配模块302,用于在所述分配的进程中为所述当前请求分配处理单元;
[0109]网页内容处理模块303,用于通过所述分配的处理单元,向所述当前请求对应的网页服务器发送请求以获取网页内容,以便返回给客户端进行展现。
[0110]为了保证用户访问的连续性,进一步提高响应速度,可以将同一用户的不同请求分配给同一进程。
[0111]具体实现时,为了实现上述将同一用户的不同请求分配给同一进程,参见图4,进程分配模块301可以包括:
[0112]判断子模块3011,用于根据各个用户的属性信息判断当前请求是否为新用户的请求;
[0113]进程分配子模块3012,用于如果当前请求不是新用户的请求,则根据该用户的分配历史以及各个进程的状态信息为所述当前请求分配进程。
[0114]其中,判断子模块3011可以包括:
[0115]用户标识获取子模块,用于获取所述当前请求对应的用户的属性信息;
[0116]比对子模块,用于如果当前请求对应的用户的属性信息标识未出现在所述历史分配记录中,则所述当前请求为新用户的请求;其中,所述历史分配记录用于记录在历史处理过程中,用户请求对应的用户的属性信息与分配给该用户请求的进程之间的对应关系。
[0117]进程分配子模块3012具体可以用于:
[0118]所述当前请求不是新用户的请求,并且历史分配记录中该用户的属性信息对应的进程包含空闲的处理单元,则将该进程分配给当前请求。
[0119]为了能够应对一些网站中的特殊设计,历史分配记录中还可以记录有用户请求对应的用户的属性信息与分配给请求的处理单元之间的对应关系;
[0120]此时,处理单元分配模块302具体可以用于:
[0121]将历史分配记录中该用户的属性信息对应的处理单元分配给当前请求。
[0122]另外,该系统还可以包括:
[0123]新用户请求分配模块,用于如果当前请求是新用户的请求,则将当前具有最多空闲处理单元的进程分配给当前请求。
[0124]超时处理模块,用于如果全部进程中都不存在空闲处理单元,则判断是否存在处理时间超时的处理单元,如果是,则将该处理单元所在的进程分配给当前请求;
[0125]相应的,处理单元分配模块302具体可以用于:
[0126]将所述处理时间超时的处理单元的当前任务结束,并将其分配给当前请求。
[0127]为了进一步提高服务器的吞吐量以及响应速度,可以采用服务器集群的方式来实现,也即,代理服务器为至少两个,此时,参见图5,该系统还可以包括:
[0128]代理服务器分配模块304,用于为当前请求分配代理服务器。
[0129]需要说明的是,图5中示出的仅为各个模块之间的逻辑关系,在物理结构中,如前文所述,该代理服务器分配模块304可以部署于一个单独的分发服务器中,也可以部署于集群的任意一台代理服务器中。
[0130]为了能够及时停止向发生故障的代理服务器分发新的请求,代理服务器分配模块304可以包括:
[0131]心跳监控子模块,用于对各代理服务器进行实时的心跳监控,将能够正常监测到心跳信息的代理服务器加入到可用代理服务器列表中;
[0132]代理服务器分配子模块,用于从所述可用代理服务器列表中为当前请求分配代理服务器。
[0133]另外,还可以包括:
[0134]列表更新模块,用于将未能监测到心跳信息的代理服务器从所述可用代理服务器列表中删除;当重新监测到代理服务器的心跳信息时,将其加入到所述可用代理服务器列表中。
[0135]综上所述,通过本发明实施例提供的上述系统,可以预先在同一台代理服务器中启动多个进程并在每个进程中创建多个处理单元,这样,就不必在用户请求到达时再重新进行进程及处理单元的创建,因此,可以缩短用户实际感知到的处理时间,而且能够满足大用户量并发时的处理需求;同时,多进程的方式可以充分代理服务器中多核的资源,提高处理效率,这也能提高服务器的响应速度。
[0136]通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0137]本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0138]以上对本发明所提供的处理用户访问网页的请求的方法及系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种网页访问请求处理方法,其包括: 在同一台代理服务器中启动至少两个进程且在每个进程中创建至少两个处理单元; 当接收到用户的网页访问请求时,将所述网页访问请求分配给一个已启动的进程; 在所分配的进程中为所述网页访问请求分配一个已创建的处理单元; 通过所分配的处理单元,向所述网页访问请求对应的网页服务器发送请求以获取网页内容。
2.根据权利要求1所述的方 法,其中,将所述网页访问请求分配给一个已启动的进程进一步包括: 根据用户的属性信息判断所述网页访问请求是否为新用户的请求; 如果所述网页访问请求不是新用户的请求,则根据该用户的分配历史以及各个进程的状态信息为所述网页访问请求分配进程。
3.根据权利要求2所述的方法,其中,根据用户的属性信息判断所述网页访问请求是否为新用户的请求进一步包括: 获取所述网页访问请求对应的用户的属性信息; 如果所述网页访问请求对应的用户的属性信息未出现在历史分配记录中,则所述网页访问请求为新用户的请求;其中,所述历史分配记录用于记录在历史处理过程中,用户请求对应的用户的属性信息与分配给该用户请求的进程之间的对应关系。
4.根据权利要求3所述的方法,其中,如果所述网页访问请求不是新用户的请求,则根据该用户的分配历史以及各个进程的状态信息为所述网页访问请求分配进程进一步包括: 如果所述网页访问请求不是新用户的请求,并且历史分配记录中该用户的属性信息对应的进程包含空闲的处理单元,则将该进程分配给所述网页访问请求。
5.根据权利要求3或4所述的方法,其中,所述历史分配记录中还记录有用户请求对应的用户的属性信息与分配给请求的处理单元之间的对应关系; 在所分配的进程中为所述网页访问请求分配一个已创建的处理单元进一步包括: 将历史分配记录中该用户的属性信息对应的处理单元分配给当前请求。
6.根据权利要求2至5中任一项所述的方法,还包括: 如果所述网页访问请求是新用户的请求,则将当前具有最多空闲处理单元的进程分配给所述网页访问请求。
7.根据权利要求6所述的方法,还包括: 如果全部进程中都不存在空闲处理单元,则判断是否存在处理时间超时的处理单元,如果是,则将该处理单元所在的进程分配给所述网页访问请求; 在所分配的进程中为所述网页访问请求分配一个已创建的处理单元包括: 将处理时间超时的处理单元的当前任务结束,并将其分配给所述网页访问请求。
8.根据权利要求1至7中任一项所述的方法,其中,所述代理服务器为至少两个,所述方法还包括: 为用户的网页访问请求分配代理服务器。
9.根据权利要求8所述的方法,其中,为用户的网页访问请求分配代理服务器包括: 对各代理服务器进行实时的心跳监控,将能够正常监测到心跳信息的代理服务器加入到可用代理服务器列表中; 从所述可用代理服务器列表中为所述网页访问请求分配代理服务器。
10.根据权利要求9所述的方法,还包括: 将未能监测到心跳信息的代理服务器从所述可用代理服务器列表中删除;当重新监测到代理服务器的心跳信息时,将其加入到所述可用代理服务器列表中。
11.一种网页访问请求分配方法,其包括: 当接收到用户的网页访问请求时,按预定规则将所述网页访问请求分配给代理服务器中已启动的进程; 在所分配的进程中为所述网页访问请求分配一个已创建的处理单元。
12.根据权利要求11所述的方法,还包括: 通过所分配的处理单元,向所述网页访问请求对应的网页服务器发送请求以获取网页内容。
13.根据权利要求11或12所述的方法,其中,所述预定规则包括: 将网页访问请求分配到空闲处理单元最多的进程中;和/或 将同一用户的不同 请求分配到同一进程中。
14.根据权利要求13所述的方法,其中,将同一用户的不同请求分配到同一进程中按下面步骤来实现: 根据用户的属性信息判断所述网页访问请求是否为新用户的请求; 如果所述网页访问请求不是新用户的请求,则根据该用户的分配历史以及各个进程的状态信息为所述网页访问请求分配进程。
15.根据权利要求14所述的方法,其中,根据用户的属性信息判断所述网页访问请求是否为新用户的请求进一步包括: 获取所述网页访问请求对应的用户的属性信息; 如果所述网页访问请求对应的用户的属性信息未出现在历史分配记录中,则所述网页访问请求为新用户的请求;其中,所述历史分配记录用于记录在历史处理过程中,用户请求对应的用户的属性信息与分配给该用户请求的进程之间的对应关系。
16.根据权利要求15所述的方法,其中,如果所述网页访问请求不是新用户的请求,则根据该用户的分配历史以及各个进程的状态信息为所述网页访问请求分配进程进一步包括: 如果所述网页访问请求不是新用户的请求,并且历史分配记录中该用户的属性信息对应的进程包含空闲的处理单元,则将该进程分配给所述网页访问请求。
17.根据权利要求15或16所述的方法,其中,所述历史分配记录中还记录有用户请求对应的用户的属性信息与分配给请求的处理单元之间的对应关系; 在所分配的进程中为所述网页访问请求分配一个已创建的处理单元进一步包括: 将历史分配记录中该用户的属性信息对应的处理单元分配给当前请求。
18.根据权利要求11至17中任一项所述的方法,其中,所述代理服务器为至少两个,所述方法还包括: 为用户的网页访问请求分配代理服务器。
19.根据权利要求18所述的方法,其中,为用户的网页访问请求分配代理服务器包括:对各代理服务器进行实时的心跳监控,将能够正常监测到心跳信息的代理服务器加入到可用代理服务器列表中; 从所述可用代理服务器列表中为所述网页访问请求分配代理服务器。
20.根据权利要求19所述的方法,还包括: 将未能监测到心跳信息的代理服务器从所述可用代理服务器列表中删除;当重新监测到代理服务器的心跳信息 时,将其加入到所述可用代理服务器列表中。
【文档编号】G06F17/30GK104077381SQ201410295628
【公开日】2014年10月1日 申请日期:2012年5月2日 优先权日:2012年5月2日
【发明者】刘华 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1