CN105426326A - 一种实现高并发的队列存储方法及系统 - Google Patents
一种实现高并发的队列存储方法及系统 Download PDFInfo
- Publication number
- CN105426326A CN105426326A CN201510745076.1A CN201510745076A CN105426326A CN 105426326 A CN105426326 A CN 105426326A CN 201510745076 A CN201510745076 A CN 201510745076A CN 105426326 A CN105426326 A CN 105426326A
- Authority
- CN
- China
- Prior art keywords
- node
- request
- data
- high concurrent
- client
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种实现高并发的队列存储方法及系统,包括以下内容:采用Node.js作为http服务器;Node.js接收客户端传送来的发送请求;Node.js将客户端通过发送请求发送过来的数据包发送到Redis。本发明的实现高并发的队列存储方法及系统Node.js仅仅只运行在一个单线程中,使用非阻塞的异步I/O调用,所有连接都由该线程处理;无需为每个连接建立线程,解决了IO阻塞等问题;能够处理庞大、高吞吐量的并发连接将数据包从客户端发送到Node.js,再经由Node.js发送到Redis,这样的处理过程实现起来比IIS和apache在性能上要高很多。
Description
技术领域
本发明涉及网络服务的技术领域,特别是涉及一种实现高并发的队列存储方法及系统。
背景技术
Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis是个强大的缓存组件,可以部署在Win和Linux环境之上,它有五大存储结构,其中有一种为列表list,可以实现队列quene和堆栈stack的功能。
传统的网络服务技术,采用apache服务器,新增一个连接便生成一个新的线程。而这个新的线程会占用系统内存,最终会占掉所有的可用内存,导致I/O阻塞。
Node.js是一个基于ChromeJavaScript运行时建立的平台,用于方便地搭建响应速度快、易于扩展的网络应用。Node.js使用事件驱动,非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型的实时应用。
因此,如何采用Node.js来实现高并发的队列存储成为一个极具前景的研究课题。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种实现高并发的队列存储方法及系统,使用Node.js单线程异步I/O调用,从而高效处理高吞吐的并发连接,解决了高并发请求时受限于I/O或者内存的问题。
为实现上述目的及其他相关目的,本发明提供一种实现高并发的队列存储方法,包括以下内容:采用Node.js作为http服务器;Node.js接收客户端传送来的发送请求;Node.js将客户端通过发送请求发送过来的数据包发送到Redis。
根据上述的实现高并发的队列存储方法,其中:Node.js采用异步I/O和事件驱动架构,为每个业务逻辑生成一个线程,通过系统线程切换来来弥补同步I/O调用的时间开销。
进一步地,根据上述的实现高并发的队列存储方法,其中:Node.js接收客户端传送来的发送请求时,Node.js执行异步I/O请求时会建立一个事件队列,每个异步I/O请求完成后都会被推送到事件队列中等待执行。
根据上述的实现高并发的队列存储方法,其中:Redis部署在Win或Linux环境之上。
根据上述的实现高并发的队列存储方法,其中:Node.js接收客户端传送来的发送请求时,针对传送请求,Node.js不存储数据接入中和数据处理完成两种状态,而是当数据处于数据接入中状态时,针对接入的数据执行数据处理的操作;当数据处理完成后,执行数据处理完成后的操作。
同时,本发明还提供一种实现高并发的队列存储系统,包括客户端、Node.js和Redis;
所述Node.js用于作为http服务器;
所述客户端用于将发送请求发送至Node.js;
所述Redis用于接收通过Node.js发送来的数据包,所述数据包由客户端通过发送请求发送至Node.js。
根据上述的实现高并发的队列存储系统,其中:Node.js采用异步I/O和事件驱动架构,为每个业务逻辑生成一个线程,通过系统线程切换来来弥补同步I/O调用的时间开销。
进一步地,根据上述的实现高并发的队列存储系统,其中:Node.js接收客户端传送来的发送请求时,Node.js执行异步I/O请求时会建立一个事件队列,每个异步I/O请求完成后都会被推送到事件队列中等待执行。
根据上述的实现高并发的队列存储系统,其中:所述Redis部署在Win或Linux环境之上。
根据上述的实现高并发的队列存储系统,其中:Node.js接收客户端传送来的发送请求时,针对传送请求,Node.js不存储数据接入中和数据处理完成两种状态,而是当数据处于数据接入中状态时,针对接入的数据执行数据处理的操作;当数据处理完成后,执行数据处理完成后的操作。
如上所述,本发明的实现高并发的队列存储方法及系统,具有以下有益效果:
(1)Node.js仅仅只运行在一个单线程中,使用非阻塞的异步I/O调用,所有连接都由该线程处理;无需为每个连接建立线程,解决了IO阻塞等问题;从而能够处理庞大、高吞吐量的并发连接;
(2)将数据包从客户端发送到Node.js,再经由Node.js发送到Redis,这样的处理过程实现起来比IIS和apache在性能上要高很多。
附图说明
图1显示为本发明的实现高并发的队列存储方法的流程图;
图2显示为本发明的实现高并发的队列存储系统的结构示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明的实现高并发的队列存储方法及系统采用Node.js作为http服务器;客户端向Node.js传送发送(post)请求;数据包通过Node.js发送到Redis。
参照图1,本发明的实现高并发的队列存储方法包括以下内容:
1)采用Node.js作为http服务器。
Node.js最大的特点就是采用异步I/O和事件驱动架构,对于多线程模型,为每个业务逻辑生成一个线程,通过系统线程切换来来弥补同步I/O调用的时间开销。Node.js使用的是单线程模型,对所有I/O都采用异步式的请求方式,避免频繁的上下文切换。在Node.js执行异步I/O请求,会建立一个事件队列,程序在执行时进入事件循环并等待下一个事件到来。每个异步I/O请求完成后都会被推送到事件队列中等待执行。
2)Node.js接收客户端传送来的发送(post)请求。
对于HTTP请求来说,我们通常使用的是获取(get)请求和post请求。而对于get请求来说,只是对字符串的传输,它会将数据添加到URL地址里,属于URL的一部分;而对于post请求来说,它的数据以包的形式存在,除了可以有文本信息,还可以有二进制文件流信息。在本发明中,主要涉及的是采用post方式的文本处理。
3)Node.js将客户端通过post请求发送来的数据包发送到Redis。
Redis可以部署在Win和Linux环境之上。
在本发明中,使用Node.js来实现对post请求的处理时,Node.js接入的形式为{param1="zzl",param2="male"}。其中{param1="zzl",param2="male"}是指客户端发送给Node.js的数据格式。由于post请求的数据大小的限制,不会存储数据接入中和数据处理完成两种状态。Node.js接收到客户端通过post请求发送的数据包时,要对数据进行处理,因此中间有个过程,即存在数据接入中和数据处理完成这两个状态。这两种状态对应着回调方法,即,当数据处于数据接入中状态时,针对接入的数据执行数据处理的操作;当数据处理完成后,执行数据处理完成后的操作。通过上述操作方式,能够尽快处理当前数据,解决了IO阻塞等问题,从而能够处理庞大、高吞吐量的并发连接。
具体代码如下:
//接入中
req.addListener("data",function(postDataChunk){});
//接收完成
req.addListener("end",function(){});
具体地,本发明的实现高并发的队列存储方法实现代码如下:
参照图2,本发明的实现高并发的队列存储系统包括客户端、Node.js和Redis。
Node.js用于作为http服务器。
具体地,Node.js最大的特点就是采用异步I/O和事件驱动架构,对于多线程模型,为每个业务逻辑生成一个线程,通过系统线程切换来来弥补同步I/O调用的时间开销。Node.js使用的是单线程模型,对所有I/O都采用异步式的请求方式,避免频繁的上下文切换。在Node.js执行的时候维护着一个事件队列,程序在执行时进入事件循环并等待下一个事件到来。每个异步I/O请求完成后都会被推送到事件队列中等待执行。
客户端用于将发送请求发送至Node.js。
Redis用于接收通过Node.js发送来的数据包,所述数据包由客户端通过发送请求发送至Node.js。
其中,Redis可以部署在Win和Linux环境之上。
本发明的实现高并发的队列存储系统的具体工作流程及相关代码如前文所述,故在此不再赘述。
综上所述,本发明的实现高并发的队列存储方法及系统Node.js仅仅只运行在一个单线程中,使用非阻塞的异步I/O调用,所有连接都由该线程处理;无需为每个连接建立线程,解决了IO阻塞等问题;能够处理庞大、高吞吐量的并发连接;将数据包从客户端发送到Node.js,再经由Node.js发送到Redis,这样的处理过程实现起来比IIS和apache在性能上要高很多。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
Claims (10)
1.一种实现高并发的队列存储方法,其特征在于:包括以下内容:
采用Node.js作为http服务器;
Node.js接收客户端传送来的发送请求;
Node.js将客户端通过发送请求发送过来的数据包发送到Redis。
2.根据权利要求1所述的实现高并发的队列存储方法,其特征在于:Node.js采用异步I/O和事件驱动架构,为每个业务逻辑生成一个线程,通过系统线程切换来来弥补同步I/O调用的时间开销。
3.根据权利要求2所述的实现高并发的队列存储方法,其特征在于:Node.js接收客户端传送来的发送请求时,Node.js执行异步I/O请求时会建立一个事件队列,每个异步I/O请求完成后都会被推送到事件队列中等待执行。
4.根据权利要求1所述的实现高并发的队列存储方法,其特征在于:Redis部署在Win或Linux环境之上。
5.根据权利要求1所述的实现高并发的队列存储方法,其特征在于:Node.js接收客户端传送来的发送请求时,针对传送请求,Node.js不存储数据接入中和数据处理完成两种状态,而是当数据处于数据接入中状态时,针对接入的数据执行数据处理的操作;当数据处理完成后,执行数据处理完成后的操作。
6.一种实现高并发的队列存储系统,其特征在于:包括客户端、Node.js和Redis;
所述Node.js用于作为http服务器;
所述客户端用于将发送请求发送至Node.js;
所述Redis用于接收通过Node.js发送来的数据包,所述数据包由客户端通过发送请求发送至Node.js。
7.根据权利要求6所述的实现高并发的队列存储系统,其特征在于:Node.js采用异步I/O和事件驱动架构,为每个业务逻辑生成一个线程,通过系统线程切换来来弥补同步I/O调用的时间开销。
8.根据权利要求7所述的实现高并发的队列存储系统,其特征在于:Node.js接收客户端传送来的发送请求时,Node.js执行异步I/O请求时会建立一个事件队列,每个异步I/O请求完成后都会被推送到事件队列中等待执行。
9.根据权利要求6所述的实现高并发的队列存储系统,其特征在于:所述Redis部署在Win或Linux环境之上。
10.根据权利要求6所述的实现高并发的队列存储系统,其特征在于:Node.js接收客户端传送来的发送请求时,针对传送请求,Node.js不存储数据接入中和数据处理完成两种状态,而是当数据处于数据接入中状态时,针对接入的数据执行数据处理的操作;当数据处理完成后,执行数据处理完成后的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510745076.1A CN105426326A (zh) | 2015-11-05 | 2015-11-05 | 一种实现高并发的队列存储方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510745076.1A CN105426326A (zh) | 2015-11-05 | 2015-11-05 | 一种实现高并发的队列存储方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105426326A true CN105426326A (zh) | 2016-03-23 |
Family
ID=55504542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510745076.1A Pending CN105426326A (zh) | 2015-11-05 | 2015-11-05 | 一种实现高并发的队列存储方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105426326A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106131138A (zh) * | 2016-06-27 | 2016-11-16 | 浪潮软件股份有限公司 | 一种基于非阻塞队列的展示数据实时推送系统和方法 |
CN106202505A (zh) * | 2016-07-20 | 2016-12-07 | 北京京东尚科信息技术有限公司 | 数据处理方法及其系统 |
CN106919441A (zh) * | 2017-02-08 | 2017-07-04 | 武汉奇米网络科技有限公司 | 一种电子商务平台高并发事件的处理方法及系统 |
CN107172582A (zh) * | 2017-07-27 | 2017-09-15 | 国网安徽省电力公司检修公司 | 一种基于NodeJS的M2M通信设备及方法 |
CN110177146A (zh) * | 2019-05-28 | 2019-08-27 | 东信和平科技股份有限公司 | 一种基于异步事件驱动的非阻塞Restful通信方法、装置和设备 |
CN110535751A (zh) * | 2019-08-19 | 2019-12-03 | 深圳追一科技有限公司 | 一种消息响应方法、装置、计算机设备和存储介质 |
CN110798366A (zh) * | 2018-08-01 | 2020-02-14 | 阿里巴巴集团控股有限公司 | 任务逻辑的处理方法、装置及设备 |
CN112165510A (zh) * | 2020-09-02 | 2021-01-01 | 北方民族大学 | 一种协同可视化服务器 |
CN113568587A (zh) * | 2021-09-22 | 2021-10-29 | 深圳市中天碧姆科技有限公司 | 智慧城市实时数据处理方法、系统及存储介质 |
CN114979174A (zh) * | 2022-04-15 | 2022-08-30 | 四川虹美智能科技有限公司 | 一种处理http阻塞等待分步式服务数据的方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103207785A (zh) * | 2013-04-23 | 2013-07-17 | 北京奇虎科技有限公司 | 数据下载请求的处理方法、装置及系统 |
CN103645939A (zh) * | 2013-11-29 | 2014-03-19 | 北京奇虎科技有限公司 | 一种图片抓取的方法和系统 |
CN103927368A (zh) * | 2014-04-22 | 2014-07-16 | 浪潮软件股份有限公司 | 一种轻量级架构的利用流数据概念生成热力图的方法 |
CN104216768A (zh) * | 2014-09-22 | 2014-12-17 | 北京金山安全软件有限公司 | 一种数据处理方法及装置 |
WO2014202848A1 (fr) * | 2013-06-20 | 2014-12-24 | Highlands Technologies Solutions | Procede de communication pour une application interactive entre terminaux dans une salle de projection sur ecran |
CN104991823A (zh) * | 2015-07-02 | 2015-10-21 | 北京京东尚科信息技术有限公司 | 实现Javascript多任务机制的方法和设备 |
-
2015
- 2015-11-05 CN CN201510745076.1A patent/CN105426326A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103207785A (zh) * | 2013-04-23 | 2013-07-17 | 北京奇虎科技有限公司 | 数据下载请求的处理方法、装置及系统 |
WO2014202848A1 (fr) * | 2013-06-20 | 2014-12-24 | Highlands Technologies Solutions | Procede de communication pour une application interactive entre terminaux dans une salle de projection sur ecran |
CN103645939A (zh) * | 2013-11-29 | 2014-03-19 | 北京奇虎科技有限公司 | 一种图片抓取的方法和系统 |
CN103927368A (zh) * | 2014-04-22 | 2014-07-16 | 浪潮软件股份有限公司 | 一种轻量级架构的利用流数据概念生成热力图的方法 |
CN104216768A (zh) * | 2014-09-22 | 2014-12-17 | 北京金山安全软件有限公司 | 一种数据处理方法及装置 |
CN104991823A (zh) * | 2015-07-02 | 2015-10-21 | 北京京东尚科信息技术有限公司 | 实现Javascript多任务机制的方法和设备 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106131138A (zh) * | 2016-06-27 | 2016-11-16 | 浪潮软件股份有限公司 | 一种基于非阻塞队列的展示数据实时推送系统和方法 |
CN106202505A (zh) * | 2016-07-20 | 2016-12-07 | 北京京东尚科信息技术有限公司 | 数据处理方法及其系统 |
CN106202505B (zh) * | 2016-07-20 | 2019-09-20 | 北京京东尚科信息技术有限公司 | 数据处理方法及其系统 |
CN106919441A (zh) * | 2017-02-08 | 2017-07-04 | 武汉奇米网络科技有限公司 | 一种电子商务平台高并发事件的处理方法及系统 |
CN107172582A (zh) * | 2017-07-27 | 2017-09-15 | 国网安徽省电力公司检修公司 | 一种基于NodeJS的M2M通信设备及方法 |
CN110798366B (zh) * | 2018-08-01 | 2023-02-24 | 阿里巴巴集团控股有限公司 | 任务逻辑的处理方法、装置及设备 |
CN110798366A (zh) * | 2018-08-01 | 2020-02-14 | 阿里巴巴集团控股有限公司 | 任务逻辑的处理方法、装置及设备 |
CN110177146A (zh) * | 2019-05-28 | 2019-08-27 | 东信和平科技股份有限公司 | 一种基于异步事件驱动的非阻塞Restful通信方法、装置和设备 |
CN110535751A (zh) * | 2019-08-19 | 2019-12-03 | 深圳追一科技有限公司 | 一种消息响应方法、装置、计算机设备和存储介质 |
CN110535751B (zh) * | 2019-08-19 | 2023-01-24 | 深圳追一科技有限公司 | 一种消息响应方法、装置、计算机设备和存储介质 |
CN112165510A (zh) * | 2020-09-02 | 2021-01-01 | 北方民族大学 | 一种协同可视化服务器 |
CN113568587A (zh) * | 2021-09-22 | 2021-10-29 | 深圳市中天碧姆科技有限公司 | 智慧城市实时数据处理方法、系统及存储介质 |
CN113568587B (zh) * | 2021-09-22 | 2021-12-24 | 深圳市中天碧姆科技有限公司 | 智慧城市实时数据处理方法、系统及存储介质 |
CN114979174A (zh) * | 2022-04-15 | 2022-08-30 | 四川虹美智能科技有限公司 | 一种处理http阻塞等待分步式服务数据的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426326A (zh) | 一种实现高并发的队列存储方法及系统 | |
US10257033B2 (en) | Virtualized network functions and service chaining in serverless computing infrastructure | |
US10838873B2 (en) | Method, apparatus, and computer program product for managing addresses in distributed system | |
WO2016011894A1 (zh) | 报文处理方法和装置 | |
CN112148455B (zh) | 一种任务处理方法、设备及介质 | |
US20060026169A1 (en) | Communication method with reduced response time in a distributed data processing system | |
CN103259683A (zh) | 基于HTML5的Web网管系统二级缓存推送方法 | |
CN103645939A (zh) | 一种图片抓取的方法和系统 | |
KR102204670B1 (ko) | 프록시 기반 멀티스레딩 메시지 전달 통신을 위한 기술 | |
US20180262560A1 (en) | Method and system for transmitting communication data | |
US20190007339A1 (en) | Method and device for managing stateful application on server | |
CN110995678A (zh) | 一种面向工控网络的高效入侵检测系统 | |
CN104866528B (zh) | 多平台数据采集方法及系统 | |
CN105760459A (zh) | 一种分布式数据处理系统及方法 | |
CN112463290A (zh) | 动态调整计算容器的数量的方法、系统、装置和存储介质 | |
US20170083387A1 (en) | High-performance computing framework for cloud computing environments | |
CN105653347B (zh) | 一种服务器、资源管理方法及虚拟机管理器 | |
CN103338156A (zh) | 一种基于线程池的命名管道服务器并发通信方法 | |
CN103916316A (zh) | 网络数据包线速捕获方法 | |
CN105868000A (zh) | 一种针对网络i/o虚拟化的并行化可扩展数据处理方法 | |
US9332071B2 (en) | Data stage-in for network nodes | |
CN104769553A (zh) | 用于支持集群中的工作共享复用的系统和方法 | |
Li et al. | Improving spark performance with zero-copy buffer management and RDMA | |
CN115378937A (zh) | 任务的分布式并发方法、装置、设备和可读存储介质 | |
CN104580328A (zh) | 虚拟机迁移方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160323 |