一种多核并行的反向代理方法与流程

文档序号:11960401阅读:587来源:国知局
一种多核并行的反向代理方法与流程

本发明涉及网络中反向代理领域,特别涉及一种多核并行的反向代理方法。



背景技术:

反向代理是指代替服务器向客户端提供服务的系统,反向代理可提供负载分担功能,代替多个服务器对外提供服务。同时,反向代理上可以提供攻击检测与防护功能,例如Flood攻击防护,避免服务器遭受攻击。现有反向代理组网如图1所示。

如图2所示,在多核平台上,反向代理模块由报文分发模块和多个Worker组成,并发完成反向代理服务,以提高整机的反向代理性能。一般情况下Worker个数与CPU个数相同。

在图2中,报文分发模块根据报文的五元组(源IP、源端口、目的IP、目的端口、协议号)或者三元组(源IP、目的IP、协议号)信息计算HASH值,根据HASH结果,将报文分发到不同的Worker处理。报文分发模块一般由硬件完成,如网卡多报文接收队列、DPDK RSS模块。

如图2所示,报文处理具体流程为:

1、请求报文到达反向代理节点时,其五元组为Client_IP、Client_Port、Proxy_IP、Proxy_Port、协议,根据五元组计算的HASH值为1,在Worker1上处理;

2、Worker1从服务器中选择一个,向服务器发起请求,五元组变为Proxy_IP、Proxy_Port、Server_IP、Server_Port、协议。Worker1将连接信息记录在所有Worker共享的全局连接表中,连接信息为Client_IP、Client_Port、Proxy_IP、Proxy_Port、协议<->Server_IP、Server_Port、Proxy_IP、Proxy_Port、协议;

3、服务器的响应报文到达反向代理节点时,其五元组为Server_IP、Server_Port、Proxy_IP、Proxy_Port、协议,根据五元组计算的HASH值为2,在Worker2上处理;

4、Worker2从全局连接表找到连接,根据连接信息转换报文五元组为Proxy_IP、Proxy_Port、Client_IP、Client_Port、协议,然后发送给客户端。

由于连接信息存储在多Worker共享的全局表中,多Worker并发访问,因此需要使用锁保护。所以多Worker并发访问全局表,需要使用锁保护,编程复杂,容易出错,可维护性差;使用锁保护,性能受锁影响,无法随核个数增加而线性提升。

注:Client指客户端,Proxy指反向代理,Server指服务器。



技术实现要素:

本发明所要解决的技术问题是提供一种多核并行的反向代理方法,预先计算服务器响应报文的Worker,当请求报文到达Worker时,选择和当前Worker相同的候选服务器,发送请求报文。从而保证服务器的响应报文和对应的请求报文在同一个Worker上处理,连接表是Worker本地表,不需要全局锁。

为解决上述技术问题,本发明采用的技术方案是:

一种多核并行的反向代理方法,包括以下步骤:

步骤1、Worker根据所有服务器的IP、端口计算HASH值或者Worker预先遍历端口范围1024~65535,计算五元组Server_IP、Server_Port、Proxy_IP、Proxy_Port、协议,即服务器响应报文五元组的HASH值,将响应报文分发到自己的服务器作为候选服务器;

步骤2、请求报文到达反向代理节点时,其五元组为Client_IP、Client_Port、Proxy_IP、Proxy_Port、协议,根据源IP和源端口Client_IP、Client_Port计算的HASH值,在HASH值对应的Worker上处理;

步骤3、步骤2中的Worker从属于自己的候选服务器中选择一个,将请求发送给服务器,五元组变为Proxy_IP、Proxy_Port、Server_IP、Server_Port、协议,Worker还将连接信息记录在本地连接表中,连接信息为Client_IP、Client_Port、Proxy_IP、Proxy_Port、协议<->Server_IP、Server_Port、Proxy_IP、Proxy_Port、协议;其中,<->表示双向关系。

步骤4、服务器的响应报文到达反向代理节点时,其五元组为Server_IP、Server_Port、Proxy_IP、Proxy_Port、协议,根据源IP和源端口Server_IP、Server_Port计算的HASH值与步骤2的HASH值相等,在HASH值对应的Worker上处理;

步骤5、步骤4中的Worker从本地连接表找到连接,根据连接信息转换报文五元组为Proxy_IP、Proxy_Port、Client_IP、Client_Port、协议,然后发送给客户端。

根据上述方案,在将响应报文分发到自己的服务器作为候选服务器的步骤中,为代理Worker分配服务器具体为:服务器的响应报文的源IP、源端口就是服务器IP、服务器端口,根据服务器IP、服务器端口计算hash,使用与报文接收分发模块相同的选择方法得到代理Worker,从而将该服务器分配给该代理Worker。

根据上述方案,若服务器个数小于Worker个数,在服务器上开启多个不同端口的服务,并将同一台服务器的多个服务分配给不同的Worker完成代理。

根据上述方案,若服务器个数大于等于Worker个数的2倍,则为每一个Worker分配至少两个服务器的服务的代理服务;若服务器个数小于Worker个数的2倍,则某一部分服务器开启多个不同端口的服务,并为每一个Worker分配至少两个不同服务器的服务的代理服务。

与现有技术相比,本发明的有益效果是:保证同一条连接的客户端请求报文和服务器响应报文在同一个Worker处理,从而避免了锁的使用;不需要考虑并发访问问题,编程简单,可维护性好;不存在锁冲突,并发性能高,性能随核个数增加而线性增长。

附图说明

图1为反向代理组网示意图。

图2为在多核平台上,现有反向代理实现方式示意图。

图3为本发明一种多核并行的反向代理方法实现方式示意图。

具体实施方式

下面结合附图和具体实施方式对本发明作进一步详细的说明。本发明提供的反向代理方法包括:通过预计算所有服务器的响应报文处理Worker,来确定Worker候选服务器;报文分发模块根据源IP和源端口分发报文,根据所有服务器的IP和端口,计算服务器响应报文的Worker;报文分发模块根据五元组分发报文,通过遍历反向代理的可用端口范围1024~65535,与服务器的IP和端口结合预先计算在指定反向代理的端口情况下服务器响应报文的Worker;通过单台服务器启动多个端口的服务,解决多Worker少服务器的场景等过程。

具体来说,包括:1、一种报文HASH算法,使用报文源IP、源端口计算HASH值;2、报文接收分发模块,根据报文HASH选择不同的代理Worker;3、多个代理worker,每一个代理Worker为一组服务器服务,预先为代理Worker分配服务器。

其中,为代理Worker分配服务器的方法如下:服务器的响应报文的源IP和源端口就是服务器IP、服务器端口,根据服务器IP、服务器端口计算HASH,使用与报文接收分发模块相同的选择方法得到代理Worker,从而将该服务器分配给该代理Worker。

另外,如果服务器个数小于Worker个数,在服务器上开启多个不同端口的服务,并将同一台服务器的多个服务分配给不同的Worker完成代理。

为了避免单服务器节点故障出现无法提供服务的问题,采取以下处理措施:如果服务器个数大于等于Worker个数的2倍,则为每一个Worker分配至少两个服务器的服务的代理服务例如,Worker个数为4,服务器个数为2,则每个服务器都启动2个服务。将服务器1的两个服务分别分配给Worker1和Worker2。将服务器2的两个服务分别分配给Worker3和Worker4;如果服务器个数小于Worker个数的2倍,则某一部分服务器开启多个不同端口的服务,并为每一个Worker分配至少两个不同服务器的服务的代理服务。需要看实际服务器和worker个数,例如服务器为2个,woker为3个。则只需要其中一个服务器开启两个端口的服务,另一个仍然只开启一个端口服务。如果服务器为2个,woker个数为4个,则每个服务器都开启2个端口的服务。

本发明技术方案中,请求报文经过报文接收分发模块分发到代理Worker上处理,代理Worker从属于自己的服务器中选择一个,然后发送请求到该服务器。服务器的响应报文到达反向代理时,必然会分发到与请求报文相同的代理Worker上处理。完整的处理流程如图3所示:

1、Worker根据所有服务器的IP、端口计算HASH值,将响应报文会会分发到自己的服务器作为候选服务器。注:响应报文的源IP、源端口等于服务器的IP、端口。例如:对于Worker1,其候选服务器为服务器1。

2、请求报文到达反向代理节点时,其五元组为Client_IP、Client_Port、Proxy_IP、Proxy_Port、协议,根据源IP和源端口Client_IP、Client_Port计算的HASH值为1,在Worker1上处理。

3、Worker1从属于自己的候选服务器中选择一个,将请求发送给服务器,五元组变为Proxy_IP、Proxy_Port、Server_IP、Server_Port、协议。Worker1将连接信息记录在本地连接表中,连接信息为Client_IP、Client_Port、Proxy_IP、Proxy_Port、协议<->Server_IP、Server_Port、Proxy_IP、Proxy_Port、协议。

4、服务器的响应报文到达反向代理节点时,其五元组为Server_IP、Server_Port、Proxy_IP、Proxy_Port、协议,根据源IP和源端口Server_IP、Server_Port计算的HASH值也为1,在Worker1上处理。

5、Worker1从本地连接表找到连接,根据连接信息转换报文五元组为Proxy_IP、Proxy_Port、Client_IP、Client_Port、协议,然后发送给客户端。

本发明技术方案中,还可采用的方式是:将报文分发模块要按照五元组分发报文到Worker,Worker预先遍历端口范围1024~65535(Worker向服务器发起的请求报文的源端口范围一般是这个),计算五元组Server_IP、Server_Port、Proxy_IP、Proxy_Port、协议的HASH,得出每Worker的候选服务器及源端口。例如:Worker1的候选成员为:(端口为1024、服务器为Server1)、(端口为1026、服务器为Server2)、(端口为1028、服务器为Server1)。

客户端的请求报文达到Worker时,Worker从自己的空闲候选成员中选取一个,设置报文源端口为候选成员中的端口、目的IP和目的端口为候选成员的服务器的IP和端口,并将候选成员状态变为Used(已在使用,其他请求报文不能选择该候选成员),然后发送请求报文给服务器。对应的响应报文必然会到达相同的Worker,该Worker向客户端发送响应报文,过一段时间后将候选成员状态变为Unused,完成回收。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1