CN111314429B - 一种网络请求处理***和方法 - Google Patents
一种网络请求处理***和方法 Download PDFInfo
- Publication number
- CN111314429B CN111314429B CN202010059255.0A CN202010059255A CN111314429B CN 111314429 B CN111314429 B CN 111314429B CN 202010059255 A CN202010059255 A CN 202010059255A CN 111314429 B CN111314429 B CN 111314429B
- Authority
- CN
- China
- Prior art keywords
- nginx
- message
- session
- enqueue
- event
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种网络处理请求***,涉及Web服务领域。包括会话索引透传模块、消息元数据项保序模块、主动式事件通知模块;会话索引透传模块和消息元数据项保序模块并行执行;会话索引透传模块将会话索引作为NGINX使用的新文件描述符,NGINX将本身的原文件描述符作为新会话索引找到并访问会话;消息元数据项保序模块包括令牌编号和入队编号,在消息元数据项入队时检查其令牌编号和入队编号的一致性;主动式事件通知模块包括VPP工作线程主动唤醒NGINX工作进程和NGINX主进程主动唤醒NGINX工作进程,并主动查询用户态共享内存中的标记来确认是否有AF_UNIX域套接字epoll事件到来。本发明提高了网络请求处理性能,在无网络请求或请求量较少时,节省CPU资源并降低能耗。
Description
技术领域
本发明涉及在Web服务领域中负责网络中心边缘处的网络请求处理和负载均衡的网络应用领域,尤其涉及一种网络请求处理***和方法。
背景技术
得益于移动手机、智能手表、网络电视数量的日益增长,用户对各类网站的访问需求也不断增大。巨大的网站访问请求给网站带来了不小压力。目前很多网站都是用可以做请求转发的网络应用来做网络请求的负载均衡。NGINX是目前应用广泛的高性能HTTP请求转发、处理的网络应用,被很多知名网站用来做数据中心边缘处的负载均衡。NGINX的特点是能以较小内存占用即可维持数万连接。但是,针对NGINX内核限制问题,目前流行的解决方案之一是使用绕过内核的用户态网络协议栈对NGINX进行优化。
FD.io VPP(Vector Packet Processing)的用户态网络协议栈便是采用该解决方案的例子。让NGINX直接通过VPP LDP应用接口使用VPP从而加速网络请求处理。然而当NGINX直接使用VPP LDP应用接口时,接口采用的锁机制影响了NGINX并行处理请求时的性能。由于NGINX是多进行单线程应用,因此多个NGINX工作进程不会共享会话,所以锁机制可以去除。但是去除锁机制后,VPP事件队列中的控制事件消息的元数据项会出现乱序。同时,使用VPP LDP应用接口的网络应用,会通过轮询的方式不断检查应用事件队列和内核里的epoll事件队列,这种繁忙轮询方式会导致NGINX工作进程一直百分之百占用CPU,浪费CPU资源和电力能源。
另外,检查内核里的epoll事件队列需要通过***调用进行,而频繁通过***调用检查内核epoll事件队列会引起频繁上下文切换,影响请求处理性能。
因此,本领域的技术人员致力于开发一种网络处理请求***和方法,提高请求处理性能和速率,在没有网络请求或请求量较少时,节省CPU资源并降低能耗。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是VPP LDP应用接口使用的锁机制影响NGINX可扩展性,同时在去锁后保证VPP事件队列中控制事件消息元数据项不乱序,以及VPP的epoll事件管理使用的繁忙轮询机制引起的能源浪费和频繁上下文切换。
为实现上述目的,本发明提供了一种网络请求处理***,其特征在于,包括会话索引透传模块、消息元数据项保序模块、主动式事件通知模块;所述会话索引透传模块和所述消息元数据项保序模块并行执行;所述会话索引透传模块将会话索引作为NGINX使用到的新文件描述符,NGINX将本身的原文件描述符作为新会话索引找到并访问会话;所述消息元数据项保序模块包括令牌分配器持有的令牌编号和入队检查器持有的入队编号,在消息元数据项入队时检查其所述令牌编号和所述入队编号的一致性;所述主动式事件通知模块包括VPP工作线程主动唤醒NGINX工作进程和NGINX主进程主动唤醒NGINX工作进程,并NGINX工作进程主动查询用户态共享内存中的布尔变量标记U来确认是否有AF_UNIX域套接字的epoll事件到来。
进一步地,所述消息元数据项保序模块为每个VPP事件添加两个变量,分别表示所述令牌分配器持有的令牌编号和入队检查器持有的所述入队编号,所述令牌编号分配给新控制事件消息,所述入队编号用于对新消息元数据项进行入队检查。
进一步地,所述入队编号是易变类型变量,所述令牌编号和所述入队编号均为无符号整数,且同时为无符号int类型或同时为无符号long int类型,初始值均为0。
进一步地,所述消息元数据项保序模块中每个控制事件消息增加局部变量,所述局部变量值为控制事件消息持有的令牌编号。
进一步地,所述消息元数据项保序模块对消息元数据项进行保序,包括以下步骤:
步骤1、当一个控制事件消息进入VPP事件队列之前,所述控制事件消息获得所述令牌编号,在所述令牌编号的值分配给所述局部变量后,所述令牌编号+1;
步骤2、消息元数据项入队之前,确定所述局部变量与所述入队编号一致性。
进一步地,所述步骤2包括:如果所述局部变量等于所述入队编号,则所述消息元数据项可以直接直接进入元数据项消息队列,同时所述入队编号+1;如果所述局部变量不等于所述入队编号,则所述消息元数据项等待入队。
进一步地,所述主动式事件通知模块为每个NGINX工作进程分配一个代理条件变量、布尔变量标记U和代理线程;所述布尔变量标记U位于用户态共享内存中;所述代理线程负责帮助所述NGINX主进程主动唤醒NGINX工作进程。
进一步地,所述主动式事件通知模块利用VPP提供的用户态epoll阻塞机制,让NGINX在没有网络请求处理时,阻塞在应用事件队列的所述代理条件变量。
进一步地,所述主动式事件通知模块包括:如果没有所述NGINX主进程向NGINX工作进程发送进程间消息时,则所述代理线程阻塞在所述代理条件变量上;如果NGINX主进程向NGINX工作进程发送进程间消息,则将所述布尔变量标记U设置为真,再发送消息,接着NGINX主进程向所述代理条件变量发信号以唤醒所述代理线程,最后所述代理线程帮助唤醒NGINX工作进程。
进一步地,其特征在于,所述主动式事件通知模块包括:NGINX工作进程判断所述布尔变量标记U和应用事件队列,如果所述布尔变量标记U为真,则取出内核AF_UNIX域套接字的epoll事件,然后将所述布尔变量标记U设置为假;如果应用事件队列不为空,则取出其中的epoll事件;如果所述布尔变量标记U为假且所述应用事件队列为空,则NGINX工作进程阻塞在所述代理条件变量。
基于上述网络请求处理***,发明人提出了一种网络请求处理方法,包括以下步骤:
S001、响应于网络请求,VPP线程新建一个会话;
S002、VPP线程向接收事件队列中添加新建会话的地址,并向应用事件队列中添加会话被新建的epoll事件消息;
S003、VPP线程主动唤醒睡眠的NGINX工作进程;
S004、NGINX工作进程从应用事件队列中取出epoll事件消息,得知新会话已被创建,于是通过监听会话从接收事件队列中取出新会话的地址放入会话池中;
S005、会话池中的新会话的索引被透传给上层NGINX工作进程;
S006、NGINX工作进程把新会话索引作为会话文件描述符使用,并通过该索引值访问并处理会话的网络请求;
S007、当NGINX工作进程需要被重启或者关闭时,NGINX主进程将用户态的布尔变量标记U置为真,并向NGINX工作进程发送进程间消息,产生内核epoll事件,然后唤醒NGINX主进程;
S008、NGINX工作进程被唤醒后,发现布尔变量标记U为真,于是从内核epoll事件队列中取出内核epoll事件,并接收来自NGINX主进程的进程间消息,执行消息指定的操作。
与现有技术相比,本发明至少具有如下有益技术效果:
1、绕过了VPP LDP应用接口采用的锁机制,请求处理性能随着NGINX工作进程数量的增长而呈线性增长趋势;
2、在1个NGINX工作进程存在的情况下,请求处理速率提高10%-20%;
3、在没有网络请求或请求量较少时,节省CPU资源并降低能耗。
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
图1是本发明的组成示意图;
图2是本发明的会话索引透传模块组成示意图;
图3是本发明的消息元数据项保序模块组成示意图;
图4是本发明的主动式事件通知模块组成示意图;
图5是本发明的网络请求处理方法流程图;
图6是本发明的消息元数据项保序机制流程图。
具体实施方式
以下参考说明书附图介绍本发明的多个优选实施例,使其技术内容更加清楚和便于理解。本发明可以通过许多不同形式的实施例来得以体现,本发明的保护范围并非仅限于文中提到的实施例。
在附图中,结构相同的部件以相同数字标号表示,各处结构或功能相似的组件以相似数字标号表示。附图所示的每一组件的尺寸和厚度是任意示出的,本发明并没有限定每个组件的尺寸和厚度。为了使图示更清晰,附图中有些地方适当夸大了部件的厚度。
发明人为了解决去锁后如何保证VPP事件队列中控制事件消息元数据项不乱序,以及VPP的epoll事件管理使用的繁忙轮询机制引起的能源浪费和频繁上下文切换等问题,提出一种网络请求处理***,如图1所示,包括会话索引透传模块模块、消息元数据项保序模块、主动式事件通知模块;会话索引透传模块和消息元数据项保序模块并行执行;会话索引透传模块将会话索引作为NGINX使用到的新文件描述符,NGINX将本身的原文件描述符作为新会话索引找到并访问会话;消息元数据项保序模块包括令牌分配器持有的令牌编号和入队检查器持有的入队编号,在消息元数据项入队时检查消息从令牌分配器所述令牌编号分配而来的令牌编号和所述入队编号的一致性;主动式事件通知模块包括VPP工作线程主动唤醒NGINX工作进程和NGINX主进程主动唤醒NGINX工作进程,并NGINX工作进程主动查询用户态共享内存中的布尔变量标记U标记来确认是否有AF_UNIX域套接字epoll事件到来。
如图2所示,发明人将监听会话索引、epoll会话索引、普通网络会话索引分别作为NGINX工作进程使用的监听会话文件描述符、epoll会话文件描述符、普通网络会话文件描述符,直接提供给NGINX工作进程使用。工作时,NGINX工作进程将监听会话描述符作为监听会话的索引,并利用该索引从接收事件队列中取出新会话的地址放入会话池中。NGINX工作进程将epoll会话描述符作为epoll会话的索引,并利用该索引检查epoll事件,若没有epoll事件则NGINX工作进程进入睡眠状态,等待VPP工作进程或NGINX主进程主动唤醒它。此过程由主动式事件通知模块负责。NGINX工作进程将普通网络会话描述符作为普通网络会话的索引,并利用该索引从会话池中查找会话,并访问和操作该会话。
如图3所示,发明人在VPP事件队列使用的共享内存中为每个VPP事件队列添加一个令牌分配器和一个入队检查器。其中入队检查器持有的所述入队编号在实现上采用volatile(易变)类型的变量进行实现。令牌分配器负责向每个控制事件消息按顺序分配令牌。入队检查器则用来检查消息的令牌标号是否是当前可以入队的编号。在图3中,所有的①表示第一阶段步骤,所有的②表示第二阶段步骤,并以此类推。NGINX工作进程1的消息元数据(持有令牌3)已经进入元数据项消息队列。在第一阶段步骤中,令牌分配器先将令牌4分配给获得数据块索引2的消息,然后控制事件消息数据环的tail(队尾号)被更新为3。在第二阶段步骤中,令牌分配器先将令牌5分配给获得数据块索引3的消息,然后控制事件消息数据环的tail(队尾号)被更新为4。在第三阶段步骤中,获得数据块索引3的消息进入入队检查器。在第四阶段步骤中,获得数据块索引2的消息进入入队检查器。在第五阶段步骤中,入队检查器会先将持有令牌4的消息入队。在第六阶段步骤中,入队检查器会接着将持有令牌5的消息入队。通过入队检查器的保护,NGINX工作进程2和NGINX工作进程3的两个消息的元数据项能按顺序入队,使得元数据项入队顺序不会和消息数据块的分配顺序不一致。
如图6所示,消息元数据项保序机制包括:
1、NGINX工作进程2和NGINX工作进程3同时向VPP事件队列发送控制事件消息;
2、NGINX工作进程2先获得控制事件消息数据环的数据块索引值2,并获得令牌分配器分配的令牌4;NGINX工作进程3接着获得控制事件消息数据环的数据块索引值3,并获得令牌分配器分配的令牌5;NGINX工作进程2的消息元数据应该先于工作进程3的进入元数据项消息队列;
3、NGINX工作进程2和工作进程3接下来可以同时并行地将数据写入各自的数据块2、数据块3;
4、NGINX工作进程3先写完自己的数据块3,于是入队检查器检查其持有的令牌号5。而此时应入队编号为4,不等于其令牌号5;因此NGINX工作进程3需等待,通过循环不断检查应入队编号是否变更为5;
5、NGINX工作进程2接着写完自己的数据块2,然后入队检查器检查其持有的令牌号4,并发现应入队编号为4且等于NGINX工作进程2的消息的令牌号4,于是NGINX工作进程2的消息元数据项被添加至元数据项消息队列,并且应入队编号被更新至5;
6、此时应入队编号5等于NGINX工作进程3的令牌号5,于是NGINX工作进程3的消息元数据项被添加至元数据项消息队列,并且应入队编号被更新至6,NGINX工作进程2和NGINX工作进程3至此完成了向VPP事件队列发送控制事件消息的过程。
如图4所示,发明人通过VPP提供的函数clib_mem_alloc(),在NGINX主进程和工作进程均可访问的共享内存中,为每个NGINX工作进程分配一个代理条件变量agent condvar和布尔变量标记U。代理条件变量agent condvar由pthread_cond_init()创建。除了代理条件变量和布尔变量,还通过pthread_create()为每个NGINX工作进程创建一个代理线程。
如果没有NGINX主进程向工作进程发送的进程间消息,则代理线程将使用wait()阻塞在代理条件变量上。当NGINX主进程向NGINX工作进程发送进程间消息时,NGINX主进程首先将NGINX工作进程的布尔变量标记U设置为真,然后再发送消息。下一步,NGINX主进程通过broadcast()向代理条件变量发信号以唤醒代理线程。然后代理线程也通过broadcast()帮助NGINX主进程间接唤醒NGINX工作进程。
当NGINX工作进程要检查所有epoll事件时,它首先使用分支预测宏PREDICT_FALSE检查布尔变量标记U是否为真。然后,它检查应用事件队列是否有会话的epoll事件。如果布尔变量标记U为真,则NGINX工作进程将执行“(while(epoll_wait())”以从内核epoll事件队列中取出内核AF_UNIX域套接字的epoll事件,然后将布尔变量标记U设置为假。如果应用事件队列不为空,则进程将会话epoll事件取出。如果布尔变量标记U为假并且应用事件队列为空,则NGINX工作进程将阻塞在VPP提供的条件变量condvar上,等待epoll事件到达时被NGINX主进程或VPP工作线程唤醒。NGINX工作进程被唤醒后,还将按照上述步骤检查布尔变量标记U和应用事件队列。因为只有在NGINX刚启动时或网络管理员重新配置NGINX时,NGINX主进程才向每个NGINX工作进程发送一条消息,所以NGINX主进程通常在向工作进程发送一条消息后通常不会紧接着再向其发送第二条消息。因此,在实现中,不考虑代理线程错过了来自NGINX主进程的唤醒信号的情况,也不考虑NGINX主进程在将布尔变量标记U设置为真和发送进程间消息的中间间隙布尔变量标记U被NGINX工作进程设置为假的情况。
如图5所示,基于上述网络请求处理***,发明人设计了一种网络请求处理方法,包括以下步骤:
S001、响应于网络请求,VPP线程新建一个会话;
S002、VPP线程向接收事件队列中添加新建会话的地址,并向应用事件队列中添加会话被新建的epoll事件消息;
S003、VPP线程主动唤醒睡眠的NGINX工作进程;
S004、NGINX工作进程从应用事件队列中取出epoll事件消息,得知新会话已被创建,于是通过监听会话从接收事件队列中取出新会话的地址放入会话池中;
S005、会话池中的新会话的索引被透传给上层NGINX工作进程;
S006、NGINX工作进程把新会话索引作为会话文件描述符使用,并通过该索引值访问并处理会话的网络请求;
S007、当NGINX工作进程需要被重启或者关闭时,NGINX主进程将用户态的布尔变量标记U置为真,并向NGINX工作进程发送进程间消息,产生内核epoll事件,然后唤醒NGINX主进程;
S008、NGINX工作进程被唤醒后,发现布尔变量标记U为真,于是从内核epoll事件队列中取出内核epoll事件,并接收来自NGINX主进程的进程间消息,执行消息指定的操作。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (10)
1.一种网络请求处理***,其特征在于,包括会话索引透传模块、消息元数据项保序模块、主动式事件通知模块;所述会话索引透传模块和所述消息元数据项保序模块并行执行;所述会话索引透传模块将会话索引作为NGINX使用到的新文件描述符,NGINX将本身的原文件描述符作为新会话索引找到并访问会话;所述消息元数据项保序模块包括令牌分配器持有的令牌编号和入队检查器持有的入队编号,在消息元数据项入队时检查其所述令牌编号和所述入队编号的一致性;所述主动式事件通知模块包括VPP工作线程主动唤醒NGINX工作进程和NGINX主进程主动唤醒NGINX工作进程,并且NGINX工作进程主动查询用户态共享内存中的布尔变量标记U来确认是否有AF_UNIX域套接字的epoll事件到来。
2.如权利要求1所述的网络请求处理***,其特征在于,所述消息元数据项保序模块为每个VPP事件队列添加两个变量,分别表示所述令牌分配器持有的令牌编号和所述入队检查器持有的入队编号,所述令牌编号分配给新控制事件消息,所述入队编号用于对新控制事件消息进行入队检查。
3.如权利要求2所述的网络请求处理***,其特征在于,所述入队编号是易变类型变量,所述令牌编号和所述入队编号均为无符号整数,且同时为无符号int类型或同时为无符号long int类型,初始值均为0。
4.如权利要求3所述的网络请求处理***,其特征在于,所述消息元数据项保序模块中每个控制事件消息增加局部变量,所述局部变量的值为控制事件消息持有的令牌编号。
5.如权利要求4所述的网络请求处理***,其特征在于,所述消息元数据项保序模块对于消息元数据项进行保序,包括以下步骤:
步骤1、当一个控制事件消息进入VPP事件队列之前,所述控制事件消息获得所述令牌编号,在所述令牌编号的值分配给所述局部变量后,所述令牌编号+1;
步骤2、消息元数据项入队之前,确定所述局部变量与所述入队编号一致性。
6.如权利要求5所述的网络请求处理***,其特征在于,所述步骤2包括:如果所述局部变量等于所述入队编号,则所述消息元数据项直接进入元数据项消息队列,同时所述入队编号+1;如果所述局部变量不等于所述入队编号,则所述消息元数据项等待入队。
7.如权利要求1所述的网络请求处理***,其特征在于,所述主动式事件通知模块为每个NGINX工作进程分配一个代理条件变量、布尔变量标记U和代理线程;所述布尔变量标记U位于用户态共享内存中;所述代理线程负责帮助所述NGINX主进程主动唤醒NGINX工作进程。
8.如权利要求7所述的网络请求处理***,其特征在于,所述主动式事件通知模块利用VPP提供的用户态epoll阻塞机制,让NGINX在没有网络请求处理时,阻塞在应用事件队列的所述代理条件变量。
9.如权利要求8所述的网络请求处理***,其特征在于,所述主动式事件通知模块包括:如果没有所述NGINX主进程向NGINX工作进程发送进程间消息时,则所述代理线程阻塞在所述代理条件变量上;如果NGINX主进程向NGINX工作进程发送进程间消息,则将所述布尔变量标记U设置为真,再发送消息,接着NGINX主进程向所述代理条件变量发信号以唤醒所述代理线程,最后所述代理线程帮助唤醒NGINX工作进程。
10.一种网络请求处理方法,其特征在于,基于如权利要求1-9之一所述的网络请求处理***,包括如下步骤:
S001、响应于网络请求,VPP线程新建一个会话;
S002、VPP线程向接收事件队列中添加新建会话的地址,并向应用事件队列中添加会话被新建的epoll事件消息;
S003、VPP线程主动唤醒睡眠的NGINX工作进程;
S004、NGINX工作进程从应用事件队列中取出epoll事件消息,得知新会话已被创建,于是通过监听会话从接收事件队列中取出新会话的地址放入会话池中;
S005、会话池中的新会话索引被透传给上层NGINX工作进程;
S006、NGINX工作进程把所述新会话索引作为会话文件描述符使用,并通过所述新会话索引访问并处理会话的网络请求;
S007、当NGINX工作进程需要被重启或者关闭时,NGINX主进程将用户态的布尔变量标记U置为真,并向NGINX工作进程发送进程间消息,产生内核epoll事件,然后唤醒NGINX工作进程;
S008、NGINX工作进程被唤醒后,发现布尔变量标记U为真,于是从内核epoll事件队列中取出内核epoll事件,并接收来自NGINX主进程的进程间消息,执行消息指定的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010059255.0A CN111314429B (zh) | 2020-01-19 | 2020-01-19 | 一种网络请求处理***和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010059255.0A CN111314429B (zh) | 2020-01-19 | 2020-01-19 | 一种网络请求处理***和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111314429A CN111314429A (zh) | 2020-06-19 |
CN111314429B true CN111314429B (zh) | 2021-07-13 |
Family
ID=71160145
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010059255.0A Active CN111314429B (zh) | 2020-01-19 | 2020-01-19 | 一种网络请求处理***和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111314429B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112600882B (zh) * | 2020-12-01 | 2022-03-08 | 上海交通大学 | 一种基于共享内存通信模式的硬件加速方法 |
CN113630376B (zh) * | 2021-06-16 | 2023-04-07 | 新华三信息安全技术有限公司 | 一种网络安全设备及其处理报文的方法 |
CN113542156B (zh) * | 2021-07-26 | 2024-03-12 | 中移(杭州)信息技术有限公司 | 报文传输方法、装置、终端设备以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766532A (zh) * | 2017-10-27 | 2018-03-06 | 深圳市行云易通科技有限公司 | 一种前端Node.js自动化正静态方法 |
US10133797B1 (en) * | 2013-08-16 | 2018-11-20 | Amazon Technologies, Inc. | Distributed heterogeneous system for data warehouse management |
CN109962859A (zh) * | 2017-12-26 | 2019-07-02 | 北京华为数字技术有限公司 | 一种报文调度方法及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105871867B (zh) * | 2016-04-27 | 2018-01-16 | 腾讯科技(深圳)有限公司 | 身份认证方法、***及设备 |
-
2020
- 2020-01-19 CN CN202010059255.0A patent/CN111314429B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10133797B1 (en) * | 2013-08-16 | 2018-11-20 | Amazon Technologies, Inc. | Distributed heterogeneous system for data warehouse management |
CN107766532A (zh) * | 2017-10-27 | 2018-03-06 | 深圳市行云易通科技有限公司 | 一种前端Node.js自动化正静态方法 |
CN109962859A (zh) * | 2017-12-26 | 2019-07-02 | 北京华为数字技术有限公司 | 一种报文调度方法及设备 |
Non-Patent Citations (1)
Title |
---|
移动边缘计算规模部署的技术制约因素和对策;熊先奎 等;《中兴通讯技术 》;20191129;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111314429A (zh) | 2020-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111314429B (zh) | 一种网络请求处理***和方法 | |
CN106161537B (zh) | 远程过程调用的处理方法、装置、***及电子设备 | |
US9524197B2 (en) | Multicasting of event notifications using extended socket for inter-process communication | |
US6826662B2 (en) | System and method for data synchronization for a computer architecture for broadband networks | |
EP1805626B1 (en) | External data interface in a computer architecture for broadband networks | |
US9900275B2 (en) | Tracking object across processes | |
US20060190614A1 (en) | Non-homogeneous multi-processor system with shared memory | |
CN111427751A (zh) | 基于异步处理机制对业务进行处理的方法及*** | |
EP2240852B1 (en) | Scalable sockets | |
US20080162877A1 (en) | Non-Homogeneous Multi-Processor System With Shared Memory | |
CN112749023B (zh) | 一种信息的处理方法、装置、设备及*** | |
US20140068165A1 (en) | Splitting a real-time thread between the user and kernel space | |
CN107562685B (zh) | 一种基于延时补偿的多核处理器核心间数据交互的方法 | |
CN113641410A (zh) | 一种基于Netty的高性能网关***的处理方法及*** | |
CN114928579A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
US10313450B2 (en) | Method for transparently connecting augmented network socket operations | |
CN111290842A (zh) | 一种任务执行方法和装置 | |
CN110737530B (zh) | 一种提升handle标识解析***收包能力的方法 | |
CN111913792A (zh) | 一种业务处理方法和装置 | |
CN109005465B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN113641507A (zh) | 消息中间件的接入方法、消息的处理方法和装置 | |
US20060155955A1 (en) | SIMD-RISC processor module | |
CN108810645B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN115480904A (zh) | 微内核中***服务并发调用方法 | |
CN114374657A (zh) | 一种数据处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |