CN106201739A - 一种基于Redis的Storm的远程调用方法 - Google Patents
一种基于Redis的Storm的远程调用方法 Download PDFInfo
- Publication number
- CN106201739A CN106201739A CN201610492975.XA CN201610492975A CN106201739A CN 106201739 A CN106201739 A CN 106201739A CN 201610492975 A CN201610492975 A CN 201610492975A CN 106201739 A CN106201739 A CN 106201739A
- Authority
- CN
- China
- Prior art keywords
- redis
- message
- storm
- key
- variable
- 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
- 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/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
-
- 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/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/541—Client-server
Abstract
本发明涉及一种基于Redis的Storm的远程调用方法,调用客户端利用消息队列和Redis对Storm实现远程调用,所述方法包括下列步骤:调用客户端发送请求消息至消息队列;Storm从消息队列中获取请求消息并进行处理;Storm将处理后的消息结果放入Redis中;调用客户端从Redis中获取处理后的消息结果。与现有技术相比,本发明具有避免数据缓存量过大、防止单点故障以及可靠性高等优点。
Description
技术领域
本发明涉及远程调用,尤其是涉及一种基于Redis的Storm的远程调用方法。
背景技术
Storm是一个分布式的,可靠的,容错的数据流处理系统。它会把工作任务委托给不同类型的组件,每个组件负责处理一项简单特定的任务。Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt,bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。
RPC(Remote Procedure Call Protocol)为远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
Storm也提供RPC接口实现,但Storm RPC存在诸多问题。原因如下:RPC请求消息是放在RPC Server内存队列中,在请求量大时,内存需要缓存大量数据,对内存造成很大的负担,造成巨大的瓶颈。虽然Storm集群可以启动多个RPCServer,但单个客户端一次只能选择连接一个目标Server。多个Server之间并没有做负载均衡。如果一个Server故障,客户端需要重新连接另外一个Server,并重新调用。
发明内容
本发明的目的是针对上述问题提供一种避免数据缓存量过大、防止单点故障以及可靠性高的基于Redis的Storm的远程调用方法。
本发明的目的可以通过以下技术方案来实现:
一种基于Redis的Storm的远程调用方法,调用客户端利用消息队列和Redis对Storm实现远程调用,其特征在于,所述方法包括下列步骤:
1)调用客户端发送请求消息至消息队列;
2)Storm从消息队列中获取请求消息并进行处理;
3)Storm将处理后的消息结果放入Redis中;
4)调用客户端从Redis中获取步骤3)中处理后的消息结果。
所述步骤3)采用LPUSH命令将处理后的消息结果放入Redis中,具体为:
31)查找key对应的变量,若该变量不存在,则进入步骤32),若该变量存在,则进入步骤33);
32)创建一个空列表,并与key对应;
33)判断与key对应的变量是否为列表类型,若否则返回错误,若是则进入步骤34);
34)将指定值插入到key对应的变量的头部。
所述步骤4)采用BLPOP命令从Redis中获取处理后的消息结果,具体为:
41)查找key对应的变量,若该变量不存在或该变量对应的列表为空列表,则返回步骤41),否则进入步骤42);
42)弹出key对应的第一个变量的头元素,并和key一起组成结果返回给调用者。
所述消息队列包括基于Kafka的队列。
所述消息含有MessageID。
与现有技术相比,本发明具有以下有益效果:
(1)Storm只用于做流式处理,处理消息可以来自于消息队列(如Kafka等),解决了RPC Server的数据缓存内存瓶颈。
(2)客户端交互的是消息队列(如Kafka)和Redis,不存在RPC Server一次调用中的单点故障,有更高的可靠性。
(3)采用LPUSH命令,在将消息结果放入Redis中时,如果找不到目标对象将会及时报错。
(4)采用BLPOP命令,从Redis中取消息结果时,若果Redis中暂时没有存放的消息结果时保持堵塞,避免误取数据。
(5)消息队列可以选择Kafka,也可根据实际情况选择其他消息队列,实用性能强。
(6)调用客户端发给Stom处理的每条记录都有一个唯一的MessageID,避免数据出现重复或错误。
附图说明
图1为Storm的组件示意图;
图2为本发明的方法示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
如图1所示,Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt,bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。
因此要实现Storm的远程调用,可以利用Storm的RPC接口,但这种方式的性能较差。如图2所示为本发明提出的基于Redis的Storm的远程调用方法,调用客户端利用消息队列和Redis对Storm实现远程调用,该方法包括下列步骤:
1)调用客户端发送消息至消息队列;
2)Storm从消息队列中获取消息并进行处理;
3)Storm使用LPUSH命令将处理后的消息结果放入Redis中;
4)调用客户端使用BLPOP命令从Redis中获取步骤3)中处理后的消息结果。
其中,LPUSH命令具体为LPUSH key value[value...],它是将所有指定的值插入到存于key的列表的头部。如果key不存在,那么在进行push操作前会创建一个空列表。如果key对应的值不是一个list的话,那么会返回一个错误。
而BLPOP命令具体为BLPOP key[key...]timeout,当BLPOP被调用时,如果给定key内至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,并和被弹出元素所属的列表的名字key一起,组成结果返回给调用者。也就是说,调用BLPOP命令会堵塞一直到能取到key。
因此在调用客户端对Storm进行远程调用时,首先对发送的消息都记录一个唯一的ID即MessageID,然后将该消息发送给消息队列(如Kafka),Storm从消息队列中获取消息并对该消息进行处理。处理后,Storm使用LPUSH命令把结果放入到Redis中,具体的指令为LPUSH MessageID结果,调用客户端则通过BLPOP命令从Redis中获取数据,具体的指令为BLPOP MessageID超时时间。通过上述流程,调用客户端可以远程调用Storm为其处理消息,同时无需使用Storm的RPCServer,也就避免了内存中缓存大量数据造成性能瓶颈,同时也避免了一个Server故障导致需要重新连接另一个Server并重新远程调用这类问题。
Claims (5)
1.一种基于Redis的Storm的远程调用方法,调用客户端利用消息队列和Redis对Storm实现远程调用,其特征在于,所述方法包括下列步骤:
1)调用客户端发送请求消息至消息队列;
2)Storm从消息队列中获取请求消息并进行处理;
3)Storm将处理后的消息结果放入Redis中;
4)调用客户端从Redis中获取步骤3)中处理后的消息结果。
2.根据权利要求1所述的基于Redis的Storm的远程调用方法,其特征在于,所述步骤3)采用LPUSH命令将处理后的消息结果放入Redis中,具体为:
31)查找key对应的变量,若该变量不存在,则进入步骤32),若该变量存在,则进入步骤33);
32)创建一个空列表,并与key对应;
33)判断与key对应的变量是否为列表类型,若否则返回错误,若是则进入步骤34);
34)将指定值插入到key对应的变量的头部。
3.根据权利要求1所述的基于Redis的Storm的远程调用方法,其特征在于,所述步骤4)采用BLPOP命令从Redis中获取处理后的消息结果,具体为:
41)查找key对应的变量,若该变量不存在或该变量对应的列表为空列表,则返回步骤41),否则进入步骤42);
42)弹出key对应的第一个变量的头元素,并和key一起组成结果返回给调用者。
4.根据权利要求1所述的基于Redis的Storm的远程调用方法,其特征在于,所述消息队列包括基于Kafka的队列。
5.根据权利要求1所述的基于Redis的Storm的远程调用方法,其特征在于,所述消息含有MessageID。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610492975.XA CN106201739A (zh) | 2016-06-29 | 2016-06-29 | 一种基于Redis的Storm的远程调用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610492975.XA CN106201739A (zh) | 2016-06-29 | 2016-06-29 | 一种基于Redis的Storm的远程调用方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106201739A true CN106201739A (zh) | 2016-12-07 |
Family
ID=57461259
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610492975.XA Pending CN106201739A (zh) | 2016-06-29 | 2016-06-29 | 一种基于Redis的Storm的远程调用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106201739A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106888218A (zh) * | 2017-04-01 | 2017-06-23 | 网易(杭州)网络有限公司 | 消息处理方法、装置、客户端及服务端 |
CN107203431A (zh) * | 2017-05-24 | 2017-09-26 | 广州四三九九信息科技有限公司 | 系统间的通信方法和装置 |
CN107231443A (zh) * | 2017-08-10 | 2017-10-03 | 深圳市中青合创传媒科技有限公司 | 一种应用程序高并发高负荷处理方法和系统 |
CN107241351A (zh) * | 2017-07-14 | 2017-10-10 | 广州四三九九信息科技有限公司 | 一种基于Redis的RPC通信方法 |
CN109347906A (zh) * | 2018-08-30 | 2019-02-15 | 腾讯科技(深圳)有限公司 | 一种数据传输方法、装置、与服务器 |
CN109857739A (zh) * | 2019-01-28 | 2019-06-07 | 中国石油大学(华东) | 一种基于RK(Redis and Kafka)的实时高效缓存机制 |
CN111382022A (zh) * | 2018-12-27 | 2020-07-07 | 北京神州泰岳软件股份有限公司 | 监控实时流计算平台的方法、装置、电子设备和存储介质 |
CN112433870A (zh) * | 2020-12-01 | 2021-03-02 | 网易(杭州)网络有限公司 | 数据调用方法和装置、计算机可读存储介质、电子设备 |
CN114268654A (zh) * | 2021-11-26 | 2022-04-01 | 上海浦东发展银行股份有限公司 | 网络通信方法、装置、设备、存储介质和程序产品 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020196124A1 (en) * | 2001-06-22 | 2002-12-26 | Howard Michael L. | Electronic device with paging for energy curtailment and code generation for manual verification of curtailment |
US8081987B2 (en) * | 2007-04-19 | 2011-12-20 | Trimble Navigation Limited | Method and system for implementing a GIS data collection network |
CN103838867A (zh) * | 2014-03-20 | 2014-06-04 | 网宿科技股份有限公司 | 日志处理方法和装置 |
CN104572976A (zh) * | 2014-12-30 | 2015-04-29 | 广州唯品会信息科技有限公司 | 网站数据更新方法和系统 |
CN105450618A (zh) * | 2014-09-26 | 2016-03-30 | Tcl集团股份有限公司 | 一种api服务器处理大数据的运算方法及其系统 |
-
2016
- 2016-06-29 CN CN201610492975.XA patent/CN106201739A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020196124A1 (en) * | 2001-06-22 | 2002-12-26 | Howard Michael L. | Electronic device with paging for energy curtailment and code generation for manual verification of curtailment |
US8081987B2 (en) * | 2007-04-19 | 2011-12-20 | Trimble Navigation Limited | Method and system for implementing a GIS data collection network |
CN103838867A (zh) * | 2014-03-20 | 2014-06-04 | 网宿科技股份有限公司 | 日志处理方法和装置 |
CN105450618A (zh) * | 2014-09-26 | 2016-03-30 | Tcl集团股份有限公司 | 一种api服务器处理大数据的运算方法及其系统 |
CN104572976A (zh) * | 2014-12-30 | 2015-04-29 | 广州唯品会信息科技有限公司 | 网站数据更新方法和系统 |
Non-Patent Citations (1)
Title |
---|
卡尔森: "《Redis实战》", 30 November 2015 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106888218A (zh) * | 2017-04-01 | 2017-06-23 | 网易(杭州)网络有限公司 | 消息处理方法、装置、客户端及服务端 |
CN107203431A (zh) * | 2017-05-24 | 2017-09-26 | 广州四三九九信息科技有限公司 | 系统间的通信方法和装置 |
CN107241351A (zh) * | 2017-07-14 | 2017-10-10 | 广州四三九九信息科技有限公司 | 一种基于Redis的RPC通信方法 |
CN107231443A (zh) * | 2017-08-10 | 2017-10-03 | 深圳市中青合创传媒科技有限公司 | 一种应用程序高并发高负荷处理方法和系统 |
CN109347906A (zh) * | 2018-08-30 | 2019-02-15 | 腾讯科技(深圳)有限公司 | 一种数据传输方法、装置、与服务器 |
CN109347906B (zh) * | 2018-08-30 | 2021-04-20 | 腾讯科技(深圳)有限公司 | 一种数据传输方法、装置、与服务器 |
CN111382022A (zh) * | 2018-12-27 | 2020-07-07 | 北京神州泰岳软件股份有限公司 | 监控实时流计算平台的方法、装置、电子设备和存储介质 |
CN111382022B (zh) * | 2018-12-27 | 2024-02-20 | 北京神州泰岳软件股份有限公司 | 监控实时流计算平台的方法、装置、电子设备和存储介质 |
CN109857739A (zh) * | 2019-01-28 | 2019-06-07 | 中国石油大学(华东) | 一种基于RK(Redis and Kafka)的实时高效缓存机制 |
CN112433870A (zh) * | 2020-12-01 | 2021-03-02 | 网易(杭州)网络有限公司 | 数据调用方法和装置、计算机可读存储介质、电子设备 |
CN114268654A (zh) * | 2021-11-26 | 2022-04-01 | 上海浦东发展银行股份有限公司 | 网络通信方法、装置、设备、存储介质和程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106201739A (zh) | 一种基于Redis的Storm的远程调用方法 | |
CN102480430B (zh) | 实现报文保序的方法和装置 | |
CN105610972B (zh) | 集群式的任务调派系统 | |
CN101393527A (zh) | 集中式轮询服务 | |
CN106648872A (zh) | 用于多线程处理的方法及装置、服务器 | |
CN101577671A (zh) | 一种对等联网业务自动流量控制方法及系统 | |
CN102469064A (zh) | 通信实现方法及通信设备 | |
CN112788074A (zh) | 数据发送方法、处理方法、接收方法及其设备、存储介质 | |
CN105635083A (zh) | 基于服务器和客户端架构的业务处理方法及业务处理系统 | |
CN105656964B (zh) | 数据推送的实现方法及装置 | |
CN104935636A (zh) | 网络通道加速方法和系统 | |
CN107682460A (zh) | 一种分布式存储集群数据通信方法及系统 | |
CN104038390A (zh) | 一种基于netlink的linux服务器集群统一外设事件监听方法 | |
CN108989101A (zh) | 一种日志输出系统、方法及电子设备 | |
CN105847179A (zh) | 一种dpi系统中数据并发上报的方法及装置 | |
CN104683460B (zh) | 一种物联网的通信方法、装置及服务器 | |
CN105591790B (zh) | 数据通信连接池管理装置 | |
CN103645959A (zh) | 电信实时系统多进程共享内存池交互组件和方法 | |
CN106131162A (zh) | 一种基于iocp机制实现网络服务代理的方法 | |
CN108718398A (zh) | 视频会议系统的码流传输方法、装置及会议设备 | |
CN109450941B (zh) | 一种抗DDoS的SDN控制器消息调度方法 | |
CN110809020B (zh) | 一种基于冗余网络异步通信的高可靠数据传输方法 | |
CN100375454C (zh) | 一种网络计算机终端与服务器的通讯方法 | |
CN102761527B (zh) | 集群中服务的访问方法及系统 | |
US8468121B1 (en) | Resolving resource time intervals in a distributed system |
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 |
Application publication date: 20161207 |
|
RJ01 | Rejection of invention patent application after publication |