限流降级说明
编写人:刘洋
评审人:张伟、陈静
适用环境:行政协同平台生产环境
生效日期:0000-00-00
状态:已生效
一、目的与适用范围
行政协同平台目前为总部 420 名员工办理会议室预订、请假、访客登记和用品申领。工作日 9:00 至 9:15 是预订高峰,9 月实测峰值约 4 QPS;六个办公点全部开放后,按错峰估算峰值为 25 QPS。本文规定四类写接口和请假查询的限流阈值,以及通知、库存异常时的降级动作,避免高峰把主库和消息通道占满。生产自生效日起按本文执行。预发环境取生产阈值的 30%,由刘洋写在当次发布说明中。
二、限流阈值
网关按 1 秒窗口计数,超过阈值立即拒绝,下一秒重新计算。预订被拒绝时,页面文案为「当前预订人数较多,请稍后再试」,预订表不新增行。同一员工 10 秒内超过 3 次,按单人规则拒绝,用来挡住连续占会议室的脚本。请假查询使用独立计数,与预订写请求互不影响。
三、降级动作
- 企业微信连续失败 20 次后,暂停向外发送 5 分钟。单据仍正常保存,页面提示「申请已提交,消息可能延迟」。
- 用品库存接口超过 800 毫秒未返回时,申领单改为「待人工确认」,系统先不扣库存,由周敏在 2 小时内对照柜子补记。
- 会议室占用缓存不可用时,冲突检查改为直接查询数据库。单次响应允许变慢,已经占用的时段仍然拒绝第二张预订。
- 导出任务超过 60 秒未完成时,任务标记失败并释放名额,员工可以再次发起,已生成的半截文件由系统在当夜清理。
四、触发与恢复
降级开关放在配置中心,周敏拥有生产修改权限,保存后 30 秒内两台应用实例同时生效。通知降级由失败次数自动打开,每 2 分钟探测一次企业微信,连续 3 次成功后自动关闭。库存降级打开后保持人工确认,周敏核对柜子数量与系统余量一致后再关闭。缓存恢复后的下一分钟,冲突检查自动回到缓存,值班人只需在群里记一笔恢复时间。
五、演练结果
9月17日 12:10,王芳用压测账号把预订打到 48 QPS,持续 3 分钟。网关拒绝比例为 19%。陈静抽查 10 条被拒绝请求,预订表对应时段没有新增行。12:14 停止加压后 1 分钟,成功率回到 100%,主库 CPU 最高 31%。同日 12:20 模拟企业微信连续失败,通知降级在第 20 次失败时打开,抽样的 5 张请假单全部保存成功,页面出现延迟提示。张伟于当日 16:40 批准本文生效。
六、复核安排
刘洋在每个新办公点开放前 7 天复核一次阈值,下一次复核定在 9月23日,对应研发园开放。调整阈值时同时修改网关和本文,周敏在变更当日记录旧值、新值和生效分钟。陈静把 9月17日的演练记录与本文放在同一目录,供下一班值班人直接查阅。