一种API服务器处理大数据的运算方法及其系统
技术领域
本发明涉及信息技术领域,尤其涉及的是一种API服务器处理大数据的运算方法及其系统。
背景技术
传统API(Application Programming Interface,即应用程序编程接口)服务器处理API请求包含三个操作:接收请求、业务逻辑运算、返回结果。这三个操作都是在同一个API,即同一个http请求中完成的。决定请求响应速度的主要因素就是业务逻辑运算耗时。
随着大数据时代的到来,服务器承载的运算量越来越大,业务逻辑运算耗时也越来越长。要减少业务逻辑运算耗时,必须通过并行的方式进行业务逻辑运算,但创建、调度、管理线程是一项复杂而且容易出错的工作,所以往往需要借助像Storm这样的分布式并行计算框架。
一般的做法是将API服务器业务逻辑运算抽离出来,放到Storm(分布式实时计算系统,也即是Twitter开源的一个分布式的实时计算系统)中,API服务器通过DRPC(Distribute Remote Procedure Call Protocol,即分布式远程过程调用协议)的方式提交请求到Storm,然后等待请求返回。当Client请求量较小的时候,通过Storm并行计算能力能减少业务逻辑运算耗时。但是Storm运算能力是有限的,当客户端并发请求数增大的时候,API 服务器对Storm的DRPC并发请求数也会增大,当它超过Storm的运算能力时,Storm就会让DPRC请求进入队列排队,从而后面的DPRC请求的响应时间就会变长。API服务器的连接线程会被DRPC请求阻塞起来,无法处理新的请求,很快当连接线程池耗尽的时候,API服务器就会不可用,这对客户端来说是不友好的。
因此,现有技术还有待于改进和发展。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种API服务器处理大数据的运算方法及其系统,可有效解决现有技术中API服务器在处理大数据时存在的高延迟、低吞吐量的缺陷。
本发明解决技术问题所采用的技术方案如下:
一种API服务器处理大数据的运算方法,其中,所述方法包括步骤:
A、客户端接收用户的操作指令,向API服务器发送请求数据;
B、所述API服务器接收所述请求数据,并将所述请求数据发送至消息队列集群缓冲,所述消息队列集群再将所述请求数据发送至分布式实时计算系统集群;
C、所述分布式实时计算系统集群对所述请求数据进行业务逻辑运算,并将得到的运算结果发送至数据库存储;
D、当客户端接收到用户的结果获取指令时,向API 服务器发送所述结果获取指令,所述API服务器据所述结果获取指令在数据库中查询所述运算结果并返回至客户端。
所述API服务器处理大数据的运算方法,其中,所述步骤B具体包括:
B1、所述API服务器接收所述数据请求,并生成一与所述请求数据相对应的请求数据身份标识;
B2、所述API将所述请求数据身份标识发送至客户端,并将所述请求数据及所述请求数据身份标识发送至消息队列集群缓冲;
B3、所述消息队列集群接收所述请求数据及所述请求数据身份标识,并将所述请求数据发送至分布式实时计算系统集群。
所述API服务器处理大数据的运算方法,其中,所述数据库为Redis数据库。
所述API服务器处理大数据的运算方法,其中,所述步骤D具体包括:
D1、当客户端接收到用户的结果获取指令时,将所述请求数据身份标识发送至API服务器;
D2、所述API服务器接收所述请求数据身份标识,并根据所述请求数据身份标识在所述数据库中查询对应的运算结果;
D3、当查询到所述运算结果时,则将所述运算结果发送至客户端。
所述API服务器处理大数据的运算方法,其中,所述步骤D3之后还包括:
D4、当未查询到所述运算结果时,所述客户端再次发出结果获取指令,并返回执行步骤D1。
一种API服务器处理大数据的运算系统,其中,包括:
请求发送模块,用于客户端接收用户的操作指令,向API服务器发送请求数据;
缓存及发送模块,用于所述API服务器接收所述请求数据,并将所述请求数据发送至消息队列集群缓冲,所述消息队列集群再将所述请求数据发送至分布式实时计算系统集群;
运算及存储模块,用于所述分布式实时计算系统集群对所述请求数据进行业务逻辑运算,并将得到的运算结果发送至数据库存储;
结果获取模块,用于当客户端接收到用户的结果获取指令时,所述API服务器在数据库中查询所述运算结果并返回至客户端。
所述API服务器处理大数据的运算系统,其中,所述缓存及发送模块具体包括:
标识生成单元,用于所述API服务器接收所述数据请求,并生成一与所述请求数据相对应的请求数据身份标识;
数据及标识发送单元,用于所述API将所述请求数据身份标识发送至客户端,并将所述请求数据及所述请求数据身份标识发送至消息队列集群缓冲;
缓存数据发送单元,用于所述消息队列集群接收所述请求数据及所述请求数据身份标识,并将所述请求数据发送至分布式实时计算系统集群。
所述API服务器处理大数据的运算系统,其中,所述数据库为Redis数据库。
所述API服务器处理大数据的运算系统,其中,所述结果获取模块具体包括:
标识发送单元,用于当客户端接收到用户的结果获取指令时,将所述请求数据身份标识发送至API服务器;
结果查询单元,用于所述API服务器接收所述请求数据身份标识,并根据所述请求数据身份标识在所述数据库中查询对应的运算结果;
结果反馈单元,用于当查询到所述运算结果时,则将所述运算结果发送至客户端。
所述API服务器处理大数据的运算系统,其中,所述结果获取模块还包括:
重复查询单元,用于当未查询到所述运算结果时,所述客户端再次发出结果获取指令,并将所述请求数据身份标识再次发送至API服务器。
本发明所提供的一种API服务器处理大数据的运算方法及其系统,方法包括:客户端接收用户的操作指令,向API服务器发送请求数据;所述API服务器接收所述请求数据,并将所述请求数据发送至消息队列集群缓冲,所述消息队列集群再将所述请求数据发送至分布式实时计算系统集群;所述分布式实时计算系统集群对所述请求数据进行业务逻辑运算,并将得到的运算结果发送至数据库存储;当客户端接收到用户的结果获取指令时,向API 服务器发送所述结果获取指令,所述API服务器据所述结果获取指令在数据库中查询所述运算结果并返回至客户端。本发明提供了一种低延迟、高性能、易扩展的两步式API服务器实现方法,避免了API服务器在处理大数据时出现的高延迟、低吞吐量的问题。
附图说明
图1是本发明所述API服务器处理大数据的运算方法的较佳实施例的流程图。
图2是本发明所述API服务器处理大数据的运算方法中缓存及发送请求数据的具体流程图。
图3是本发明所述API服务器处理大数据的运算方法中运算结果获取的具体流程图。
图4是本发明所述API服务器处理大数据的运算系统的较佳实施例的结构框图。
图5是本发明所述API服务器处理大数据的运算系统的结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参见图1,图1是本发明所述API服务器处理大数据的运算方法较佳实施例的流程图。如图1所示,所述API服务器处理大数据的运算方法,包括以下步骤:
步骤S100、客户端接收用户的操作指令,向API服务器发送请求数据。
步骤S200、所述API服务器接收所述请求数据,并将所述请求数据发送至消息队列集群缓冲,所述消息队列集群再将所述请求数据发送至分布式实时计算系统集群。
本发明的实施例中,当所述API服务器接收所述请求数据后,并未在API服务器上进行请求数据的业务逻辑运算,而是将所述请求数据发送至消息队列集群缓冲后,再由所述消息队列集群将所述请求数据发送至分布式实时计算系统集群。
具体实施时,在API服务器中部署Zookeeper(它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等)集群,用于集中管理配置信息并可以动态修改配置。
所述消息队列集群部署为Kafka(它是一个分布式的,分区的,重复提交的日志服务)集群,将Kafka各个节点的地址写入Zookeeper。API服务器作为Kafka的生产者发送消息,分布式实时计算系统集群作为Kafka的消费者消费消息。API服务器与分布式实时计算系统集群之间没有直接联系,它们可以灵活部署,甚至不需要知道对方的存在。
所述分布式实时计算系统集群部署为Storm集群,Storm通过API服务器中的Zookeeper获取Kafka集群各个节点数据库的地址。API服务器将业务运算逻辑单独实现并打包成Topology(Storm运算单元)提交给Storm。Topology需从Kafka中读取消息,并进行计算,计算完成后,将计算结果分布保存到Kafka集群各个节点数据库中。
由于业务逻辑运算是在分布式实时计算系统集群中进行,故能降低API服务器的运算量。而且当业务逻辑运算的算法发生改变时,不需要修改或重新部署API服务器。
步骤S300、所述分布式实时计算系统集群对所述请求数据进行业务逻辑运算,并将得到的运算结果发送至数据库存储。
在步骤S300中,若客户端并发请求量大时,所述分布式实时计算系统集群对多个客户端传输的请求数据分别进行处理,并将完成算而的得到的运算结果发送至数据库进行存储。具体实施时,所述数据库采用Redis数据库,将Redis的各个节点的地址写入Zookeeper。其中,Redis数据库是一种使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value(即键值对)数据库。
步骤S400、当客户端接收到用户的结果获取指令时,向API 服务器发送所述结果获取指令,所述API服务器据所述结果获取指令在数据库中查询所述运算结果并返回至客户端。
本发明的实施例中,当客户端接收用户的操作指令向API服务器发出结果获取指令时,所述API服务器根据所述结果获取指令在数据库中查询所述运算结果,当查询到所述运算结果时则立即将其发送至客户端。可见,上述过程没有阻塞或者等待,提高了API服务器的吞吐量,使得客户端的请求可以得到API服务器的快速反馈。
进一步地实施例,如图2所示,其为本发明所述API服务器处理大数据的运算方法中缓存及发送请求数据的具体流程图。所述步骤S200中缓存及发送请求数据具体包括:
步骤S201、所述API服务器接收所述数据请求,并生成一与所述请求数据相对应的请求数据身份标识。
显然,在步骤S100中可能是一个客户端向API服务器发送数据请求,也有可能是多个客户端向API服务器发送数据请求。为了区别不同的数据请求,当所述API服务器每接收一数据请求时,则对应生成一唯一的请求数据身份标识。当客户端需查询运算结果时,根据所述请求数据身份标识即可查询,同时也保证了查询结果的唯一性。
步骤S202、所述API将所述请求数据身份标识发送至客户端,并将所述请求数据及所述请求数据身份标识发送至消息队列集群缓冲。
当API中根据请求数据生成请求数据身份标识后,将所述请求数据身份标识发送至对应的客户端,并将所述请求数据发送至消息队列集群缓冲。
步骤S203、所述消息队列集群接收所述请求数据及所述请求数据身份标识,并将所述请求数据发送至分布式实时计算系统集群。
本发明的实施例中,采用消息队列集群作为缓冲区来缓冲所述请求数据,而不是直接将所述请求数据发送至分布式实时计算系统集群进行业务逻辑运算,避免了通过DRPC方式调用分布式实时计算系统集群而导致的API服务器阻塞的问题。
进一步地实施例,如图3所示,其为本发明所述API服务器处理大数据的运算方法中运算结果获取的具体流程图。所述步骤S400中运算结果获取具体包括:
步骤S401、当客户端接收到用户的结果获取指令时,将所述请求数据身份标识发送至API服务器。
当客户端需获取请求数据的运算结果时,用户操作客户端向API服务器发送结果获取指令,且同时将所述请求数据身份标识发送至API服务器。
步骤S402、所述API服务器接收所述请求数据身份标识,并根据所述请求数据身份标识在所述数据库中查询对应的运算结果。
显然,API服务器根据所述请求数据身份标识在数据库中查询对应的运算结果时,由于请求数据身份标识是唯一的,故能保证了查询结果的唯一性。
步骤S403、当查询到所述运算结果时,则将所述运算结果发送至客户端。
进一步地实施例,所述步骤S403之后还包括:
当未查询到所述运算结果时,所述客户端再次发出结果获取指令,并返回执行步骤S401。
显然,由于在分布式实时计算系统集群中对大数据进行处理时,并不能在短时间内完成多所有请求数据的运算。故当有客户端在发送的数据查询指令后,API服务器返回的计算结果为空(即未查询到运算结果)时,则客户端需再次向API服务器发送结果获取指令。其中,客户端再次向向API服务器发送结果获取指令与上一次发送结果获取指令的时间间隔为任意的。
经实际测试可知,传统的API服务器处理10万次请求耗时168s,平均响应时间3190ms;而本发明所述的API服务器处理大数据的运算方法,处理10万次发送请求数据和10万次运算结果获取耗时分别为28s和43s,总耗时为71s,平均响应时间为1191ms。可见,本发明所提供的步式API服务器实现方法是一种低延迟、高性能、易扩展的方法。
基于上述实施例,本发明还提供一种API服务器处理大数据的运算系统。如图4所示,其为本发明所述API服务器处理大数据的运算系统的较佳实施例的结构框图,所述API服务器处理大数据的运算系统包括:
请求发送模块100,用于客户端接收用户的操作指令,向API服务器发送请求数据;具体如上述方法步骤S100所述。
缓存及发送模块200,用于所述API服务器接收所述请求数据,并将所述请求数据发送至消息队列集群缓冲,所述消息队列集群再将所述请求数据发送至分布式实时计算系统集群;具体如上述方法步骤S200所述。
运算及存储模块300,用于所述分布式实时计算系统集群对所述请求数据进行业务逻辑运算,并将得到的运算结果发送至数据库存储;具体如上述方法步骤S300所述。
结果获取模块400,用于当客户端接收到用户的结果获取指令时,向API 服务器发送所述结果获取指令,所述API服务器据所述结果获取指令在数据库中查询所述运算结果并返回至客户端;具体如上述方法步骤S400所述。
进一步地实施例,在所述API服务器处理大数据的运算系统中,所述缓存及发送模块200具体包括:
标识生成单元,用于所述API服务器接收所述数据请求,并生成一与所述请求数据相对应的请求数据身份标识;具体如步骤S201所述。
数据及标识发送单元,用于所述API将所述请求数据身份标识发送至客户端,并将所述请求数据及所述请求数据身份标识发送至消息队列集群缓冲;具体如上述方法步骤S202所述。
缓存数据发送单元,用于所述消息队列集群接收所述请求数据及所述请求数据身份标识,并将所述请求数据发送至分布式实时计算系统集群;具体如上述方法步骤S203所述。
进一步地实施例,在所述API服务器处理大数据的运算系统中,所述数据库为Redis数据库;具体如上述方法步骤S300所述。
进一步地实施例,在所述API服务器处理大数据的运算系统中,所述结果获取模块400具体包括:
标识发送单元,用于当客户端接收到用户的结果获取指令时,将所述请求数据身份标识发送至API服务器;具体如上述方法步骤S401所述。
结果查询单元,用于所述API服务器接收所述请求数据身份标识,并根据所述请求数据身份标识在所述数据库中查询对应的运算结果;具体如上述方法步骤S402所述。
结果反馈单元,用于当查询到所述运算结果时,则将所述运算结果发送至客户端;具体如上述方法步骤S403所述。
进一步地实施例,在所述API服务器处理大数据的运算系统中,所述结果获取模块还包括:
重复查询单元,用于当未查询到所述运算结果时,所述客户端再次发出结果获取指令,并将所述请求数据身份标识再次发送至API服务器。
为了更清楚理解本发明的技术方案,以下将通过具体的应用实施例对本发明做进一步说明。如图5所示,其为本发明所述API服务器处理大数据的运算系统的结构示意图。
当用户需获取API请求的运算结果时,先操作客户端向API服务器发送请求数据,此时API服务器向客户端返回请求ID(即标识请求数据的唯一ID)。
API服务器接收请求数据后的第一步是将客户端发送的每一请求数据以不同的实例存储;第二步是将每一带有请求ID的实例数据发送至Kafka集群中对应的节点进行缓存;第三步是Kafka集群将每一节点中的缓存数据发送至Storm集群对应节点进行业务逻辑运算;第四步是Storm集群将每一节点的运算结果发送至Redis集群中的对应节点进行存储。
当客户端接收到用户的结果获取指令时,向API 服务器发送带有请求ID的结果获取指令;API服务器根据结果获取指令,在Redis数据库的所有节点中查询与结果与请求ID相对应的业务逻辑运算结果,并返回至客户端。
综上所述,本发明所提供的一种API服务器处理大数据的运算方法及其系统,方法包括:客户端接收用户的操作指令,向API服务器发送请求数据;所述API服务器接收所述请求数据,并将所述请求数据发送至消息队列集群缓冲,所述消息队列集群再将所述请求数据发送至分布式实时计算系统集群;所述分布式实时计算系统集群对所述请求数据进行业务逻辑运算,并将得到的运算结果发送至数据库存储;当客户端接收到用户的结果获取指令时,向API 服务器发送所述结果获取指令,所述API服务器据所述结果获取指令在数据库中查询所述运算结果并返回至客户端。本发明提供了一种低延迟、高性能、易扩展的两步式API服务器实现方法,避免了API服务器在处理大数据时出现的高延迟、低吞吐量的问题。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。