一种用于分布式系统的远程过程调用处理方法和系统与流程

文档序号:12068069阅读:268来源:国知局
一种用于分布式系统的远程过程调用处理方法和系统与流程

本发明涉及分布式系统,更具体地说,涉及一种分布式系统的远程过程调用处理方法和系统。



背景技术:

目前分布式系统基本上是采用RPC(Remote Procedure Call,远程过程调用)框架实现。RPC框架的主要目标是让构建分布式应用更容易,在提供强大的远程调用能力时不损失本地调用(LPC)的语义简洁性。目前比较流行的RPC框架有Thrift、Avro、Dubbo、Zeroc ICE等。

RPC调用一般分以下几种方式:

1)同步调用:客户端等待调用执行完成并返回结果。

2)异步调用:客户端调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。

3)单向调用:客户端只需要将调用注册到本地传输缓冲区后就立即返回,不会等待调用结果的返回。

对于一个要求高并发高吞吐的应用系统来说,RPC同步调用方式明显存在问题,因为它会阻塞等待结果返回。而异步调用则不需要等待结果,它是通过回调方式返回结果,这样的设计可以大大提高系统吞吐量,然而回调的设计,后台会缓存请求的连接,等有返回结果时,才会将结果写入响应并关闭连接。所以,异步调用会消耗系统资源,如果并发量非常大(类似双十一这种营销高峰时期)而处理速度又没有那么快时,就有可能使系统资源崩溃。增加硬件设备虽然能解决,但也是治标不治本的策略。RPC的单向调用方式(Oneway)虽然可以有效提高响应速度,但这种方式是不对调用结果负责的,服务端有可能收不到消息,或者服务端宕机导致数据丢失,所以单向调用方式一般都不建 议采用,除非用于不做可靠性检查的业务例如日志。

目前分布式系统都采用流行的RPC框架,也就是提供同步、异步和单向调用三种调用方法。但是,基于前述三种调用方法存在的以上缺点,目前的分布式系统都没有实现支持双十一这种高并发高吞吐量的异步调用功能。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种分布式系统的远程过程调用处理方法和系统,能够实现高并发高吞吐量异步调用。

本发明为解决其技术问题在第一方面提出一种用于分布式系统的远程过程调用处理方法,其特征在于,包括如下步骤:

S1、由客户端接收并提交RPC服务调用请求;

S2、由AOP拦截组件拦截客户端提交的RPC服务调用请求,并在判断所述RPC服务调用请求需要采用异步调用方式来执行时,将所述RPC服务调用请求封装成RPC服务调用消息提交给异步调用组件;

S3、由异步调用组件基于所述RPC服务调用消息执行RPC服务调用,具体包括:

S31、由消息队列生产者接收所述AOP拦截组件提交的RPC服务调用消息,然后发送给分布式消息队列服务器;

S32、由分布式消息队列服务器将所述RPC服务调用消息存储在分布式消息队列中,并根据预设的规则将所述分布式消息队列中的RPC服务调用消息推送给相应的消息队列消费者;

S33、由消息队列消费者根据所述RPC服务调用消息进行RPC服务调用。

根据本发明第一方面的一个实施例中,所述RPC服务调用请求中至少包含目标服务ID、方法、参数和优先级信息;所述步骤S2进一步包括:由所述AOP拦截组件通过校验方法名称中是否含有异步调用标识来判断拦截的RPC服务调用请求是否需要采用异步调用方式来执行。

根据本发明第一方面的一个实施例中,所述步骤S33进一步包括:由消息队列消费者根据RPC服务调用消息中的目标服务ID、方法、参数和优先级 属性动态调用目标服务。

根据本发明第一方面的一个实施例中,所述步骤S31进一步包括:所述消息队列生产者在将RPC服务调用消息成功发送给分布式消息队列服务器后立即返回响应给AOP拦截组件,进而返回响应至客户端以由客户端释放相关资源。

根据本发明第一方面的一个实施例中,所述步骤S2进一步包括:在AOP拦截组件判断所述RPC服务调用请求不需要采用异步调用方式来执行时,以同步调用方式直接调用目标服务。

本发明为解决其技术问题在第二方面提出一种用于分布式系统的远程过程调用处理系统,包括客户端、AOP拦截组件和异步调用组件,其中:

客户端用于接收并提交RPC服务调用请求;

AOP拦截组件用于拦截客户端提交的RPC服务调用请求,并在判断所述RPC服务调用请求需要采用异步调用方式来执行时,将所述RPC服务调用请求封装成RPC服务调用消息提交给异步调用组件;

