知识卡片

三种限流场景对应三种模式

专业/工作 · 524.h

内容

“限制请求量”这件事根据限的是谁的流量、为了防什么,其实对应三种不同的模式:客户端限流约束自己主动发往下游的请求速率,典型场景是调用第三方按量计费的服务时,怕超额产生意外账单;舱壁模式(并发请求限制器)约束自己同时能对下游发起多少并发请求,把超出的请求排队而不是直接拒绝,适合下游是自家服务、怕把自己人打垮的场景;服务端限流约束上游客户端能对自己发多少请求,通常部署在网关这一层,用来防止某个用户或者恶意流量把整个系统打垮,超额请求直接返回 429。发散:这三者的关键区别在于”谁在保护谁”——客户端限流是保护对方(或保护自己的钱包),舱壁是保护自己的下游依赖,服务端限流是保护自己不被上游压垮,同一个”限制速率”的表面需求,一旦问清楚保护的对象是谁,该选哪种模式就变得非常清楚,不该混用。

参考来源

《Cloud Native Spring in Action》第9章《API gateway and circuit breakers》