gpt4 book ai didi

mysql - 性能问题(Nginx、NodeJs、Mysql)

转载 作者:行者123 更新时间:2023-11-29 10:19:23 25 4
gpt4 key购买 nike

我遇到以下问题。使用 REST,我通过 NodeJS Express 应用程序从 MySql 数据库获取二进制内容 (BLOB)。一切正常,但我在扩展解决方案时遇到问题。

我将 NodeJS 实例的数量增加到 3 个:它们运行端口 4000,4001,4002。在同一台机器上,我安装并配置了 Nginx,以在 3 个实例之间进行负载平衡。我正在使用 Apache Bench 进行一些性能测试。请参阅附图。

Perf testing

假设我有一个虚拟的 GET REST 去数据库,读取 blob(大小大约 600KB)并将其返回(所有 http),我将同时进行 300 个调用。我本以为使用 nginx 来分发请求会使其速度更快,但事实并非如此。 enter image description here

为什么会发生这种情况?我假设它与 MySql 有关?我的 NodeJs 应用程序使用的连接池的限制设置为 100 个连接。这个值和Mysql中的最大连接值应该有什么关系呢?如果我将连接池增加到更高的连接数,则会得到更糟糕的结果。

关于如何扩展有什么建议吗?

谢谢!

最佳答案

“300 个同时”是愚蠢的。 (今天)没有人拥有足够的资源来有效地完成几十件以上的事情。

  • 4 个 CPU 核心 - 如果线程数量超过 4 个,它们在尝试获取 CPU 时间时会遇到困难。
  • 1 个网络 - 您是否检查过您的大 blob 是否正在使用所有带宽,从而成为瓶颈?
  • 1 个 I/O channel - 同样,大量数据可能会填满磁盘路径。

(这个数学不太正确,但它很有意义......)您无法有效地比 4+1+1“同时”连接获得的运行速度更快。 (实际上,你也许可以,但不是 300!)

典型的基准测试试图找出有多少“连接”(或其他什么)导致系统崩溃。那些难以阅读的屏幕截图表明每秒 7 次是极限。

我对“同时”这个词也有异议。 (在您的系统中)唯一接近“同时”的是能够“同时”使用 4 个核心。其他所有指标都涉及资源共享。根据你的说法,...

  • 如果每秒启动大约 7 个,某些资源将会被用完,但每个请求都会很快(可能不到一秒)
  • 如果您同时启动 300 个,它们会互相绊倒,其中一些可能需要分钟才能完成。

有两个有趣的指标:

  • 您每秒可以维持多少次。 (也许 7/秒)
  • 平均(或许还有 95% 百分位数)需要多长时间。

尝试 10 个“同时”连接并报告。尝试 7。尝试一些其他类似的小数字。

关于mysql - 性能问题(Nginx、NodeJs、Mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49586556/

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