知识卡片
Throttle的阻塞与非阻塞两种限流语义
内容
Throttle 用一个 count/max 计数器抽象出”槽位”资源限流原语,广泛用在 Ceph 各模块里限制瞬时并发请求量。它同时提供两种获取语义:get 在槽位不足时阻塞等待直到有资源释放,get_or_fail 在槽位不足时立即返回失败、不阻塞。两种语义对应完全不同的调用场景——请求量必须处理只是节流时用阻塞版本,调用方有更好的降级手段(如丢弃、重试、走另一条路径)时用非阻塞版本;把选择权交给调用方而不是在 Throttle 内部写死策略,是通用限流组件的关键设计。
参考来源
《Ceph源码分析》第2章《Ceph通用模块》