队列理论入门

https://thenewstack.io/an-introduction-to-queue-theory-why-disaster-happens-at-the-edges/

背景

技术专家喜欢速度和反馈:高速缓存、大规模并行处理器、千兆赫兹、千兆比特、千兆字节和万亿次浮点运算。
但在实际应用中,用户体验对原始资源的依赖程度比我们通常假设的要小。延迟峰值、旋转轮、网站超时—这些问题 通常不是由于资源不足,而是由于队列管理不当造成的

目的

要了解原因,我们必须关注正确的指标。特别是,我们必须超越平均值。

谈到 IT 性能,业余爱好者只看平均值。专业人士着眼于分布

每个分布都可以描述为一条曲线。这条曲线的宽度称为它的方差。更常见的结果聚集在峰值附近。不太常见的那些坐在尾巴上。曲线越陡峭,方差越小,反之亦然。

尾部事件可能发生的频率较低,但它们仍然会发生。
“灾难发生在边缘”。这不是让你处理平均延迟,而是处理尾部延迟。

系统中的方差越大,那些异常体验就会越多——处理或避免它们的成本就越高。

队列

队列在数字系统中无处不在:执行器、套接字、锁。任何异步操作的进程都可能依赖于队列。

  • 队列的性能取决于几个因素,包括:
    1. 到达率:在一定时间内有多少作业到达队列
    2. 服务率:在一定时间内可以服务多少作业
    3. 服务时间:处理每项工作需要多长时间
    4. 服务规则:如何对作业进行优先级排序(FIFO/LIFO/Priority)

延迟

定义为作业在队列中等待的时间加上处理它所需的时间

  • 延迟与队列利用率的关系

在这里插入图片描述
起初,延迟缓慢上升,但随后在较高的百分位数中急剧增加
得出一条重要的经验法则:为了获得良好的性能质量,请将利用率保持在 75% 以下。

背压 back pressure

在数据流从上游生产者向下游消费者传输的过程中,上游生产速度大于下游消费速度,导致下游的 Buffer 溢出,这种现象就叫做 Backpressure 出现。

只要设置了 Buffer,一定存在出现 Backpressure 的风险。

Backpressure 指的是在 Buffer 有上限的系统中,Buffer 溢出的现象;它的应对措施只有一个:丢弃新事件(减载)。

总结:方差是性能的敌人,也是我们在使用软件时遇到的大部分延迟的根源。

要将延迟降至最低:

  1. 根据经验,目标利用率低于 75%,
  2. 将较慢的工作负载导向利用率较低的路径,
  3. 当利用率较高时,尽可能限制差异
  4. 给未内置背压的系统实现背压,
  5. 使用限流和减载来减少下游队列的压力。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值