服务器负载处理:单个批量请求与多个请求

服务器负载处理:单个批量请求与多个请求

我曾与一位开发人员讨论过创建、更新和删除的不同 API,他说最好向服务器发送单个批量请求来执行创建、更新和删除等操作,而不是对每个操作发送多个请求,因为如果有多个连续请求,服务器将不得不处理这么多请求,这将增加服务器的负载。我还假设它必须进行多次更新,而不是批量更新数据库。

假设我有一个电子表格类型的应用程序。在每一行中,我有多个可以编辑的单元格。保存这些更改的一种方法是每次更新单元格时向服务器发送更新请求。另一种选择是对所有更新进行防抖动,比如说 10 秒。

我还可以创建 10 行,更新一行并删除另外 2 行。我试图理解这两种请求类型的差异和权衡

我一直在尝试搜索并了解这两种方法之间的性能影响,但一直找不到。这么多请求会对性能产生重大影响吗?有人可以解释一下吗?

答案1

当然...

想象一下我们正在谈论一个 HTTP API,好吗?

每个请求的总有效负载将是仅用于完成此特定请求的所有资源,因此,我们可以考虑在一个请求有效负载中通过以下流程仅将一行插入数据库,仅用于举例说明,好吗?

步骤 1:请求开始(CURL 或任何类似的 HTTP 客户端)

步骤 2:服务器接收请求并启动新线程(取决于 Web 服务器软件)

步骤 3:Weberver 进行 HTTP 握手,并为脚本解释器(PHP .NET 或其他)启动一个新线程

步骤 4:脚本解释器,启动与数据库的连接(如果数据库在同一台服务器上,可以再次通过网络或本地套接字进行连接)

步骤5:将单个插入SQL命令数据转发给SGDB进程

步骤 6:执行语句并将执行状态(如果在选择命令中,查询数据结果也将传输到这里)返回到脚本解释器(再次,PHP .NET 或其他)

步骤 7:脚本解释器将数据返回给 Web 服务器软件(Apache、Nigins 或其他)

步骤8:Web服务器软件再次访问HTTP连接,并将结果数据发送到客户端以便再次通过网络传输......

第九步:最终结束线程循环,释放系统资源!

因此现在考虑在仅仅几秒钟内重复这个流程一千次,对服务器资源的需求将会很高,因为即使我们在每个请求中向数据库插入一个小行,服务器上发生的事情也比我们看到的要多得多,这只是简化的例子,在其他情况下,真正的负载可以有更多的步骤......

如果我们谈论批量插入操作,对于一千行,所有这些步骤都会重复,但只重复一次,唯一的区别是 SQL 插入数据现在的大小会更大,从而导致在有用的处理或 IO 任务中使用更多的资源......

显然,每种情况都有其自身的属性,并且需要针对每种情况验证此逻辑……

相关内容