我应该将每秒的POST限制为什么?

时间:2016-01-04 19:46:04

标签: node.js api http post hapijs

我正在使用Hapi.js构建API。我的一些代码是将少量数据推送到API。问题似乎是推送代码正在淹没API并且我收到了ECONNRESET错误 - 这意味着消息正在丢失。我计划在推送代码中安装速率限制器,可能是node-rate-limiterlink)。

问题是,我应该将该限制设置为什么?我想最大化这个应用程序的性能,所以我可以轻松地尝试每小时发送数千条消息。数据只是被转储到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}', ...})  

1 个答案:

答案 0 :(得分:1)

您可以处理的每秒请求数没有通用答案。这取决于您的配置和代码中的许多内容,例如:

  1. 服务器硬件的类型和性能
  2. 平均请求使用的CPU时间量
  3. 您的请求是CPU还是磁盘绑定。如果磁盘有限,那么它在很大程度上取决于您的数据库和磁盘性能。
  4. 是否实施群集以使用多个核心(如果CPU绑定)
  5. 您是否使用共享基础架构
  6. 服务器配置的最大传入连接数
  7. 所以,这里没有绝对的答案适合每个人。如果您没有某种人为限制并发性的设计问题,那么发现服务器实际可以处理的最佳方法是构建测试引擎并对其进行测试。查找失败的位置和方式,并修复这些问题以进一步扩展可扩展性或实施保护以避免达到此限制。

    注意:当公共API进行速率限制选择时,通常在每个客户端的基础上完成,并且限制设置为一个似乎略高于合理客户端的值。这更多是为了允许许多客户端合理使用服务器,因为单个客户端不会消耗太多的整体资源。如果在使用您的API时,从单个客户端发出数千个小请求不被视为“良好做法”,那么您只需选择一个比每个客户端限制小得多的数字。

    注意:您可能还希望让API让他们在一个API请求中上传多条消息而不是大量API请求,从而使客户更容易。