RPS 概述
计算机语言里,什么是 RPS ?
即 Requests Per Second,指的是每秒请求数,通常用 RPS 的高低来形容一个服务的请求频繁程度,能支持的 RPS 越高也表示该系统在单位时间内的吞吐量越高,所消耗的服务器资源也就越大。为了保证服务的稳定性和用户体验,软件服务都会限制 RPS 。
举例:可以把软件上所有的请求理解为全部即将开上一座桥的车, RPS 就等于每分钟要上桥的车的数量。软件 RPS 限制就等于这座桥1分钟可以吞吐的车总量。 RPS 超限就等于当车流高峰期时,很多车就会因为桥梁的吞吐量不足被迫在等待区排队。(目前我们 Zion 的请求等待区为 3s 内的请求,对应到例子就是上桥等待区最多容纳3分钟的车辆)
线上用户执行哪些操作算是数据请求?
数据请求:
- 执行数据请求行为:执行一个数据请求行为(查询、修改、删除表数据)即算一个请求。
- 拉起有远程数据的页面:会做数据请求聚合,一个页面配置了多个远程数据,用户在拉起这个页面时 请求数为1; 但远程数据之间有依赖的情况下,不会自动聚合,比如 a 依赖 b 的结果做过滤,那么会先发送 b,等 b 回来再发送 a,这时候请求数为2
- API 调用:每调用一次api算一个请求
- Action flow(行为流)调用:每调用一次行为流算一个请求;如某行为流里包括了多个数据的增删改查操作,也算一个请求
- ZAI 调用:每调用一次 ZAI 算一个请求应用的 RPS : 一秒内,所有活跃用户发生以上操作的数据请求总数即为该应用的 RPS (数据查询由于目前我们请求合并做的不够完善,所以目前不会被记入限制的 RPS 峰值内)
每个项目 RPS 峰值限制是多少?
我们zion会对生成的项目进行每秒请求数的峰值限制,不同的版本限制的峰值数量不同,购买了单租户算力包的项目不会限制 RPS ,可以理解为前文例子的桥是无限车道。以下为不同版本 RPS 峰值限制数:
版本 | 免费版 | 高级版 | 专业版 | 企业版 | 购买单租户算力包 |
---|---|---|---|---|---|
RPS 峰值限制 | 5 | 5 | 25 | 所有项目共享250 | 不限 |
遇到了 RPS 限制后会发生什么?
- RPS 达到峰值限制后,用户会看到一个提示: 前方拥挤,请稍后再试。
如果有多个连续请求,中间触发了 RPS 的限制,那么该次连续请求会失败。例如一个按钮配置了10个数据请求,当执行到第5个请求时触发了 RPS 限制,那么该请求会失败,即当前用户的线上操作会失败。# 作为开发者,如何应对发生 RPS 限制的情况?
开发应用时,进行科学合理的设计
- 使用行为流功能:将右边栏交互下配置的连续请求行为配置为一个行为流,通过调用行为流这个行为来执行这个操作
- 合理地进行功能设计,避免高 RPS 的操作。例如抽奖功能,限制每个用户每天只能点击一次,来防止单用户疯狂点击来让 RPS 变得非常高。
- 如上线后,发现应用触发了 RPS 限制
- 进入项目详情页查看具体达到峰值的次数和每次超过时的 RPS 值
- 选择相应的版本进行升级
- 购买单租户服务器,将没有 RPS 的限制。