异步调用组件用于基于所述RPC服务调用消息执行RPC服务调用,进一步包括消息队列生产者、分布式消息队列服务器和消息队列消费者,其中:

消息队列生产者用于接收所述AOP拦截组件提交的RPC服务调用消息,然后发送给分布式消息队列服务器;

分布式消息队列服务器用于将所述RPC服务调用消息存储在分布式消息队列中,并根据预设的规则将所述分布式消息队列中的RPC服务调用消息推送给相应的消息队列消费者;

消息队列消费者用于根据所述RPC服务调用消息进行RPC服务调用。

根据本发明第二方面的一个实施例中,所述RPC服务调用请求中至少包含目标服务ID、方法、参数和优先级信息;所述AOP拦截组件进一步通过校验方法名称中是否含有异步调用标识来判断拦截的RPC服务调用请求是否需要采用异步调用方式来执行。

根据本发明第二方面的一个实施例中,所述消息队列消费者根据RPC服务调用消息中的目标服务ID、方法、参数和优先级属性动态调用目标服务。

根据本发明第二方面的一个实施例中,所述消息队列生产者在将RPC服务调用消息成功发送给分布式消息队列服务器后立即返回响应给AOP拦截组件,进而返回响应至客户端以由客户端释放相关资源。

根据本发明第二方面的一个实施例中,所述AOP拦截组件在判断所述RPC服务调用请求不需要采用异步调用方式来执行时,以同步调用方式直接调用目标服务。

本发明的用于分布式系统的远程过程调用处理方法和系统,在原有RPC框架基础上,通过AOP拦截技术对RPC服务调用进行拦截,调用整合了RPC与消息队列(MQ)的异步调用组件实现异步调用,从而实现了集群消费和分布式RPC的深度集成,支持MQ生产者和MQ消费者的水平扩展,从而能够实现高并发高吞吐量异步调用功能。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是本发明一个实施例的用于分布式系统的远程过程调用处理方法的流程图;

图2是本发明一个实施例的用于分布式系统的远程过程调用处理系统的逻辑结构图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明提出了支持高并发高吞吐量的RPC框架的概念,整合了RPC和消息队列,在原有RPC框架提供的同步调用、异步调用、单向调用三个调用方式基础上,增加一个支持高并发高吞吐量的异步调用方式,从而实现高并发高吞吐量的异步调用RPC框架。此框架的优势是不需要做任何基础架构和系统功能代码的调整,类似Spring开发框架一样,提供简单好用的API和配置, 而不是系统单独学习其他框架,方便业务开发者,提高开发效率。

图1示出了根据本发明一个实施例的用于分布式系统的远程过程调用处理方法100的流程图。如图1所示,该用于分布式系统的远程过程调用处理方法100包括如下步骤:

步骤S110中,由客户端接收并提交RPC服务调用请求。用户向客户端发送RPC服务调用请求,该RPC服务调用请求中可包含目标服务ID、方法、参数、优先级等相关信息。然后客户端向RPC服务集群中的目标服务提交该RPC服务调用请求。

然后步骤S120中,由AOP拦截组件拦截客户端提交的RPC服务调用请求,并在判断所述RPC服务调用请求需要采用异步调用方式来执行时,将所述RPC服务调用请求封装成RPC服务调用消息提交给异步调用组件。

AOP是目前JAVA比较流行的面向切面编程的技术,它在不改变原有代码逻辑方式的情况下增加相应的代码逻辑。如通过JAVA的动态代理实现AOP,所有RPC服务的接口类都由动态代理托管,在调用RPC服务时,必然会走到动态代理中,所以就能轻松拦截接口方法。AOP拦截组件在拦截RPC服务调用请求之后,可通过校验方法名称中是否含有异步调用标识来判断拦截的RPC服务调用请求是否需要采用异步调用方式来执行。这是因为在RPC方法定义中,提供了异步调用标识例如“async”字符前缀,然后AOP拦截组件拦截到RPC服务调用请求后,可判断其RPC方法名称是否具有“async”字符前缀。如果有“async”字符前缀就采用异步调用方式,AOP拦截组件将该RPC服务调用请求封装成RPC服务调用消息,然后以客户端的方式提交给异步调用组件。如果没有“async”字符前缀,则走普通的同步调用方式直接调用目标服务。

