龙空技术网

Java编程-高并发情况下接口性能优化实践-提升吞吐量TPS

SsstayHungry 1106

前言:

眼前我们对“java接口实验总结与心得”都比较关注,看官们都想要学习一些“java接口实验总结与心得”的相关内容。那么小编同时在网摘上搜集了一些对于“java接口实验总结与心得””的相关内容,希望兄弟们能喜欢,大家一起来了解一下吧!

记得前段时间工作中接到一个任务是优化一个下单接口的性能提高接口的吞吐量TPS,前期通过arthas工具跟踪接口的具体方法调用链路及耗时,发现了影响此接口的性能瓶颈主要是加锁的方式,后来变更了锁的方式后性能大大提升。

程序的大致逻辑是,1.判断余额是否足够>2.保存订单信息>3.扣减钱包余额>4.记录钱包流水;现在我将优化前及优化后的代码分别通过jmeter设置100个线程1s内请求这个接口通过实验观察效果,代码的变更及压测结果大家可以往下看

优化前:采用悲观锁

该方案是将整个事务方法加锁,可以保证下单时接口成功的响应,即使余额不足也会友好的返回余额不足的提示,但是不足的是客户端用户等待的时间较长;此种方案如果是用在商品秒杀销量优先场景下也不是很合适。

>代码

>压测结果(tps 8.4左右)

优化后:采用乐观锁

这种方式不会显示的给整个方法上锁,依赖的是通过sql的条件判断达到数据同步防止超卖情况发生,此种方式实际就是乐观锁的一种实现,经测试程序的吞吐量提升了很多,但是不足的是并发高的情况下扣减余额时仅仅通过数据库返回的更新结果不能准确判断是余额不足发生更新异常。

>压测结果(tps 30左右)

总结

通常影响接口的吞吐量有可能就是锁的粒度的大小,在保证数据同步性的同时我们要根据具体场景具体分析评估后采用合适的锁。

标签: #java接口实验总结与心得