背景描述
- 调用下游拉取数据
- 结合本地业务逻辑进行指标计算,并更新本地数据状态
单线程+(单条数据处理 + 全量)
- 单线程处理单条数据,每次查询下游统计整个时间段数据
统计整个时间段的数据,导致下游出现慢接口
单线程+(单条数据处理 + 增量)
- 单线程处理所有数据按照单条处理(查询下游),每次查询统计上次调度时间到当前时间的数据 指标计算数据随着数据增多,计算时常达到业务不可接受的地步
单线程+(单条数据处理、批量 + 增量)
- 将计算的数据分成两部分统计
- 一部分是统计开始时间不同的数据单条处理(查询下游)
- 一部分是统计开始时间相同的数据批量处理(查询下游)
指标计算数据随着数据增多,计算时常再次达到业务不可接受的地步
多线程+(单条数据处理、批量 + 增量)
- 多线程处理数据
指标计算数据随着数据增多,计算时常再次达到业务不可接受的地步
线程数还不能提高,受限于下游接口的并发性能
多线程+(首次单条数据、批量 + 增量)
- 多线程处理所有数据
- 统计开始时间不同的数据首次单条处理,之后的就可以批量处理,每次数据正常跑完都跟到最新的批次
由于数据处理耗时的不均匀性导致毛刺
由于计算数据的分布不均匀,三台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台的计算