高性能架构

java 微服务

  2G 大约150-200 左右

  1核2G SpringBoot qps 600 左右 复杂逻辑 按照 400算

  1核2G SpringBoot tps 200 左右 负责逻辑 按照150算

 

  业务系统 10 台 SpringBoot

  订单服务 10 台 SpringBoot

  nginx 4 台

  1核2G nginx  qps 470 左右 配合业务系统 400左右

  

实例规格存储空间数据集客户端数单客户端并发数QPSTPS
1核1GB 200GB 19GB 1 128 1757 97
1核2GB 200GB 38GB 1 128 3016 167
2核4GB 200GB 76GB 1 128 4082 816
4核8GB 200GB 142GB 1 128 6551 1310
4核16GB 400GB 238GB 1 128 11098 2219
8核32GB 700GB 238GB 2 128 20484 3768
16核64GB 1TB 378GB 2 128 36395 7279
16核96GB 1.5TB 378GB 3 128 56464 11292
16核128GB 2TB 378GB 3 128 81752 16350
24核244GB 3TB 567GB 4 128 98528 19705
48核488GB 6TB 567GB 6 128 142246 28449
48核488GB(调优) 6TB 140GB 6 128 245509 46304

 

 

       5台业务微服务 ≈ 2500 qps  750 tps

   10台订单交易服务≈ 5000 qps  1500 tps

   10台网管服务 ≈ 5000 qps  1500 tps

   4台nginx 大约 1800 qps  

       nginx 5台 1950 qps

       数据库 2核4G 800tps 1.7w qps   两主1600 tps  两从 + 两主 5.4w qps

   redis 主从 三台  qps 10万空转 算5w   3台 15万

       3台rocketmq集群 解决异步

   redis 缓存预热,1.存储初始化数据,2.存储热点数据  热点的天数是阈值  7天 ,30 天,90天,热点数据每天都会更新 社区最远的一天 新增今天,舍去之前的数据 添加新增的数据

如果用户查询的订单超过了 阈值 那么也会把查询记录存储到redis里 当天晚上会根据删除策略舍弃掉

       方案2 把终态的数据存储redis中,

 

      如何分表呢 采用用户编码做的 取余拆分 A主库1-5订单表 B主库5-10订单表,分表是为了提高tps 的效率  用户维度只需要编号hash 取余就可以了,订单维度 需要再订单编号中 标记 表的下表例如 1到10

  redis 缓存 存储信息 使用 用户的编号 user code 存储用户的订单信息 使用 hash 存储 里面结构是 map,如果在意查询效率 使用list 使用list 建议值存储终态数据  前端限制住每次查询的状态

    

 

   在途状态具有不稳定性 所以存储数据库中,最终态状态存储缓存中,针对退款的 可以使用我的组件 更新缓存

     数据库这里 两个主从的集群, 2核4G 800tps 1.7w qps   两主1600 tps  两从 + 两主 5.4w qps

      普通数据 主从,订单交易系统 双主 双从2核4G 

 

网关限流 阈值

服务限流阈值

  


  

  

 

     

    

posted @ 2023-03-13 23:10  郎小乐  阅读(196)  评论(0)    收藏  举报