我想为我的快速应用程序启用类线程存储,该应用程序每分钟处理约 100 到 300 个 API 调用。我玩过 continuation-local-storage (和 cls-hooked,因为我在节点 8.9.0 上),但 CPU 峰值非常高(500 倍正常和不水平)并且导致服务器崩溃。端点主要进行 CPU 轻量同步计算(例如调用 API、进行查找、很少执行 I/O 密集型任务)
有人有使用 Express 大规模运行 csl 的经验吗?
我想为我的快速应用程序启用类线程存储,该应用程序每分钟处理约 100 到 300 个 API 调用。我玩过 continuation-local-storage (和 cls-hooked,因为我在节点 8.9.0 上),但 CPU 峰值非常高(500 倍正常和不水平)并且导致服务器崩溃。端点主要进行 CPU 轻量同步计算(例如调用 API、进行查找、很少执行 I/O 密集型任务)
有人有使用 Express 大规模运行 csl 的经验吗?
最近我在玩cls-rtracer,我的 Express 和 Koa 小型库。这个库只是构建在cls-hooked之上的轻量级中间件的集合。所以基本上我正在测试 cls-hooked(和 Async Hooks API,因为我使用的是 Node.js 版本 8)的足迹。
我已经实现了一个非常简单的 Express 应用程序,并在我的机器上使用和不使用 CLS 进行了测试。CLS 的场景如下:
负载由ab实用程序生成。我使用的是 Windows 10 和 Node.js 10,但也在使用 Node.js 8 的 Ubuntu VM 上进行了测试,得到了类似的结果。
结果,在请求 ID 和 CLS 开启的情况下,我得到了大约 10-15% 的 RPS(每秒请求数)降级。至于 CPU 利用率,我没有看到这两种情况之间的任何重大差异,例如突然的峰值。
我已将我的测试应用程序作为要点发布:https ://gist.github.com/puzpuzpuz/3c2a36ca0835906ad50dbd22c72df974
看起来像一个迟到的回应,但它可能会在未来帮助某人。这些场景应该非常接近真实世界的应用程序。
2020 年更新。从 v12.7.0 开始,Node.js 包含AsyncLocalStorage API。cls-hooked
与其他 CLS 库相比,此 CLS 核心 API 的占用空间显着降低。