API服务器的标准可接受请求/响应超时时间是多少(为什么)?

9
我正在开发web客户端和API服务器。我已经进行了一些关于默认超时时间的研究,有些是800毫秒,有些是1200毫秒。然而,我找不到任意数字背后的原因。有人可以帮我解答吗?解释其中的随意数字将会是很大的帮助。
谢谢。

Nginx默认使用60秒的超时时间。请参阅文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html。我认为没有标准的默认值。通常这取决于您的后端逻辑。 - ofirule
当你说有些在800毫秒,有些在1200毫秒时,你能更具体一些吗? - Vahid
越快越好 - JS Disciple
3个回答

10
简述: 请看下面以粗体字开始的段落,其中涉及任意数字。其余部分只是关于该主题的额外信息。
尽管您可能已经知道或已经在研究中阅读过这个,但我可以分享以下想法:
通常,超时时间的设置取决于查询的预期复杂性、要处理的数据量以及查询发生时系统的预期负载(或任何其他可能需要修改超时的操作)。此外,这可能基于API向其他API发出请求来处理传入请求的数量以及这些期望值。
“任意数”(由开发软件的人“最佳猜测”)通常是在规划“大多数请求应该在某个时间的一部分内完成,如果没有问题,无论发生什么”或“这不是什么需要担心”的情况下使用。因此,超时的默认值基本上是基于假设它们代表绝大多数“可接受”的已完成请求,其中不存在问题。它通常设置在“这应该是足够的时间”和“这个请求很可能有严重问题,让我们结束它”的范围之间,并且大多数成功的请求都通过了这个“默认”测试。
如果您有可能需要花费数分钟的操作,而且您预计在没有实际问题存在的情况下也会出现这种情况,那么您可能希望将超时时间设置得比默认值更高,这样当没有实际问题时,您的请求不会超时(例如,大多数商业API对请求数量和完成时间有限制,以避免有问题的请求阻塞系统,并根据开发人员的其他原因进行处理)。
因此,除了查看要处理的数据/请求量、计划合理的服务器负载起伏、代码优化水平与预期负载等因素外,实际上并没有很好的答案或标准...这就像错误处理一样,但针对的是那些您还不知道可能发生的事情(如意外的错误),但基于您已经了解的系统和其预期使用情况的因素。
通常情况下,超时时间并不是很重要,但您始终希望拥有一个(至少是默认值)以应对意外情况。
如果您还没有看到以下文章,它讨论了这个主题以及我提到的一些内容:

https://medium.com/@masnun/always-use-a-timeout-for-http-requests-de4da538b9e3


4
根据服务级别协议(SLA)大多数情况下是这样的。如果不是,则尽可能优化代码,以毫秒为单位降低响应时间。简单来说,当一个API与另一个API交互时,如果系统设计得好,它会在几毫秒内返回响应。但是,如果有一个API出现问题,客户需要制定SLA要求公司/开发人员以可接受的范围内响应。
我曾在Google Groups conversation上看到这段对话,或许可以提供一些见解。
所以回答关于可接受范围的问题,如果你没有SLA,尽可能优化代码,以毫秒为单位缩短响应时间。

我喜欢你在回答中提到了SLA,这是一个很好的观点,特别是对于正在学习的开发人员来说,因为它与实际用例紧密联系。 - Andrey Vasilyev

2
通常情况下,1秒被认为是可以接受的时间。之所以建议的数字如此不同,原因在于如果您发送请求过快,大多数API都会出现锁定。然而,有些API将允许您更快地发送请求。根据我的经验,我见过的所有API都要求在请求之间延迟1秒(1000毫秒),以防止超载/意外DDOS,并具有30-60秒的超时时间。
编辑:重要的是要提醒不要在第一个请求仍在等待响应时回答来自同一IP的另一个请求,因为这会使DDoS变得容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接