Skip to content

背压、取消与服务测试 ​

流式生产者比客户端消费者快时,必须使用有界队列或明确丢弃策略;无限缓冲会把内存和租户成本一起耗尽。客户端断开不等于服务端副作用已取消,取消请求需要传播到模型、工具和队列,并在提交前再次检查。测试应覆盖慢消费者、断线重连、重复事件、超时和取消竞态。

第一个可运行实验:有界队列拒绝过载 ​

保存为 backpressure.py,用 Python 3.12 运行。

python
from collections import deque

class Buffer:
    def __init__(self, limit):
        self.limit, self.items = limit, deque()
    def put(self, item):
        if len(self.items) >= self.limit:
            return False
        self.items.append(item)
        return True
    def get(self):
        return self.items.popleft() if self.items else None

b = Buffer(2)
assert b.put('a') and b.put('b')
assert not b.put('c')
assert b.get() == 'a'
assert b.put('c')
print('bounded backpressure passed')

背压策略可以阻塞生产者、暂停上游读取、丢弃可重建的增量或转存持久队列;工具结果和完成事件不能随意丢弃。重连使用最后确认序号和结果版本,客户端去重;完成后订阅应直接读取持久结果。

变体实验 ​

把 put 改为丢弃最旧文本,说明为什么不适用于工具结果。再模拟取消标记在队列等待期间到达,要求 worker 在副作用前检查。

练习 ​

  1. 为事件定义序号、确认序号和结果版本。
  2. 设计客户端断线后的恢复订阅协议。
  3. 列出同步请求、流式请求和长任务各自的超时层级。

用心记录每一步成长