改造前的代码是串行执行的,存在如下问题:

    1. 验证依赖数据库,查询
    2. 库存行锁
    3. 后置处理逻辑

    代码如下
    image.png
    流程是这样的
    image.png
    用jemeter测试一下
    测试前库存是1000,销量是133
    测试参数是
    image.png
    结果是
    image.png
    才50个并发,循环4次,结果触目惊心啊,用时3分钟,延迟30秒,
    库存是951,销量是182,卖了49件商品,感觉没法看啊,试着降低一下,
    改了下连接池的配置
    image.png
    这下貌似正常了
    image.png
    image.png
    cpu很猛
    image.png
    连接池换成image.png
    效果差不多
    image.png
    为什么连接池大了才可以呢?这期间调大了mysql的最大连接数和缓存线程数,好像没啥作用,这期间看看cpu和内存.主要是java,其次才是mysql
    image.png
    基本就认为优化前的TPS是25-30,延迟是2秒

    优化思路

    1. 用户风控策略优化:
      1. 缓存模型化
    2. 活动校验策略优化:
      1. 引入活动发布流程,运营操作
      2. 模型缓存化
      3. 紧急下线能力