分布式中间件的实时防护系统、方法及计算机可读存储介质与流程

文档序号:32480675发布日期:2022-12-09 22:20阅读:75来源:国知局
分布式中间件的实时防护系统、方法及计算机可读存储介质与流程

1.本发明属于通信技术领域,特别是涉及一种分布式中间件的实时防护系统、方法及计算机可读存储介质。


背景技术:

2.随着互联网技术的飞速发展,软件的架构也变得越来越复杂。为了解决应用之间的异步、解耦、流量削峰等问题,通常会在应用之间引入消息中间件。但是随着业务的飞速增长及用户量的激增,不同的应用每时每刻都会产生大量的消息,面对这些海量数据,如果不对数据消费速度进行控制,极有可能导致消费服务及下游服务崩溃,从而引发灾难性的后果。因此,如何平滑地消费这些消息,确保服务的安全及稳定就变成了一个亟需解决的问题。
3.近年来,消息中间件都在进行不断的迭代,增加了各种各样的新特性,以阿里开源的rocketmq为例,为了迎接云原生时代的新挑战,在5.0的开源版本中做了很多的技术升级。第一个特性就是全面异步化,更换了客户端和服务端的通信协议。第二个特性,全链路tracing在消息轨迹的监测中重新设计了span拓扑模型,此外还提供了准确多样的metrics、规范化的日志logging等等。
4.这些新特性解决的都是mq服务本身的问题,对于应用如何平滑地消费数据这个问题一直都没有解决。现有的流控技术通常都是在应用中通过硬编码的方式限制单机的速度,只能做到单机的流控。在分布式场景下,应用的实例是随时变化的,可能会增加应用实例也可能减少应用实例。在增加实例的情况下,虽然保护了当前应用不会出问题,但是下游服务的流量将会增加,此时会有一定的风险导致下游服务故障。在减少应用实例的情况下,虽然能够保证消费服务及下游服务的稳定,但是整个集群的消费速度是在不断降低的,这会导致消息的延时。所以这种单机流控的方式,在分布式环境下会有很多问题,不能从根本上解决中间件的流控问题。
5.因此,如何提供一种分布式中间件的实时防护系统、方法及计算机可读存储介质,以解决现有技术无法解决消息中间件的精准流控等问题,实已成为本领域技术人员亟待解决的技术问题。


技术实现要素:

