Express:什么负载可以继续 - 本地存储处理?

时间:2018-05-30 01:26:51

标签: node.js typescript express node-local-storage continuation-local-storag

我想为我的快递应用程序启用线程式存储,每分钟处理约100到300个API调用。我使用了continuation-local-storage(和我在Node 8.9.0上的cls-hooked),但是CPU峰值非常高(500x正常且没有级别)并且已经崩溃了服务器。端点主要进行CPU光同步计算(例如调用API,进行查找,很少进行I / O密集型任务)

有没有人有使用Express大规模运行csl的经验?

1 个答案:

答案 0 :(得分:2)

最近,我在玩cls-rtracer,这是我的Express和Koa小型图书馆。该库只是建立在cls-hooked之上的轻量级中间件的集合。因此,基本上,我正在测试cls-hooked(和Async Hooks API的占用空间,因为我使用的是Node.js版本8)。

我实现了一个非常简单的Express应用程序,并在有无CLS的计算机上对其进行了测试。使用CLS的情况如下:

  • 在每个请求上,都使用uuid/v4生成了一个id,然后将其存储在CLS中。这是由cls-rtracer中间件完成的。
  • 在路线中间件中,使用记录器库winston完成了一些记录。该库已配置为从CLS获取请求ID,并将其附加到每个日志条目。

负载是由ab实用程序生成的。我当时使用的是Windows 10和Node.js 10,但也在具有Node.js 8的Ubuntu VM上进行了测试,并得到了类似的结果。

结果,在打开请求ID和CLS的情况下,我的RPS(每秒请求数)下降了约10-15%。至于CPU利用率,我发现这两种情况之间没有任何重大差异,例如突然的峰值。

我已经按照要点发布了我的测试应用:https://gist.github.com/puzpuzpuz/3c2a36ca0835906ad50dbd22c72df974

看起来像是迟来的回应,但将来可能会对某人有所帮助。这些场景应该非常接近实际应用。