随后步骤S130中,由异步调用组件基于所述RPC服务调用消息执行RPC服务调用。异步调用组件基于消费者与生产者模式实现,负责接收RPC服务调用消息,并消费RPC服务调用消息(即执行RPC服务调用)。该步骤S130具体包括:

步骤S131中,由消息队列生产者接收AOP拦截组件提交的RPC服务调 用消息,然后发送给分布式消息队列服务器。消息队列生产者在发送成功后立返回响应给AOP拦截组件,进而由AOP拦截组件将该响应返回给客户端,客户端的整个调用过程就结束,相关资源(例如连接、内存等资源)被释放。

随后步骤S132中,由分布式消息队列服务器将消息队列生产者提交的RPC服务调用消息存储在分布式消息队列中,并根据预设的规则将所述分布式消息队列中的RPC服务调用消息推送给相应的消息队列消费者。

随后步骤S133中,由消息队列消费者根据所述RPC服务调用消息进行RPC服务调用。消息队列消费者收到RPC服务调用消息后,可根据据RPC服务调用消息中的目标服务ID、方法、参数和优先级属性动态调用目标服务,完成一次RPC服务调用。如果调用出现异常,还可以指定是否重试调用,并可设置重试调用的次数和间隔时间。基于优先级属性执行RPC服务调用,可以保障关键业务服务能得到绿色通过,提高关键业务服务的执行效率,而非关键业务可以降低优先级,降低系统资源的使用,保障关键业务服务的执行。消息队列消费者执行目标服务调用成功后,返回执行结果给分布式消息队列服务器,再通过异步通知客户端执行结果。

基于以上所介绍的用于分布式系统的远程过程调用方法,本发明还提出一种用于分布式系统的远程过程调用系统。图2示出了根据本发明一个实施例的用于分布式系统的远程过程调用系统200的逻辑结构图。如图2所示,该系统200包括客户端210、AOP拦截组件220和异步调用组件230。其中,客户端210用于接收用户的RPC服务调用请求并向PRC服务集群300中的目标服务310提交该RPC服务调用请求。用户向客户端发送的RPC服务调用请求中可包含目标服务ID、方法、参数、优先级等相关信息。AOP拦截组件220用于拦截客户端210提交的RPC服务调用请求。AOP拦截组件220还判断所拦截的RPC服务调用请求是否需要采用异步调用方式来执行。在RPC方法定义中,提供了异步调用标识例如“async”字符前缀,因此AOP拦截组件220可通过校验方法名称中是否含有异步调用标识如“async”字符前缀来判断该RPC服务调用请求是否需要采用异步调用方式来执行。如果有“async”字符前缀就采用异步调用方式,AOP拦截组件220进一步将该RPC服务调用请求封装成 RPC服务调用消息,然后以客户端的方式提交给异步调用组件230。如果没有“async”字符前缀,则走普通的同步调用方式直接调用目标服务310。

异步调用组件230用于基于AOP拦截组件220提交的RPC服务调用消息执行RPC服务调用。具体如图2所示,异步调用组件230基于消费者与生产者模式实现,进一步包括消息队列生产者231、分布式消息队列服务器232和消息队列消费者233。其中,消息队列生产者231用于接收AOP拦截组件220提交的RPC服务调用消息,然后发送给分布式消息队列服务器232。消息队列生产者231在消息发送成功后立返回响应给AOP拦截组件220,进而由AOP拦截组件220将该响应返回给客户端210,客户端210的整个调用过程就结束,相关资源(例如连接、内存等资源)被释放。分布式消息队列服务器232中维护有多个分布式消息队列,用于按预设的规则存储消息队列生产者231提交的RPC服务调用消息。分布式消息队列服务器232还用于根据预设的规则将分布式消息队列中的RPC服务调用消息推送给相应的消息队列消费者233。消息队列消费者233用于消费RPC服务调用消息,即根据RPC服务调用消息进行RPC服务调用。消息队列消费者233收到RPC服务调用消息后,可根据RPC服务调用消息中的目标服务ID、方法、参数和优先级属性动态调用目标服务。

图2所示的实施例中,异步调用组件230中示出了两个消息队列生产者、三个消息队列和三个消息队列消费者,显然,这仅仅是一个具体示例。根据支持高并发高吞吐量异步调用的实际需求,本发明的处理系统可以对消息队列生产者231、消息队列消费者232以及分布式消息队列服务器232内维持的消息队列进行水平扩展,以提高消息生产或消费效率,从而提高处理能力,以满足高并发高吞吐量业务下的伸缩扩容支持。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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