6.鉴于以上所述现有技术的缺点,本发明的目的在于提供一种分布式中间件的实时防护系统、方法及计算机可读存储介质,用于解决现有技术消息中间件的精准流控的问题。
7.为实现上述目的及其他相关目的,本发明一方面提供一种分布式中间件的实时防护系统,包括:分布式键值存储集群,用于存储流控配置策略,并予以下发;消费者集群,与所述分布式键值存储集群连接;其中,所述消费者集群包括至少一消费者,所述消费者配置有流控模块;所述流控模块包括:监听单元,用于待所述流控模块启动后,监听所述分布式键值存储集群下发的流控配置策略,当监听到所述流控配置策略发生变化时,解析该流控
配置策略的数据变化;消费者启动单元,用于在所述流控配置策略发生变化时,启动所述消费者,并于所述消费者中获取所述消费者的消费配置信息;限流管理单元,用于依据所述消费配置信息启动限流调控策略;流量控制单元,用于根据所述限流调控策略对所述消费配置信息进行限流调控。
8.于本发明的一实施例中,所述流控配置策略的数据变化包括待消费信息的流量总量的变化;所述消费配置信息包括待消费信息、消费主题及消费组信息。
9.于本发明的一实施例中,所述限流调控策略为依据所述消费主题拉取对应的消息队列,产生通过所述消息队列的限流阈值的策略;当待消费信息的流量小于等于所述限流阈值时,所述流量控制单元直接发起所述待消费信息;当待消费信息的流量大于所述限流阈值时,所述流量控制单元拒绝所述待消费信息,将所述待消费信心放入延迟队列。
10.于本发明的一实施例中,所述限流调控策略包括均匀队列分配策略;启动所述均匀队列分配策略时,所述限流管理单元拉取与所述消费主题对应的消息队列,对所述消息队列的进行计数,并依据所述消费组信息,将所有消息队列均匀分配给不同消费者;计算通过每个消息队列的第一限流阈值;所述第一限流阈值为启动所述均匀队列分配策略形成的限流调控的结果。
11.于本发明的一实施例中,每个消息队列的第一限流阈值等于待消费信息的流量总量除以消息队列的队数。
12.于本发明的一实施例中,所述限流调控策略包括权重队列分配策略;启动所述权重队列分配策略时,所述限流管理单元拉取与所述消费主题对应的消息队列,基于预先为消息队列配置的权重属性值,计算通过每个消息队列的第二限流阈值;其中,所述第二限流阈值为启动权重队列分配策略形成的限流调控的结果;所述权重属性值用于表示该消息队列的拉取优先级。
13.于本发明的一实施例中,每个消息队列的第二限流阈值的计算公式为:其中,q(i)表示编号为i的消息队列的权重属性值,n为消息队列的数量,t表示待消费信息的流量总量。
14.于本发明的一实施例中,所述流控模块还包括:监控单元,用于监控消费速度。
15.于本发明的一实施例中,所述流控模块以流控插件方式实现;所述流控插件采用字节码方式植入至所述消费者;采用字节码方式植入至所述消费者的过程包括:于所述流控插件中定义两个拦截点,并向虚拟机注册所述拦截点的信息;当所述虚拟机加载所述拦截点的信息时,触发文件加载事件,回调所述流控插件的增强逻辑,并将所述流控插件的增强逻辑植入至所述消费者集群中。
16.本发明另一方面提供一种分布式中间件的实时防护方法,应用于配置有流控插件的消费者集群,所述消费者集群与所述分布式键值存储集群连接;所述分布式键值存储集群,用于存储流控配置策略,并予以下发至所述消费者集群;所述消费者集群包括至少一消费者,所述消费者配置有流控模块;所述分布式中间件的实时防护方法包括:待所述流控模块启动后,监听所述分布式键值存储集群下发的流控配置策略,当监听到所述流控配置策略发生变化时,解析该流控配置策略的数据变化;在所述流控配置策略发生变化时,启动所述消费者,并于所述消费者中获取所述消费者的消费配置信息;依据所述消费配置信息启动启动限流调控策略;根据所述限流调控策略对所述消费配置信息进行限流调控。
17.本发明又一方面提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述分布式中间件的实时防护方法。
18.如上所述,本发明的分布式中间件的实时防护系统、方法及计算机可读存储介质,具有以下有益效果:
19.第一,本发明通过限流调控策略在分布式场景下可以精准调控流量阈值;
20.第二,本发明能够做到流控策略的实时生效;
21.第三,与业务逻辑解耦,本发明通过采用字节码技术在无侵入地情况下加载流控逻辑;
22.第四,本发明支持自定义队列分配策略。
附图说明
23.图1显示为本发明应用于一通信架构的结构示意图。
24.图2显示为本发明的分布式中间件的实时防护系统于一实施例中结构示意图。
25.图3显示为本发明的流控插件于一实施例中的原理结构示意图。
26.图4显示为本发明的均匀队列分配策略的应用示例图。
27.图5显示为本发明的权重队列分配策略的应用示例图。
28.图6显示为本发明的采用分布式中间件的实时防护系统于不同时间段的消费速度监控示例图。
29.图7a显示为本发明的未加入流控插件的cpu使用情况监控图。
30.图7b显示为本发明的加入流控插件的cpu使用情况监控图。
31.图8a显示为本发明的未接入插件时消费100万条消息的内存使用示意图。
32.图8b显示为本发明的接入插件时消费100万条消息的内存使用示意图。
33.图9a显示为本发明的未接入流控插件的cpu使用情况示意图。
34.图9b显示为本发明的接入流控插件的cpu使用情况示意图。
35.图10a显示为本发明的未接入流控插件的内存使用情况示意图。
36.图10b显示为本发明的接入流控插件的内存使用情况示意图。
37.图11分布式中间件的实时防护方法于一实施例中的流程示意图。
38.元件标号说明
[0039]2ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
分布式中间件的实时防护系统
[0040]3ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
分布式键值存储集群
[0041]4ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
消费者集群
[0042]
41
ꢀꢀꢀꢀꢀꢀꢀꢀ
消费者
[0043]
42
ꢀꢀꢀꢀꢀꢀꢀꢀ
流控模块
[0044]
421
ꢀꢀꢀꢀꢀꢀꢀ
监听单元
[0045]
422
ꢀꢀꢀꢀꢀꢀꢀ
消费者启动单元
[0046]
423
ꢀꢀꢀꢀꢀꢀꢀ
限流管理单元
[0047]
424
ꢀꢀꢀꢀꢀꢀꢀ
流量控制单元
[0048]
425
ꢀꢀꢀꢀꢀꢀꢀ
监控模块
[0049]
s11~s14
ꢀꢀ
步骤
具体实施方式
[0050]
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
[0051]
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0052]
实施例一
[0053]
本技术提供一种分布式中间件的实时防护系统,包括:
[0054]
分布式键值存储集群,用于存储流控配置策略,并予以下发;
[0055]
消费者集群,与所述分布式键值存储集群连接;其中,所述消费者集群包括至少一消费者,所述消费者配置有流控模块;所述流控模块包括:
[0056]
监听单元,用于待所述流控模块启动后,监听所述分布式键值存储集群下发的流控配置策略,当监听到所述流控配置策略发生变化时,解析该流控配置策略的数据变化;
[0057]
消费者启动单元,用于在所述流控配置策略发生变化时,启动所述消费者,并于所述消费者中获取所述消费者的消费配置信息;
[0058]
限流管理单元,用于依据所述消费配置信息启动限流调控策略;
[0059]
流量控制单元,用于根据所述限流调控策略对所述消费配置信息进行限流调控。
[0060]
以下将结合图示对本实施例所提供的分布式中间件的实时防护系统进行详细描述。本实施例所述分布式中间件的实时防护系统应用于如图1所示的通信架构中。所述通信架构包括生产者集群(producer集群)、名称服务器集群(nameserver集群)、控制器集群(broker集群)、消费者集群(consumer集群)及分布式键值存储集群(etcd集群)。其中,消息由生产者集群产生通过mq路由策略进行消息投递,最终会存储在broker集群上,下游消费者集群会根据flow-control-plugin流控模块的策略实时准确地消费一定量的消息。生产者集群与名称服务器集群中的其中一个节点(随机选择)建立长连接,定期从名称服务器集群获取消费主题路由信息,通过mq的负载均衡模块选择相应的控制器集群队列进行消息投递。名称服务器集群是一个主题路由注册中心,支持控制器的动态注册与发现。控制器主要负责消息的存储、投递和查询以及保证服务高可用,每个控制器与名称服务器集群中的所有节点建立长连接,定时注册主题信息到所有名称服务节点。消费者集群与名称服务器集群中的其中一个节点(随机选择)建立长连接,定期从名称服务器集群获取主题路由信息通过推或者拉的模式进行消息消费。
[0061]
请参阅图2,显示为分布式中间件的实时防护系统于一实施例中结构示意图。如图2所示,所述分布式中间件的实时防护系统2包括分布式键值存储集群3及与所述分布式键值存储集群连接的消费者集群4。所述消费者集群4包括至少一消费者41,例如,3个消费者41a,41b,41c,每一所述消费者配置有流控模块42(所述流控模块42于实际应用中以流控插件,flow-control-plugin方式实现)。
[0062]
在本实施例中,所述分布式键值存储集群3用于存储流控配置策略,并予以下发及流控插件节点的互联。所述流控插件42用于负责流控策略的解析、流控阈值的分配、消息的限流。请参阅图3,显示为流控模块于一实施例中的原理结构示意图。如图3所示,所述流控模块42包括监听单元421、消费者启动单元422、限流管理单元423、流量控制单元424及监控模块425。
[0063]
在本实施例中,所述监听单元421用于待所述流控插件启动后,监听所述分布式键值存储集群下发的流控配置策略,当监听到所述流控配置策略发生变化时,解析该流控配置策略的数据变化。在本实施例中,所述流控配置策略的数据变化包括待消费信息的流量总量的变化。
[0064]
所述消费者启动单元422用于在所述流控配置策略发生变化时,监听所述消费者的启动,当监听到消费者启动后,获取该消费者的消费配置信息。在本实施例中,所述消费配置信息包括待消费信息、消费信息的起始点、消费信息的终点、消费主题及消费组信息等等。在实际应用中,所述待消费消息可以为订单信息,业务信息等。
[0065]
所述限流管理单元423用于调用并初始化与之关联的限流器,依据所述消费配置信息启动限流调控策略。在本实施例中,每一消费者关联一限流器,所述限流器可产生限流调控策略。所述限流调控策略为依据所述消费主题拉取对应的消息队列,产生通过所述消息队列的限流阈值的策略,包括均匀队列分配策略或权重队列分配策略等。
[0066]
所述流量控制单元424用于根据所述限流调控策略对所述消费配置信息进行限流调控,并依据限流调控的结果,进行流量分配。其中,当待消费信息的流量小于等于所述限流阈值时,所述流量控制单元直接发起所述待消费信息;当待消费信息的流量大于所述限流阈值时,所述流量控制单元拒绝所述待消费信息,将所述待消费信心放入延迟队列。
[0067]
具体地,所述限流管理单元423启动所述均匀队列分配策略时,拉取与所述消费主题对应的消息队列,对所述消息队列的进行计数,并依据所述消费组信息,将所有消息队列均匀分配给不同消费者;计算通过每个消息队列的第一限流阈值。若待消费信息的流量小于等于所述第一限流阈值,所述流量控制单元424则直接发起待消费信息;若大于所述第一限流阈值,所述流量控制单元424则拒绝此待消费信息,将此待消费信息放入延迟队列。在本实施例中,所述第一限流阈值为启动所述均匀队列分配策略形成的限流调控的结果。
[0068]
请参阅图4,显示为均匀队列分配策略的应用示例图。如图4所示,所述限流管理单元423拉取与所述消费主题对应的消息队列有10个,三个消费者c1,c2及c3,fc1,fc2,fc3为均匀队列分配策略。
[0069]
在所述均匀队列分配策略下,消息队列的分配如图4所示,消费者c1分得4个消息队列、消费者c2分得3个消息队列、消费者c3分得3个消息队列。采用均匀队列分配策略的流量分配过程如下:
[0070]
首先,拉取当前消费主图对应的消息队列,并将队列数count计数为10;
[0071]
其次,为了使队列分配到的限流阈值一致,对上一步拉取到的消息队列进行排序(排序是为了让各客户端都有一致的分配顺序)。
[0072]
然后,在计算通过每个消息队列的第一限流阈值。其中,每个消息队列的第一限流阈值等于待消费信息的流量总量除以消息队列的队数,即threshold1=sumthreshold/count。由于整除的问题,最后第一限流阈值的分配结果为threshold或者threshold+1。为
了让不同队列消费进度稳定,需注意消息队列的轮换。
[0073]
最后,若待消费信息的流量小于等于所述第一限流阈值,则直接发起待消费信息,若大于所述第一限流阈值,则拒绝此待消费信息,将此待消费信息放入延迟队列。
[0074]
通过所述均匀队列分配策略的分配方式,可以保证在消费者实例增加或减少的场景下仍然可以保证整个限流阈值的稳定。
[0075]
具体地,所述限流管理单元423启动所述权重队列分配策略时,拉取当前消费主图对应的消息队列,基于预先为消息队列配置的权重属性值,计算通过每个消息队列的第二限流阈值;若待消费信息的流量小于等于所述第二限流阈值,流量控制单元424则直接发起待消费信息,若大于所述第二限流阈值,流量控制单元424则拒绝此次请求,将此次请求放入延迟队列。其中,所述第二限流阈值为启动权重队列分配策略形成的限流调控的结果;所述权重属性值用于表示该消息队列的拉取优先级。
[0076]
在本实施例中,每个消息队列的第二限流阈值的计算公式为:其中,q(i)表示编号为i的消息队列的权重属性值,n为消息队列的数量,t表示待消费信息的流量总量。
[0077]
请参阅图5,显示为权重队列分配策略的应用示例图。如图5所示,所述限流管理单元423拉取与所述消费主题对应的消息队列有10个,三个消费者c1,c2及c3,fc1,fc2,fc3为权重队列分配策略。继续参阅图5,每一个消息队列加入权重属性值,即左边是的队列编号,右边是该消息队列的权重属性值,0号队列权重为5,1号队列权重为10,...,9号队列权重值为10。采用权重队列分配策略的流量分配过程如下:
[0078]
根据公式计算每个消息队列的第二限流阈值。假设t为100,以编号0的队列为例,带入公式最终得到0号队列的阈值为5,表示每秒从0号队列拉取5条消息,依次类推,最后的9号队列拉取10条消息。
[0079]
在本实施例中,采用权重队列分配策略进行流控可以满足各种自定义的需求,也可以直接控制阈值的大小,从而控制每个队列的消费速度。
[0080]
所述监控模块425用于监控消费速度。
[0081]
具体地,所述监控模块425根据一时间段内接收的待消费信息的流量总量,计算得到消费速度,以此实现消费速度的监控。
[0082]
请参阅图6,显示为采用分布式中间件的实时防护系统于不同时间段的消费速度监控示例图。如图6所示,消费者在不同时间段的消费速度监控,整个过程共进行了3次流控调整分别是60、6000、12000,每个阶段的调整都会经过攀升和稳定两个阶段,在稳定阶段可以看出,三次调整的阈值,最终都会精准地停留在各自的阈值范围内,达到了精准控制的目标。当流控阈值变化时,消费速度图会立即出现攀升阶段,可以说明流控策略是实时下发的,同样达到了实时下发的目标。因此,图6可以证明本实施例的限流技术确实做到了精准实时。
[0083]
在本实施例中,所述流控模块42以流控插件方式实现,所述流控插件采用字节码方式植入至所述消费者,以实现插件的无侵入运行。
[0084]
具体地,所述流控插件采用字节码方式植入至所述消费者的过程包括:于所述流控插件中定义两个拦截点,并向虚拟机注册所述拦截点的信息;当所述虚拟机加载所述拦
截点的信息时,触发文件加载事件,回调所述流控插件的增强逻辑,并将所述流控插件的增强逻辑植入至所述消费者集群中。
[0085]
本实施例针对应用进行了防护效果对比实验,同样消费100万消息数据,未加入流控插件与加入流控插件的效果如下:
[0086]
(1)对cpu的保护。
[0087]
请参阅图7a和图7b,分别显示为未加入流控插件/加入流控插件的cpu使用情况监控图。如图7a所示,不接入流控插件的应用cpu达到了90%左右,服务几乎在崩溃边缘。如图7b所示,接入了流控插件同时集群限流设置到了1万的阈值。而接入了限流插件的应用cpu稳定在10%左右,可以保证应用安全地消费所有的数据。保障了应用的稳定性。
[0088]
(2)对内存的保护
[0089]
请参阅图8a和图8b,分别显示为未接入插件时/接入插件时消费100万条消息的内存使用示意图。如图8b所示,应用接入插件,并将阈值调整到1w时的内存使用情况,未接入流控插件的应用内存达到了2.5g,对于3g系统来说负载已经相当高了,处于崩溃边缘。而接入流控插件的应用内存只消耗了200m左右,应用可以很安全地消费者100w的消息。因此,插件的接入可以有效地保证应用在安全的阈值下,平滑地消费掉消息,当流量激增时,不会将系统打挂。
[0090]
(3)关于未接入流控插件和接入流控插件cpu及内存的对比
[0091]
首先请查阅未接入流控插件和接入流控插件的cpu使用情况,分别如图9a和9b所示。图9a为未安装插件情况下消费100w条消息,cpu使用情况。图9b是安装插件之后同样消费100w条消息,cpu使用情况趋势图。从图9a和图9b对比中中可以明显看出,同样消费100w的数据,整个cpu使用走势一致,可以充分证明插件不会对cpu有任何的损耗。
[0092]
接着请查阅未接入流控插件和接入流控插件的内存的对比,分别如图10a和10b所示。图10a为未安装插件情况下消费100w条消息,内存使用情况趋势。图10b是安装插件后,消费100w条消息内存使用情况趋势图。从图10a和10b对比中可以看出,未使用插件的应用在稳定阶段消耗的内存大约在50m左右,使用插件的应用在稳定阶段消耗的内存大约也是50m左右。从上述对比可以看出,插件对内存的损耗为零。
[0093]
需要说明的是,应理解以上系统的各个模块/单元的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块/单元可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块/单元通过处理元件调用软件的形式实现,部分模块/单元通过硬件的形式实现。例如,x模块/单元可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上x模块/单元的功能。其它模块/单元的实现与之类似。此外这些模块/单元全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块/单元可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
[0094]
例如,以上这些模块/单元可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integrated circuit,简称asic),或,一个或多个微处理器(digital singnal processor,简称dsp),或,一个或者多
个现场可编程门阵列(field programmable gatearray,简称fpga)等。再如,当以上某个模块/单元通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(central processing unit,简称cpu)或其它可以调用程序代码的处理器。再如,这些模块/单元可以集成在一起,以片上系统(system-on-a-chip,简称soc)的形式实现。
[0095]
本实施例所述分布式中间件的实时防护系统,具有以下有益效果:
[0096]
第一,所述分布式中间件的实时防护系统在分布式场景下可以精准调控流量阈值;
[0097]
第二,所述分布式中间件的实时防护系统能够做到流控策略的实时生效;
[0098]
第三,与业务逻辑解耦,所述分布式中间件的实时防护系统在无侵入地情况下加载流控逻辑;
[0099]
第四,所述分布式中间件的实时防护系统支持自定义队列分配策略。
[0100]
实施例二
[0101]
本实施例还提供一种分布式中间件的实时防护方法,应用于配置有流控插件的消费者集群,所述消费者集群与所述分布式键值存储集群连接;所述分布式键值存储集群,用于存储流控配置策略,并予以下发至所述消费者集群;所述消费者集群包括至少一消费者,所述消费者配置有流控模块;所述分布式中间件的实时防护方法包括:
[0102]
待所述流控模块启动后,监听所述分布式键值存储集群下发的流控配置策略,当监听到所述流控配置策略发生变化时,解析该流控配置策略的数据变化;
[0103]
在所述流控配置策略发生变化时,启动所述消费者,并于所述消费者中获取所述消费者的消费配置信息;
[0104]
依据所述消费配置信息启动启动限流调控策略;
[0105]
根据所述限流调控策略对所述消费配置信息进行限流调控。
[0106]
以下将结合图示对本实施例所提供的分布式中间件的实时防护方法进行详细描述。本实施例所述分布式中间件的实时防护方法应用于配置有流控插件的消费者集群,所述消费者集群与所述分布式键值存储集群连接;所述分布式键值存储集群,用于存储流控配置策略,并予以下发至所述消费者集群;所述消费者集群包括至少一消费者,每一所述消费者配置有流控模块。在本实施例中,所述流控模块以流控插件的形式实现,并采用字节码技术为所述消费者配置有流控插件,以实现插件的无侵入运行。
[0107]
具体地,通过于所述流控模块中定义两个拦截点,并向虚拟机注册所述拦截点的信息;当所述虚拟机加载所述拦截点的信息时,触发文件加载事件,回调所述流控插件的增强逻辑,并将所述流控插件的增强逻辑植入至所述消费者集群中。
[0108]
请参阅图11,显示为分布式中间件的实时防护方法于一实施例中的流程示意图。如图11所示,所述分布式中间件的实时防护方法具体包括以下步骤:
[0109]
s11,待所述流控插件启动后,监听所述分布式键值存储集群下发的流控配置策略,当监听到所述流控配置策略发生变化时,解析该流控配置策略的数据变化。在本实施例中,所述流控配置策略的数据变化包括待消费信息的流量总量的变化。
[0110]
s12,在所述流控配置策略发生变化时,监听所述消费者的启动,当监听到消费者启动后,获取该消费者的消费配置信息。在本实施例中,所述消费配置信息包括待消费信息、消费信息的起始点、消费信息的终点、消费主题及消费组信息等等。在实际应用中,所述
待消费消息可以为订单信息,业务信息等。
[0111]
s13,调用并初始化与之关联的限流器,依据所述消费配置信息启动限流调控策略。在本实施例中,所述限流调控策略为依据所述消费主题拉取对应的消息队列,产生通过所述消息队列的限流阈值的策略,所述限流调控策略包括均匀队列分配策略或权重队列分配策略等。
[0112]
具体地,所述s13包括启动所述均匀队列分配策略时,拉取与所述消费主题对应的消息队列,对所述消息队列的进行计数,并依据所述消费组信息,将所有消息队列均匀分配给不同消费者;计算通过每个消息队列的第一限流阈值。在本实施例中,所述第一限流阈值为启动所述均匀队列分配策略形成的限流调控的结果。
[0113]
具体地,所述s13包括启动所述权重队列分配策略时,基于预先为消息队列配置的权重属性值,计算通过每个消息队列的第二限流阈值。其中,所述第二限流阈值为启动权重队列分配策略形成的限流调控的结果;所述权重属性值用于表示该消息队列的拉取优先级
[0114]
s14,根据所述限流调控策略对所述消费配置信息进行限流调控,并依据限流调控的结果,进行流量分配。其中,当待消费信息的流量小于等于所述限流阈值时,所述流量控制单元直接发起所述待消费信息;当待消费信息的流量大于所述限流阈值时,所述流量控制单元拒绝所述待消费信息,将所述待消费信心放入延迟队列。
[0115]
具体地,所述s14包括启动所述均匀队列分配策略时,若待消费信息的流量小于等于所述第一限流阈值,则直接发起待消费信息,若大于所述第一限流阈值,则拒绝此次请求,将此次请求放入延迟队列。通过所述均匀队列分配策略的分配方式,可以保证在消费者实例增加或减少的场景下仍然可以保证整个限流阈值的稳定。
[0116]
具体地,所述s14还包括启动所述权重队列分配策略时,若待消费信息的流量小于等于所述第二限流阈值,则直接发起待消费信息,若大于所述第二限流阈值,则拒绝此次请求,将此次请求放入延迟队列。其中,所述第二限流阈值为启动权重队列分配策略形成的限流调控的结果;所述权重属性值用于表示该消息队列的拉取优先级。
[0117]
在本实施例中,采用权重队列分配策略进行流控可以满足各种自定义的需求,也可以直接控制阈值的大小,从而控制每个队列的消费速度。
[0118]
s15,监控消费速度。
[0119]
具体地,所述s15包括:根据一时间段内接收的待消费信息的流量总量,计算得到消费速度,以此实现消费速度的监控。
[0120]
本实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如图11所述分布式中间件的实时防护方法。
[0121]
在任何可能的技术细节结合层面,本技术可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本技术的各个方面的计算机可读程序指令。
[0122]
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是(但不限于)电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩
盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
[0123]
这里所描述的计算机可读程序可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。用于执行本技术操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路配置数据或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本技术的各个方面。
[0124]
综上所述,本发明所述分布式中间件的实时防护系统、方法及计算机可读存储介质,具有以下有益效果:
[0125]
第一,本发明通过限流调控策略在分布式场景下可以精准调控流量阈值;
[0126]
第二,本发明能够做到流控策略的实时生效;
[0127]
第三,与业务逻辑解耦,本发明通过采用字节码技术在无侵入地情况下加载流控逻辑;
[0128]
第四,本发明支持自定义队列分配策略。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
[0129]
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1