gpt4 book ai didi

javascript - 需要使用 Node.js 在 AWS 上实现 5000 个并发 api 点击

转载 作者:行者123 更新时间:2023-12-03 04:29:42 24 4
gpt4 key购买 nike

我们目前正在努力让我们的一个 API 达到 5000 TPS。我们使用 Mongo Atlas 3.2.12 和 NodeJS v6.10.2,每次点击都会通过 3 个查找查询访问数据库。有一个 ELB,并且 ELB 后面有两个 Amazon EC2 类型介质实例。使用 Apache Benchmark 工具,我们发现它在一秒钟内仅处理 68 次点击。

下面是 Apache Benchmark 工具的输出 -

Document Length:        748 bytes

Concurrency Level: 1000
Time taken for tests: 116.294 seconds
Complete requests: 5000
Failed requests: 4274
(Connect: 0, Receive: 0, Length: 4274, Exceptions: 0)
Write errors: 0
Total transferred: 5440980 bytes
HTML transferred: 3830980 bytes
Requests per second: 42.99 [#/sec] (mean)
Time per request: 23258.823 [ms] (mean)
Time per request: 23.259 [ms] (mean, across all concurrent requests)
Transfer rate: 45.69 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 6 418 823.7 10 2448
Processing: 197 21032 7150.3 21848 35739
Waiting: 197 21031 7150.3 21848 35739
Total: 205 21450 7264.9 22052 36744

Percentage of the requests served within a certain time (ms)
50% 22052
66% 24953
75% 26697
80% 27814
90% 30272
95% 31804
98% 33428
99% 34534
100% 36744 (longest request)

编辑:我们已经在使用多集群。但我们无法达到理想的每秒 2000 的 TPS。目前,我们已将服务器从 t2medium 升级到 m4-large。任何建议都会有很大帮助。

请提出更改和架构建议。

最佳答案

你的瓶颈显然是nodeJS。Node 通过在单个线程中运行的事件堆栈来管理并发性,这对于花费大部分时间等待 IO 结束的 API 来说非常有用,因为主进程不会被阻塞,并且一旦任务完成,堆栈中的事件就会弹出。这种架构的问题是,当多个并发的中等负载连接同时进入服务器时,会导致资源匮乏的问题。在这种情况下,事件堆栈获得越来越多的条目,而循环无法以适当的方式处理所有这些条目,从而减慢进程,甚至导致堆溢出或意外关闭。

要在不了解架构的情况下解决此问题,我建议切换到更成熟的(从技术 Angular 来看)技术,例如 Go,拆分数据库和 API,设置多个无状态API 进程并具有负载均衡器以将调用重定向到不太繁忙的 API 实例。

如果能获得有关您的架构的更多信息,那就太好了。

关于javascript - 需要使用 Node.js 在 AWS 上实现 5000 个并发 api 点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43538242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com