网站首页 > java教程 正文
记得前段时间工作中接到一个任务是优化一个下单接口的性能提高接口的吞吐量TPS,前期通过arthas工具跟踪接口的具体方法调用链路及耗时,发现了影响此接口的性能瓶颈主要是加锁的方式,后来变更了锁的方式后性能大大提升。
程序的大致逻辑是,1.判断余额是否足够>2.保存订单信息>3.扣减钱包余额>4.记录钱包流水;现在我将优化前及优化后的代码分别通过jmeter设置100个线程1s内请求这个接口通过实验观察效果,代码的变更及压测结果大家可以往下看
优化前:采用悲观锁
该方案是将整个事务方法加锁,可以保证下单时接口成功的响应,即使余额不足也会友好的返回余额不足的提示,但是不足的是客户端用户等待的时间较长;此种方案如果是用在商品秒杀销量优先场景下也不是很合适。
>代码
>压测结果(tps 8.4左右)
优化后:采用乐观锁
这种方式不会显示的给整个方法上锁,依赖的是通过sql的条件判断达到数据同步防止超卖情况发生,此种方式实际就是乐观锁的一种实现,经测试程序的吞吐量提升了很多,但是不足的是并发高的情况下扣减余额时仅仅通过数据库返回的更新结果不能准确判断是余额不足发生更新异常。
>压测结果(tps 30左右)
总结
通常影响接口的吞吐量有可能就是锁的粒度的大小,在保证数据同步性的同时我们要根据具体场景具体分析评估后采用合适的锁。
- 上一篇: Java高并发编程-深入了解Thread类
- 下一篇: tomcat8.5配置高并发
猜你喜欢
- 2025-01-05 Java高并发编程-线程入门
- 2025-01-05 tomcat8.5配置高并发
- 2025-01-05 Java高并发编程-深入了解Thread类
- 2025-01-05 大促流量激增,通过什么手段提升系统的高并发、高可用性?
- 2025-01-05 Java 多线程与高并发,基础概念回顾
- 2025-01-05 实战场景下的Java高并发知识指南
- 2025-01-05 一篇文章教会你如何搭建高可用高并发系统
- 2025-01-05 一文看透Java高并发:Synchronized锁的性质、原理及其缺陷
- 2025-01-05 Kafka高可用,高吞吐量低延迟的高并发的特性背后实现机制
- 2025-01-05 java 高并发解决方案
你 发表评论:
欢迎- 04-24Java Collections 工具类集合框架中常用算法解析
- 04-24桶排序的简单理解
- 04-24Java集合框架底层实现原理大揭秘
- 04-24Java 集合框架全面解析:选对数据结构,提升开发效率
- 04-24c#集合排序
- 04-24Java面试中常被问到的集合类深度解读
- 04-24VBA技术资料MF278:对集合进行排序
- 04-24Spring 最常用的 7 大类注解,史上最强整理
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)