再谈服务流量控制(9.22)

栏目: Java · 发布时间: 6年前

项目临近上线,因此最近做的最多的事还是服务运行监控和性能分析,也对流量控制做进一步的思考。

首先还是解释下流控的两种场景,即限流和断流。

1. 限流:对于服务请求仍然接收,但是如果你并发量大了就在外面排队,而不是将压力全部传递到ESB。

2. 断流:如果发现大数据,大并发的异常调用则直接进行熔断处理,不允许再进行调用。

具体如何进行限流和断流,一个就是针对消费方系统,一个就是针对具体的服务,当然也可以是消费方+特定服务精确组合进行限流。我们举个例子来说明下这个场景。

比如在你家附近有5个小区,旁边刚好有3个电影院,5个小区的人一般都去这3个电影院看电影。那么当出现看电影的人多拥挤的时候就存在三种做法。其一就是小区A的人都不允许去看电影,3个电影院都不允许;其二是3个影院中的万达影院不允许所有小区去看电影;其三就是小区A的人不允许去万达影院看电影。

而对于限流或断流的处理往往就存在上面的三种情况,需要分别对待。比如仅仅发现是ERP系统消费MDM的查询供应商服务出现大并发,大数据量调用。那么我们只需要对ERP系统+该服务进行限流或熔断处理即可,而不是对整个ERP系统或所有服务都进行禁用。或者当你发现ERP提供的查询OU组织服务出现响应很长,导致性能极低的时候,你可以将查询OU服务进行熔断,不允许所有的消费方进行调用。

究竟采用哪种方式,必须根据实际的服务调用场景,并发和性能分析来综合进行分析和判断。

在前面很多文章里面,我都谈到过,对于ESB服务总线,大并发调用并不可怕,大数据量短耗时也不可怕。真正可怕的是大数据量+长耗时的调用,这种调用会导致ESB总线的JVM内存一直增长而无法释放,最终导致总线的管道破裂,JVM内存溢出。而我们对JVM启动参数的调整更多也是在调整究竟设置多大的堆内存合理,究竟采用哪种垃圾回收机制效率更高。

所以对于限流和断流的触发,并不是简单的根据服务调用并发量,或者服务调用的数据量,响应时间进行就可以了,最好的方法是结合实际的活动线程数,当前的JVM内存使用和增长率来进行。

1. 如果我们发现当前活动线程数一直持续增加,无法释放,那么我们就需要对大并发服务调用限流。

2. 如果发现是JVM内存持续增长而无法释放,那么就需要对大数据量调用进行限流。

这种限流方式往往更加科学合理,也就是说如果仅仅是一次大数据量调用,比如超过20M的消息报文,那么对整体ESB总线的影响并不会太大。但是如果该服务被大并发在调用,那么一定导致线程数增加,JVM持续增长到90%或以上,那么这个时候才需要及时触发限流和熔断机制。

注意,消息报文量和实际的JVM内存耗用量不是等比关系,对于20M的消息报文,往往在JVM内存里面需要耗费掉100M甚至更多的内存,这点必须要引起注意。如果同时有5个这种大数据量并发调用,往往就会导致你JVM内存溢出或管道破裂了。


以上所述就是小编给大家介绍的《再谈服务流量控制(9.22)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

断层地带

断层地带

杰弗里·摩尔 (Geoffrey A.moore) 著 / 季晓楠,凌炜 译 / 机械工业出版社 / 2009-1 / 33.00元

从股东权益谈起,并把“股东权益管理”作为根本立场,明确阐述了公司市场价值的内涵:在竞争环境中,公司的市场价值等于在当前和计划的生产经营活动下,未来可预计的收益用风险系数贴现后的现值。断层地带:经济中的危险境地,在这里勇敢的创新者给市场带来了惨烈的竞争,撕杀得天昏地暗。每家公司都处在这样的环境中,但是没有一个管理者能够控制它。一起来看看 《断层地带》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具