LabHub
学习 学习路径 课程

队列与异步 API

处理背压与吞吐

在 LabHub 中继续学习

目标

学会将队列深度翻译为延迟时间,通过上限和负载阻断使系统自我保护后,通过同步性调节实际提高处理率。

为什么重要

放入队列的系统的故障大多是“队列堆积,但没有人知道”。API仪表板都是绿色的,响应时间也正常,只有用户看不到结果。如果不能将队列深度翻译为延迟,就无法判断这种情况有多严重。小力的定律W = L / λ简化为一行——深度3000,处理率每秒50件,现在接收的用户要等60秒。而且,如果利用率接近100%,等待时间不是线性的,而是呈指数级增长,用图表一看,就会明白为什么不能将工作者的容量调整为流入量的100%。

阶段

  1. /opt/app/loadgen.pyq:work每秒放入200件,持续10秒。LLEN q:work必须大于1500。
  2. /root/qb/measure.sh以1秒间隔测量10次球道深度/root/qb/depth.csvt,depth和海瑟一起留下11行。
  3. /root/qb/little.txtL=<깊이> lambda=<초당 처리 건수> W=<초>写下三个值。W是将L除以lambda得到的值,必须与小数点后第一位相符。
  4. /root/qb/api.py将 127.0.0.1:8142 启动。POST /enqueue如果队列长度超过1000,则给429。如果小于1000,则给202。
  5. 429 回答中Retry-After将叶头放入清水中浸泡一小时。/root/qb/shed.outstatus=429 retry_after=<정수>写。
  6. 同样的500件分别用1个和4个工作者处理/root/qb/concurrency.txtworkers=1 seconds=<값>workers=4 seconds=<값>写两行。4个边要更快。
  7. /root/qb/report.md## 안정 조건## 목표 이용률## 상한 정책放入三个标题,每个段落写25字以上。

参考

放入下属填充队列

/opt/app/loadgen.pyq:work每秒放入200件,持续10秒。LLEN q:work必须大于1500。

/opt/app/loadgen.py 接受几秒钟内要插入几件的参数。要比处理速度快插入才能增加深度。

记录キュー深度时间序列

/root/qb/measure.sh以1秒间隔测量10次球道深度/root/qb/depth.csvt,depth和海瑟一起留下11行。

每隔1秒测量长度,并以CSV格式保存。不要忘记标题行。

用利特尔的定律估计等待时间

/root/qb/little.txtL=<깊이> lambda=<초당 처리 건수> W=<초>写下三个值。W是将L除以lambda得到的值,必须与小数点后第一位相符。

停留时间是将深度除以处理率得出的值。必须分别填写三个值才能得分。

把Q上限和429粘在一起

/root/qb/api.py将 127.0.0.1:8142 启动。POST /enqueue如果队列长度超过1000,则给429。如果小于1000,则给202。

与其说接受了却做不到,不如说现在不能接受更诚实。超过上限就拒绝吧。

通过Retry-After告知重新尝试的时间点

429 回答中Retry-After将叶头放入清水中浸泡一小时。/root/qb/shed.outstatus=429 retry_after=<정수>写。

会用数字告诉客户什么时候再来就可以了。在队列深度中计算会更准确。

提高工作者的同步性,改善处理率

同样的500件分别用1个和4个工作者处理/root/qb/concurrency.txtworkers=1 seconds=<값>workers=4 seconds=<값>写两行。4个边要更快。

分别用1个和4个工作者处理相同的工作负载,比较所需时间。请保留两个值。

整理稳定条件

/root/qb/report.md## 안정 조건## 목표 이용률## 상한 정책放入三个标题,每个段落写25字以上。

将流入率和处理率的关系、目标利用率、上限政策整理成文档。请准确使用指定的标题。