指标计算优化方案

120 阅读2分钟
背景描述
  • 调用下游拉取数据
  • 结合本地业务逻辑进行指标计算,并更新本地数据状态
单线程+(单条数据处理 + 全量)
  • 单线程处理单条数据,每次查询下游统计整个时间段数据

统计整个时间段的数据,导致下游出现慢接口

单线程+(单条数据处理 + 增量)
  • 单线程处理所有数据按照单条处理(查询下游),每次查询统计上次调度时间到当前时间的数据 指标计算数据随着数据增多,计算时常达到业务不可接受的地步
单线程+(单条数据处理、批量 + 增量)
  • 将计算的数据分成两部分统计
  • 一部分是统计开始时间不同的数据单条处理(查询下游)
  • 一部分是统计开始时间相同的数据批量处理(查询下游)

指标计算数据随着数据增多,计算时常再次达到业务不可接受的地步

多线程+(单条数据处理、批量 + 增量)
  • 多线程处理数据

指标计算数据随着数据增多,计算时常再次达到业务不可接受的地步

线程数还不能提高,受限于下游接口的并发性能

多线程+(首次单条数据、批量 + 增量)
  • 多线程处理所有数据
  • 统计开始时间不同的数据首次单条处理,之后的就可以批量处理,每次数据正常跑完都跟到最新的批次

由于数据处理耗时的不均匀性导致毛刺

由于计算数据的分布不均匀,三台job的资源利用严重不均匀

多线程+漏斗策略+(首次单条数据、批量 + 增量)
  • 使用redisson进行流量的并发控制
多线程+漏斗策略+数据sharding+(首次单条数据、批量)
  • 使用xxljob调度的分片广播的调度,在几台job的计算数据进行均匀分布计算
动态态调整限流器的rate
  • apollo中设置 min和max 的令牌生成速率、espectExcuteTime 期望执行时间
  • 通过数据大小和espectExcuteTime 计算速率,并且和min及max的比较,
    • current > max 则设置为max,
    • current < min 则设置为min
    • min<current<max 设置为current
花钱加机器
  • 在下游承受的住情况下,如果机器资源利用够高,就只能考虑添加新的机器

总结:

  • 单线程->多线程
  • 单条数据拉取->部分批量 + 部分单条->部分批量+部分首次单条
  • 单机不均匀平滑拉取计算->单机均匀平滑计算
  • 多机不均匀平滑计算->多机均匀平滑计算
  • 动态调整计算速率
  • 下游性能够高情况下,机器从N->M+N台的计算