我应该将每秒 POST 的速率限制在多少?
What should I limit my POST per second rate to?
我正在使用 Hapi.js 构建一个 API。我的一些代码将少量数据推送到 API。问题似乎是推送代码淹没了 API 并且我收到 ECONNRESET 错误——这意味着消息正在丢失。我计划在推送器代码中安装一个速率限制器,可能是 node-rate-limiter
(link)。
问题是,我应该将该限制设置为多少?我想最大限度地提高这个应用程序的性能,这样我就可以很容易地尝试每小时发送数千条消息。数据刚刚被转储到 redis 中,所以我怀疑 API 中的代码会是一个问题,但我仍然需要了解 Hapi 适合什么样的消息速率。我是否需要从合理的事情开始,然后看看进展如何?也许每 10 毫秒 1 条消息?
Hapi = require('hapi');
server = new (Hapi.Server);
server.connection(port: config.port, routes: {
cors: {
origin: ['*']
}
});
server.route({method: 'POST', path: '/update/{id}', ...})
对于每秒可以处理多少个请求,没有通用的答案。这取决于您的配置和代码中的许多事情,例如:
- 服务器硬件的类型和性能
- 每个请求平均使用 CPU 时间
- 您的请求是 CPU 还是磁盘绑定。如果磁盘有限制,那么这在很大程度上取决于您的数据库和磁盘性能。
- 是否实施集群以使用多核(如果 CPU 绑定)
- 无论您是否在共享基础设施上
- 您的服务器配置的最大传入连接数
因此,这里没有适用于所有人的绝对答案。如果您没有某种人为限制并发性的设计问题,那么发现您的服务器实际可以处理什么的最好方法是构建一个测试引擎并对其进行测试。找出失败的位置和方式,然后解决这些问题以进一步扩展可扩展性或实施保护以避免达到该限制。
注意:当public API 进行速率限制选择时,通常是在per-client 的基础上完成的,并且限制设置为一个看起来有点小的值高于一个合理的客户会做的事情。这更多是为了允许许多客户端公平使用服务器,一个客户端不会消耗太多的整体资源。如果在使用您的 API 时不考虑从单个客户端发出数千个小请求 "good practice",那么您可以只选择一个比 per-client 限制小得多的数字。
注意:您可能还希望让您的 API 让他们在一个 API 请求中而不是大量 API 请求中上传多条消息,从而使客户更轻松。
我正在使用 Hapi.js 构建一个 API。我的一些代码将少量数据推送到 API。问题似乎是推送代码淹没了 API 并且我收到 ECONNRESET 错误——这意味着消息正在丢失。我计划在推送器代码中安装一个速率限制器,可能是 node-rate-limiter
(link)。
问题是,我应该将该限制设置为多少?我想最大限度地提高这个应用程序的性能,这样我就可以很容易地尝试每小时发送数千条消息。数据刚刚被转储到 redis 中,所以我怀疑 API 中的代码会是一个问题,但我仍然需要了解 Hapi 适合什么样的消息速率。我是否需要从合理的事情开始,然后看看进展如何?也许每 10 毫秒 1 条消息?
Hapi = require('hapi');
server = new (Hapi.Server);
server.connection(port: config.port, routes: {
cors: {
origin: ['*']
}
});
server.route({method: 'POST', path: '/update/{id}', ...})
对于每秒可以处理多少个请求,没有通用的答案。这取决于您的配置和代码中的许多事情,例如:
- 服务器硬件的类型和性能
- 每个请求平均使用 CPU 时间
- 您的请求是 CPU 还是磁盘绑定。如果磁盘有限制,那么这在很大程度上取决于您的数据库和磁盘性能。
- 是否实施集群以使用多核(如果 CPU 绑定)
- 无论您是否在共享基础设施上
- 您的服务器配置的最大传入连接数
因此,这里没有适用于所有人的绝对答案。如果您没有某种人为限制并发性的设计问题,那么发现您的服务器实际可以处理什么的最好方法是构建一个测试引擎并对其进行测试。找出失败的位置和方式,然后解决这些问题以进一步扩展可扩展性或实施保护以避免达到该限制。
注意:当public API 进行速率限制选择时,通常是在per-client 的基础上完成的,并且限制设置为一个看起来有点小的值高于一个合理的客户会做的事情。这更多是为了允许许多客户端公平使用服务器,一个客户端不会消耗太多的整体资源。如果在使用您的 API 时不考虑从单个客户端发出数千个小请求 "good practice",那么您可以只选择一个比 per-client 限制小得多的数字。
注意:您可能还希望让您的 API 让他们在一个 API 请求中而不是大量 API 请求中上传多条消息,从而使客户更轻松。