1

Django 设置中有一个 celery 任务,它使用 Redis 作为后端。我想提高吞吐量、响应能力并预测容量规划的任务完成时间。该任务从内部系统获取数据并将其同步到外部系统。每个任务只会同步到 5 个外部系统。

系统电流统计

  • 平均每天有3500 个任务进入队列
  • 延迟细分:p50 - 0.91s,p75 - 5.09s,p90 - 17.88s,p95:22.56s,p99 - 51.32s,最大值 - 11.93 min
  • 3 个工作人员为此队列并行运行
  • 每小时到达率不同。一天 5 小时占队列中项目的 52%
    • 第 13 小时 - 22.07%
    • 4 - 10.98%
    • 14 - 9.80%
    • 11 - 6.14%
    • 12 - 5.94%
    • 20 - 4.85 %
    • 15 - 4.78%
    • 休息(17 小时) - 35.44%

响应能力

  • 为了使系统(队列工作人员)响应,每个外部系统特定的队列和工作人员应该足以使用重试队列。

吞吐量

# p50, p75, p90, p95, p99, max
>>> (probs = {0.50: 0.91, 0.25: 5.09, 0.15: 17.88, 0.05: 22.56, 0.04: 51.32, 0.01: 11.93 * 60}
>>>val = 0
>>>for k, v in probs.items():
            val += k * v * 3500
>>>mean_service_time = val/3500
>>>mean_service_time

  • 完成任务的平均/平均时间是14.748s
  • 平均值高于中位数 (p50 - 0.88s)
  • 还有其他更好的指标来计算吞吐量吗?什么是正确的指标?由于负载分布不均匀,每小时吞吐率是否是一个更好的指标?

排队等待时间

计算器的结果

  • 队列长度 = 39 个单位
  • 在系统中花费的平均时间 = 962.9 s
  • 利用率 = 0.675
  • 系统中 0 个单位的概率 = 0.5079

这个计算是否正确有效?有没有更好的方法来计算指标?

进行所有计算的目的是在生产率增长 3 倍时如何使队列工作人员更快,减少队列等待时间,考虑到其他资源的队列长度不会像数据库那样成为瓶颈。

有没有更好的方法来进行容量规划?

注意:有一种试验和方法方法可以通过将容量增加 5 倍以实现 3 倍增长,但我想看看是否可以使用排队理论和数学来解决问题。

4

0 回答 0