发明内容
本发明的主要目的在于提出一种服务调用流量控制方法及装置,旨在解决相关技术中相关技术中服务调用数据量比较大的情况下影响总线上其它服务的正常调用和运行的问题。
为实现上述目的,本发明实施例提供的一种服务调用流量控制方法,所述方法包括:接收到网络服务器发送的服务调用请求,其中,所述服务调用请求携带有待调用服务的数据信息;根据所述服务调用请求计算所述数据信息的数据量;根据所述数据信息的数据量以及本地缓存服务器和/或分布式缓存服务器中的流量控制策略对本次服务调用进行流量控制。
优选地,根据所述数据信息的数据量以及本地缓存服务器和/或分布式缓存服务器中的流量控制策略对本次服务调用进行流量控制包括:从所述本地缓存服务器中查询并获取所述待调用服务的调用次数和数据量;在所述本地缓存服务器中判断所述数据信息的数据量是否满足所述流量控制策略,在判断结果为是的情况下,拒绝所述服务调用请求;和/或,
在判断结果为否的情况下,根据所述待调用服务的ID信息从分布式缓存数据库中,通过分布式缓存API检索所述ID信息在预定时间区间间隔的服务调用次数和数据量;判断在预定时间区间间隔内所述数据信息的数据量是否满足所述流量控制策略,在判断结果为是的情况下,拒绝所述服务调用请求。
优选地,在判断在预定时间区间间隔内所述数据信息的数据量是否满足所述流量控制策略之后,所述方法还包括:在判断结果为否的情况下,判断服务调用的当前时间是否在所述预定时间区间间隔内;在判断结果为是的情况下,将本次服务调用的次数和所述数据信息的数据量累加到所述预定时间区间间隔的服务调用次数和数据量中,更新所述分布式缓存数据;在判断结果为否的情况下,将所述数据信息的数据量更新到所述分布式缓存数据中。
优选地,所述方法还包括:为所述分布式缓存服务器设置并发锁机制。
优选地,所述方法还包括:在系统启动后,将流量控制策略同步到本地缓存服务器和分布式缓存服务器中。
优选地,所述方法还包括:在服务管控平台对流量控制策略进行修改后,将修改后的所述流量控制策略更新到所述本地缓存服务器和所述分布式缓存服务器中。
优选地,所述方法还包括:在预定时间之后将所述本地缓存服务器和所述分布式缓存服务器中的所述流量控制策略进行清零。
根据本发明实施例的另一方面,还提供了一种服务调用流量控制装置,所述装置包括:
接收模块,用于接收到网络服务器发送的服务调用请求,其中,所述服务调用请求携带有待调用服务的数据信息;
计算模块,用于根据所述服务调用请求计算所述数据信息的数据量;
流量控制模块,用于根据所述数据信息的数据量以及本地缓存服务器和/或分布式缓存服务器中的流量控制策略对本次服务调用进行流量控制。
优选地,所述流量控制模块包括:
获取单元,用于从所述本地缓存服务器中查询并获取所述待调用服务的调用次数和数据量;
第一判断单元,用于在所述本地缓存服务器中判断所述数据信息的数据量是否满足所述流量控制策略,在判断结果为是的情况下,拒绝所述服务调用请求;和/或,
第二判断单元,用于在判断结果为否的情况下,根据所述待调用服务的ID信息从分布式缓存数据库中,通过分布式缓存API检索所述ID信息在预定时间区间间隔的服务调用次数和数据量;判断在预定时间区间间隔内所述数据信息的数据量是否满足所述流量控制策略,在判断结果为是的情况下,拒绝所述服务调用请求。
优选地,所述第二判断单元还用于,
在判断结果为否的情况下,判断服务调用的当前时间是否在所述预定时间区间间隔内;
在判断结果为是的情况下,将本次服务调用的次数和所述数据信息的数据量累加到所述预定时间区间间隔的服务调用次数和数据量中,更新所述分布式缓存数据;
在判断结果为否的情况下,将所述数据信息的数据量更新到所述分布式缓存数据中。
通过本发明实施例,接收到网络服务器发送的服务调用请求,其中,所述服务调用请求携带有待调用服务的数据信息;根据所述服务调用请求计算所述数据信息的数据量;根据所述数据信息的数据量以及本地缓存服务器和/或分布式缓存服务器中的流量控制策略对本次服务调用进行流量控制,解决了相关技术中服务调用数据量比较大的情况下影响总线上其它服务的正常调用和运行的问题,实现了服务调用并发量、服务调用数据量的双重流量控制。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
现在将参考附图描述实现本发明各个实施例的移动终端。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,"模块"与"部件"可以混合地使用。
本发明实施例是在ESB中间件产品中增加了服务流量控制插件,同时结合分布式缓存来实现对服务的流量控制。该发明同传统流量控制技术的差别点在于可以单独针对每一个服务自定义流量控制策略,对于流控策略支持服务单位时间的并发数,服务单位时间的调用数据量两种模式。同时具体的单位时间也可以在流量控制策略中进行定义和配置。通过引入流量控制插件,可以很好的解决当前服务调用中出现的大并发和各种非法异常调用,当触发了流量控制策略后服务调用请求将直接被拒绝(直到下一个时间间隔生效),从而保证了ESB总线平台整体的高效运行。基于流量控制策略功能,我们还可以对服务本身的SLA等级和服务优先级进行分离,对于高优先级的服务给予宽松的流控目标,而对于低优先级服务给予更加严格的流控策略以减少对ESB总线资源的占用。
基于上述目的,本发明实施例提供了一种服务调用控制方法,图1是根据本发明实施例的服务调用流量控制方法的流程图,如图1所示,该方法包括:
步骤S102,接收到网络服务器发送的服务调用请求,其中,该服务调用请求携带有待调用服务的数据信息;
步骤S104,根据该服务调用请求计算该数据信息的数据量;
步骤S106,根据该数据信息的数据量以及本地缓存服务器和/或分布式缓存服务器中的流量控制策略对本次服务调用进行流量控制。
通过上述步骤,接收到网络服务器发送的服务调用请求,其中,该服务调用请求携带有待调用服务的数据信息;根据该服务调用请求计算该数据信息的数据量;根据该数据信息的数据量以及本地缓存服务器和/或分布式缓存服务器中的流量控制策略对本次服务调用进行流量控制,解决了相关技术中服务调用数据量比较大的情况下影响总线上其它服务的正常调用和运行的问题,实现了服务调用并发量、服务调用数据量的双重流量控制。
优选地,根据该数据信息的数据量以及本地缓存服务器和/或分布式缓存服务器中的流量控制策略对本次服务调用进行流量控制可以包括:从该本地缓存服务器中查询并获取该待调用服务的调用次数和数据量;在该本地缓存服务器中判断该数据信息的数据量是否满足该流量控制策略,在判断结果为是的情况下,拒绝该服务调用请求;和/或,在判断结果为否的情况下,根据该待调用服务的ID信息从分布式缓存数据库中,通过分布式缓存API检索该ID信息在预定时间区间间隔的服务调用次数和数据量;判断在预定时间区间间隔内该数据信息的数据量是否满足该流量控制策略,在判断结果为是的情况下,拒绝该服务调用请求。实现了服务调用并发量,服务调用数据量的双重流量控制,之间可以是与关系也可以是或关系,可以在流量控制策略中灵活配置。
优选地,在判断结果为否的情况下,判断服务调用的当前时间是否在该预定时间区间间隔内;在判断结果为是的情况下,将本次服务调用的次数和该数据信息的数据量累加到该预定时间区间间隔的服务调用次数和数据量中,更新该分布式缓存数据;在判断结果为否的情况下,将该数据信息的数据量更新到该分布式缓存数据中。需要说明的是,可以配置任意指定时间区间间隔的流量控制,即可以是30秒,1分钟或1小时,在ESB实施过程中可以灵活配置时间间隔。
优选地,由于需要支持ESB集群,可能会出现同时获取分布式缓存数据后在进行缓存更新时候冲掉其它App Server的数据场景。在该模式下,还可以为该分布式缓存服务器设置并发锁机制,可以启用分布式缓存的并发锁机制,即上述流程中的对于分布式缓存读取后对缓存进行锁定以免发生脏读。由于启用并发锁机制会影响到整体服务调用性能,因此对于流量控制策略中可以自定义配置是否启用分布式并发锁机制。建议的方案是在服务调用并发量巨大的时候不启用并发锁机制。
优选地,在系统启动后,将流量控制策略同步到本地缓存服务器和分布式缓存服务器中。进一步的,在服务管控平台对流量控制策略进行修改后,将修改后的该流量控制策略更新到该本地缓存服务器和该分布式缓存服务器中。还可以在预定时间之后将该本地缓存服务器和该分布式缓存服务器中的该流量控制策略进行清零。对于ESB系统启动后,会自动将服务流量控制策略查询到APP Server内存中保存,减少每次流量控制策略判断时候重新访问数据库。当在服务管控平台对服务流量控制策略进行修改后,系统可以实现对已有的内存数据进行刷新,保存流量控制策略的实时性。由于流量控制策略会随着时间推移自动进行历史数据清零,当前服务在某一个时间区间间隔无法调用时,进入到下一个时间间隔由于历史数据已经清除仍然可以发起正常调用。
本发明实施例还提供了一种服务调用流量控制装置,图2是根据本发明实施例的服务调用控制装置的框图,该装置包括:
接收模块22,用于接收到网络服务器发送的服务调用请求,其中,该服务调用请求携带有待调用服务的数据信息;
计算模块24,用于根据该服务调用请求计算该数据信息的数据量;
流量控制模块26,用于根据该数据信息的数据量以及本地缓存服务器和/或分布式缓存服务器中的流量控制策略对本次服务调用进行流量控制。
图3是根据本发明优选实施例的服务调用流量控制装置的框图,如图3所示,流量控制模块26包括:
获取单元32,用于从该本地缓存服务器中查询并获取该待调用服务的调用次数和数据量;
第一判断单元34,用于在该本地缓存服务器中判断该数据信息的数据量是否满足该流量控制策略,在判断结果为是的情况下,拒绝该服务调用请求;和/或,
第二判断单元36,用于在判断结果为否的情况下,根据该待调用服务的ID信息从分布式缓存数据库中,通过分布式缓存API检索该ID信息在预定时间区间间隔的服务调用次数和数据量;判断在预定时间区间间隔内该数据信息的数据量是否满足该流量控制策略,在判断结果为是的情况下,拒绝该服务调用请求。
优选地,该第二判断单元还用于,在判断结果为否的情况下,判断服务调用的当前时间是否在该预定时间区间间隔内;在判断结果为是的情况下,将本次服务调用的次数和该数据信息的数据量累加到该预定时间区间间隔的服务调用次数和数据量中,更新该分布式缓存数据;在判断结果为否的情况下,将该数据信息的数据量更新到该分布式缓存数据中。
下面对本发明实施例进行进一步说明。
图4是根据本发明实施例的服务调用系统的示意图,如图4所示,ESB AppServer接收到Web Service的服务调用请求和数据信息,当获取到请求后再流量控制模块计算本次服务调用的数据量信息。获取App Server本地针对服务的秒级服务调用次数和容量信息数据。对于秒级的流量控制在本地完成,即App Server查询本地缓存获取到该服务秒级的服务调用次数和容量计数器。在本次缓存进行流量控制规则判断,如果满足流量控制策略,则直接拒绝本次访问请求并返回给客户端。如果不满足,App Server根据服务ID信息到分布式缓存数据库通过分布式缓存API检索当前服务ID在制定区间间隔的服务调用次数和容量数据信息。进行时间区间范围内的流量控制规则判断,如果满足则拒绝服务访问,如果不满足,根据当前时间判断服务调用是否在时间区间间隔内。如果在时间区间间隔内,说明该时间区间还在生效,即将本次服务调用的次数和容量数据累加到分布式缓存服务器的数据中,同时更新分布式缓存数据。如果不在时间区间间隔内,说明已经进入到下一个时间区间,即已有历史数据需要清空,仅仅将本次调用数据并发量和容量更新到缓存中。执行正常的服务调用请求处理,并返回给客户端调用结果。
图5是根据本发明实施例的服务调用过程中流量控制的方法流程图,如图5所示,包括:
步骤S501,客户端发起服务调用请求;
步骤S502,ESB APP服务器获取调用服务请求;
步骤S503,ESB APP服务器获取本地内存秒级服务调用次数和容量数据;
步骤S504,ESB APP服务器进行流量规则判断,在判断结果为是的情况下,执行步骤S505,在判断结果为否的情况下,执行步骤S506;
步骤S505,客户端接收ESB APP服务器反馈的拒绝访问信息;
步骤S506,ESB APP服务器根据K值获取分布式缓存中服务的区间调用次数和容量数据;
步骤S507,缓存服务器根据K值获取缓存数据;
步骤S508,ESB APP服务器进行区间流量规则判断,在判断结果为是的情况下,执行步骤S509,在判断结果为否的情况下,执行步骤S510;
步骤S509,客户端接收APP服务器反馈的拒绝访问信息;
步骤S510,ESB APP服务器当前服务调用是否在时间区间间隔内,在判断结果为是的情况下,执行步骤S511,在判断结果为否的情况下,执行步骤S512;
步骤S511,ESB APP服务器累加本次服务调用数据到获取的缓存当前数据中,之后执行步骤S513;
步骤S512,ESB APP服务器在新的时间区间内对已有缓存计数清零;
步骤S513,ESB APP服务器更新分布式缓存库中(即上述的分布式缓存服务器)的当前数据;
步骤S514,分布式缓存服务器将K值更新换当前数据;
步骤S515,ESB APP服务器执行正常服务调用;
步骤S516,客户端接收正常服务调用信息。
通过上述步骤,结合了分布式缓存技术,可以实现在ESB集群环境下的全局控制,对于分布式缓存可以采用Memocached或Reidis各种主流技术实现。由于采用了分布式缓存技术,整个流量控制计算过程全部在内存中计算完成,减少对数据库的访问,实现了流量控制计算中的高性能。同时支持单节点的秒级流量控制,又支持集群化的流量控制,对于秒级的流量控制在App Server的内存中完成。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例该的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。