乐趣区

关于java:大体量-高并发-业务与性能-权衡方案参考

亿级筛选十万级数据

业务场景 – 流动预约 & 数据导出
  • 总用户数据量亿级
  • 预约用户数量级为十万级
  • 预约仅保留 userId,次日需导出该次预约数据报表,蕴含用户根本信息
  • 用户根底信息保留于其余零碎,须要进行交互查问
解决方案
  • 查问总数为十万级,则查问调用总次数为 (n * 100000 / 单次查问数据量)
  • 用户信息已分表,则须要依据分表规定对 userId 进行分组,每次查问时只查一个分表
  • 预约完结次日凌晨就开始生成报表,当业务人员点击导出时,报表文件曾经生成
计划阐明

用户零碎数据量为亿级,且用户数据已分表,若上游不进行当时解决,会对用户零碎造成较大的性能耗费,进而影响整个零碎运行,故由上游当时进行数据分组;业务层面,业务人员须要在次日上班时间将数据导出并进行下一步解决,则数据生成的工夫 T + 1 内实现,若实时导出则必然页面 loading 工夫很长,故在凌晨间接生成好文件。

千万级数据统计

业务场景 – 数据收集 & 业绩计算
  • 根底数据每日増量千万级
  • 根底数据须要进一步加工成业绩数据,且每种类型解决形式不同,耗时不同
  • 单位工夫数据増量与工夫范畴没有法则的数学关系
  • 零碎性能有余,则无奈解决大体量数据,零碎性能过高,则会造成性能节约
解决方案
  • 针对不规则的大体量増量数据,采纳 MQ 进行性能削峰,所有类型的数据均应用 MQ 接管
  • 零碎外部交互也采纳 MQ 进行发送,接管,开释零碎性能
  • 定期删除过期数据,仅保留统计后果
计划阐明

最终业绩数据只有在 T + 1 日出现即可,T 日数据的接管与解决并非须要实时出现,针对无规律大体量数据,在无奈确定具体接口性能时,应用 MQ 来躲避此问题,性能上仅需保障当日数据当日处理完毕即可。

万级 QPS 并发

业务场景 – 抢购 & 秒杀
  • 用户抢购页面,须要查问个人信息
  • 用户抢购 QPS 峰值为 10000 左右
  • 须要避免缓存击穿,大量申请进入 DB
  • 须要思考限流,避免零碎解体
解决方案
  • 配置抢购后,将动态资源放入缓存中
  • 依据过往法则和用户沉闷水平,筛选出可能参加的用户,将用户信息放入缓存中
  • 配置布隆过滤器,优化查 DB 和查缓存路线
  • 配置令牌桶,事后设置好抢购名额
计划阐明

高并发下场景,动态资源间接放入缓存,防止读库;针对用户习惯当时缓存一部分用户数据,能缓解查库的压力;配合布隆过滤器,决定该申请的查问是读缓存还是读库,优化查问路线;应用令牌桶事后保留抢购库藏进行限流。

退出移动版