改造前的代码是串行执行的,存在如下问题:
- 验证依赖数据库,查询
- 库存行锁
- 后置处理逻辑
代码如下
流程是这样的
用jemeter测试一下
测试前库存是1000,销量是133
测试参数是
结果是
才50个并发,循环4次,结果触目惊心啊,用时3分钟,延迟30秒,
库存是951,销量是182,卖了49件商品,感觉没法看啊,试着降低一下,
改了下连接池的配置
这下貌似正常了
cpu很猛
连接池换成
效果差不多
为什么连接池大了才可以呢?这期间调大了mysql的最大连接数和缓存线程数,好像没啥作用,这期间看看cpu和内存.主要是java,其次才是mysql
基本就认为优化前的TPS是25-30,延迟是2秒
优化思路
- 用户风控策略优化:
- 缓存模型化
- 活动校验策略优化:
- 引入活动发布流程,运营操作
- 模型缓存化
- 紧急下线能力