D5.06.4Queue and drop rules设计研究
仲裁需要处理同一时刻多个事件的排队与丢弃规则
别名: queueing · dropping · capacity limits
概念解释
仲裁必须明确同一时刻多个事件如何排队、如何丢弃。只定义优先级而不定义队列与丢弃规则会产生隐性行为:队列无限增长导致所有事件都被延迟,或系统在压力下随机丢弃。这两者都会让优先级的承诺落空。
机制
排队与丢弃规则解决的是容量问题。单位时间内可处理的事件数有限,超过容量后必须延后或放弃。排队策略决定哪些事件等待以及等待多久,丢弃策略决定什么情况下不再等待。若队列没有上限,关键事件可能排在大量低优先级事件之后,实际延迟远超预期;若丢弃规则缺失,系统在压力下可能丢弃关键事件而非替代性最低的那个。规则还需要说明被丢弃事件是否有记录,否则用户无从得知曾有事件发生。
怎么研究
可构造高并发压力测试:在超过处理容量的条件下触发大量事件,记录关键事件的延迟分布、被丢弃的事件类型与用户是否察觉丢失。变量包括并发强度、队列上限与丢弃依据。因变量应包括关键事件是否被丢弃,因为它是优先级承诺是否成立的核心检验。
边界
当事件密度始终远低于处理容量时,队列与丢弃规则很少被触发,其细节不影响体验。当用户处于低负荷状态时,可以容忍更长的排队。若系统能够提示队列状态,用户可以接受一定程度的延迟,因此队列规则需要与状态提示配合设计。
怎么落地
- 为队列设定上限,并规定达到上限后的处理方式。
- 明确丢弃依据,保证关键事件不因队列满而被优先丢弃。
- 记录被丢弃的事件,使用户可以事后了解曾发生的内容。
- 验证方式:在超过容量的并发条件下测量关键事件的延迟与丢弃情况,确认优先级承诺在压力下仍然成立。