高并发下springcloud hystrix的严重问题?

     2023-03-16     185

关键词:

【中文标题】高并发下springcloud hystrix的严重问题?【英文标题】:serious issue of springcloud hystrix under high concurrency? 【发布时间】:2018-04-05 23:55:24 【问题描述】:

第 1 部分

我使用 HystrixCommand 进行服务,并使用 jmeter 进行高并发测试。测试结果太差了,看流。 代码->

@HystrixCommand(fallbackMethod = "helloFallback")
@RequestMapping(value="/hello", method=RequestMethod.GET)
@ResponseBody
public ResponseResult hello() throws Exception
    ResponseResult responseResult = new ResponseResult();
    responseResult.setCode(200);
    responseResult.setData("bank test ok");
    return responseResult;

public ResponseResult helloFallback()
    ResponseResult responseResult = new ResponseResult();
    responseResult.setCode(400);
    responseResult.setData("timeout error");
    return responseResult;

测试结果:jmeter_test1

第二部分

但是,如果我注释掉HystrixCommand,测试结果是完美的。代码->

//    @HystrixCommand(fallbackMethod = "helloFallback")
@RequestMapping(value="/hello", method=RequestMethod.GET)
@ResponseBody
public ResponseResult hello() throws Exception
    ResponseResult responseResult = new ResponseResult();
    responseResult.setCode(200);
    responseResult.setData("bank test ok");
    return responseResult;

public ResponseResult helloFallback()
    ResponseResult responseResult = new ResponseResult();
    responseResult.setCode(400);
    responseResult.setData("timeout error");
    return responseResult;

测试结果->jmeter_test2

提示:线程图片 jmeter_test3

无论我使用zuul直接转发和调用服务,测试结果都是一样的。那么是高并发时springcloud hystrix的问题还是我的代码有问题。欢迎任何回复!

【问题讨论】:

【参考方案1】:

首先,请尝试调整以下属性。

hystrix.threadpool.default.coreSize

默认线程池大小仅为 10,对于您的性能测试而言,它的大小非常小。

在您使用 hystrix 的第一次测试中,您可以看到 31% 的错误率。这可能意味着可能有很多线程池被拒绝,因为默认线程池只有 10 个。

如您所知,Hystrix 通过断路器提供了很好的隔离,并且需要一些成本来处理它。所以一些性能下降是无法避免的。但是你的测试结果看起来不正常。

你可以找到更多关于hystrix配置的细节here

【讨论】:

高并发下减少锁竞争

1.减少锁的持有时间,将不需要锁的操作从同步代码块的移除。 //可以优化的代码  class AttributeStore{      private final Map<String,String> attributes=new HashMap& 查看详情

高并发下接口的并发问题

...会员,限制每个帐号只能领取一个有恶意用户刷接口,在高并发下越过限制。原因领取会员流程:1.后端先生成卡卷,将卡号放到消息队列中2.用户扫码请求领取会员接口2-1).先检查用户是否已经领取过该活动会员2-2).领取过return... 查看详情

1.网站高并发下的测试指标及优化泛谈

网站高并发下的测试指标:1.并发量:可以承接多少次请求。2.服务器负载:服务器的cpu/内存消耗。3.平均响应时间:处理一次请求花费的时间。测试高并发时,一般的测试标准是在服务器负载为70%的时候可以处理多少次请求还... 查看详情

redis实现高并发下的抢购/秒杀功能

...lhttps://www.cnblogs.com/TankXiao/p/4045439.html之前写过一篇文章,高并发的解决思路(点此进入查看),今天再次抽空整理下实际场景中的具体代码逻辑实现吧:抢购/秒杀 查看详情

高并发下线程安全的单例模式

...之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单例的呢?这些问题在看了本文之后都会一一的告诉你答案,赶快来阅读吧... 查看详情

高并发下的web异步处理方案(代码片段)

高并发下的web异步处理方案一、问题介绍​平时web开发时(使用的servlet或者基于servlet封装的SpringMVC框架),业务处理基本都是同步处理,即业务处理与web容器接收线程为同一线程,每一次Http请求都由一个线... 查看详情

漫画:高并发下的hashmap(代码片段)

这一期我们来讲解高并发环境下,HashMap可能出现的致命问题。               HashMap的容量是有限的。当经过多次元素插入,使得HashMap达到一定饱和度时,Key映射位置发生冲突... 查看详情

面试实战考核:设计一个高并发下的下单功能(代码片段)

功能需求:设计一个秒杀系统初始方案商品表设计:热销商品提供给用户秒杀,有初始库存。@EntitypublicclassSecKillGoodsimplementsSerializable@IdprivateStringid;/***剩余库存*/privateIntegerremainNum;/***秒杀商品名称*/privateStringgoodsName;秒杀订单表... 查看详情

redis实现高并发下的抢购秒杀功能

...很常见的一个应用场景,主要需要解决的问题有两个:1高并发对数据库产生的压力2竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。... 查看详情

高并发下,hashmap会产生哪些问题?(代码片段)

HashMap在高并发环境下会产生的问题HashMap其实并不是线程安全的,在高并发的情况下,会产生并发引起的问题:比如:HashMap死循环,造成CPU100%负载触发fail-fast下面逐个分析下出现上述情况的原因:HashMap死循环的原因HashMap进行存... 查看详情

宜人贷系统架构——高并发下的进化之路

宜人贷系统版本的迭代1.0版本——简单的烦恼1.PNG迭代之前宜人贷的系统,其实就是一个前台,一个后台,一个DB,前台采用的是多机部署的方式。软件层也是跟最传统的软件一样分三层,第一层是Controller,第二层是Service... 查看详情

高并发下接口幂等性解决方案

一、幂等性概念在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不... 查看详情

高并发下秒杀商品,这9个细节得知道(代码片段)

大家好,我是bigsai,又跟大家见面了。前言高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出... 查看详情

java中如何一次请求生成一个日志文件高并发下可用

参考技术Ajava是编程语言里比较难学的一门,如果有心从事编程方向的工作,最好到专业机构学习并有更多的项目实践,更贴近市场,这样更有利于将来的发展。 参考技术B日志框架,或写一个切面aop 查看详情

分布式事务,高并发下分布式事务的解决方案

我在上一期介绍了spring的事务原理(详情见《深入理解spring事务原理》),Spring事务本质是单机下的事务,是由数据库本身保证的。今天,我将介绍一种比较复杂的事务:分布式事务。1、什么是分布式事务分布式事务就是指事... 查看详情

高并发下缓存失效问题及解决方案

缓存穿透介绍:当查询一个不存在的数据,此时缓存是不命中的,就会去查询db,这将导致每次查询这个不存在的数据都要去访问db,缓存就没有意义了。如果不怀好意的人利用不存在的数据进行攻击,可能导致数据库崩溃解决... 查看详情

分布式高并发下全局id生成策略

数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求:  1不能有单点故障。  2以时间为序,或者ID里包含时间。这样一是可... 查看详情

数据存储redis第四章:高并发下实现分布式锁(代码片段)

直接上代码:大部分互联网公司实现分布式锁原理/***分布式锁底层实现原理*@return*/@GetMapping("distributedLock")publicObjectdistributedLock()StringlockKey="distributedLockKey";//给每个线程都设置一个唯一标识,避免出现程序执行的时间超过设置的... 查看详情