繁体   English   中英

如何在不减慢服务器速度的情况下向 api 发送数千个并发请求?

[英]how to send thousands concurrent request to api without slowing down server?

一个流媒体服务器,主持人可以直播,观众可以加入、发送礼物、玩游戏和加入单人或团体直播的通话。 多个用户可以同时向主机发送礼物。 每个响应应在 90 毫秒以下。

由于此数据主要存储在缓存 dB 上,然后通过 AWS SQS 与主数据库 (MySQL) 同步。 当有成千上万的请求时,一切都运行良好并且很好。

服务器在 NodeJS 上运行,集群开启并水平扩展。 使用 MySQL 的 RDS。 Redis 锁用于数据一致性。

但是服务器不能同时处理超过数千个请求。 这里缺少什么?!

“并发”和“同时”是不好的术语。 计算机一次只能做一件事(或每个 CPU 内核做一件事)。

更好的指标是“每秒查询数”。 服务器可以“同时”处理数百个查询,但处于不同的操作阶段。 有些人正在等待 I/O。 有些人将CPU从他们身上拿走了。

通过让多个客户端“同时”运行,您可以从数据库中获得最大的吞吐量。 这可以通过“Web 服务器”轻松实现——HTTP 请求很容易由 Apache、nginx、Tomcat 等处理。每个请求都与数据库建立单独的连接,数据库很乐意使用它。

在一个繁忙的系统中——一个处理一千个或更多“每秒查询”的系统,进程列表可能只显示一两个实际运行的系统。 但是如果每一个都跑得够快,你就会产生“成千上万个并发查询”的错觉

请注意,每个数据库查询可能需要数毫秒,但由于重叠,“数十”和“数千”可能同时为真。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM