网站同时有多少在线用户。 CPU/memory/brandwidth
How many live users at the same time on website. CPU/memory/brandwidth
(假设场景)
我将托管一个非常简单的静态单页 html 网站。
它只会有一个类似于 "Hello world" 的简单文本和一个重定向到另一个网站的按钮 (~2kb)。
"hello world" 网站将从我的计算机 node.js 托管。
我的问题是.. 可以处理多少 "live" 用户。意思是那些只是坐在网站上每 30 秒刷新一次的人。假设约有 30000 人刷新。这意味着该网站每秒将刷新约 1000 次。此过程将在约 3 小时内激活。
什么因素在这里负责?
我的CPU?内存?带宽?
(假设设置)
与顶级路由器的 100/10mb 稳定光纤连接。
16GB 内存。
i7-2600k 3.4GHz。
让我们计算一下:
1000 refreshes/second * 2kByte = 2MByte/秒 => 16MBit/秒 + 请求的一点开销 => ~ 20MBit
因此您的 10MBit 连接会有点太慢,但在这种情况下 100MBit 就足够了。
如果您只有一个静态页面,我认为 RAM 或 CPU 电源不会成为问题。
但我应该补充一点,我真的没有这方面的经验。
这完全取决于您的 Hello World 应用程序在做什么。如果它正在为您的用户求解微分方程,它将使用很多 CPU。如果它用作流媒体电影服务器,带宽和内存使用量将很大。下面的 hello world 应用程序在具有 ~2GB 内存的双核 VM 上使用 Apache 基准测试程序进行了测试,以大致了解人们可能期望的结果。
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<p>Hello World</p>');
res.end();
}).listen(8080);
如您所见,这个程序非常基础,运行没有框架也没有逻辑。其中任何一个都会显着改变这些结果。 -n
参数是测试中的总请求数,-c
参数显示每秒的请求数。
ab -n 30000 -c 1000 <URL>
请注意,文档长度为 18 个字节。那里的任何增加都会线性扩展您的带宽(因此,如果您有一个 1kB html 文件,您将看到大约 1kB * 1000/sec = ~8mbps 带宽,大约是上游 link 的 80% ).为此,缓存非常重要。在每秒处理 1000 个请求时,节点使用了 CPU 的 99%(因为 1000 个并发连接可能使它的响应能力饱和,因此它总是有事情要做)。然而,node 的一个好处是它使用相对较少的内存来实现高并发,因此它徘徊在 2GB 可用内存的 3% 左右。
Document Path: /
Document Length: 18 bytes
Concurrency Level: 1000
Time taken for tests: 5.355 seconds
Complete requests: 30000
Failed requests: 0
Total transferred: 3540000 bytes
HTML transferred: 540000 bytes
Requests per second: 5602.75 [#/sec] (mean)
Time per request: 178.484 [ms] (mean)
Time per request: 0.178 [ms] (mean, across all concurrent requests)
Transfer rate: 645.63 [Kbytes/sec] received
希望这对您设计应用程序有所帮助!
(假设场景)
我将托管一个非常简单的静态单页 html 网站。 它只会有一个类似于 "Hello world" 的简单文本和一个重定向到另一个网站的按钮 (~2kb)。
"hello world" 网站将从我的计算机 node.js 托管。 我的问题是.. 可以处理多少 "live" 用户。意思是那些只是坐在网站上每 30 秒刷新一次的人。假设约有 30000 人刷新。这意味着该网站每秒将刷新约 1000 次。此过程将在约 3 小时内激活。 什么因素在这里负责? 我的CPU?内存?带宽?
(假设设置)
与顶级路由器的 100/10mb 稳定光纤连接。
16GB 内存。
i7-2600k 3.4GHz。
让我们计算一下:
1000 refreshes/second * 2kByte = 2MByte/秒 => 16MBit/秒 + 请求的一点开销 => ~ 20MBit
因此您的 10MBit 连接会有点太慢,但在这种情况下 100MBit 就足够了。
如果您只有一个静态页面,我认为 RAM 或 CPU 电源不会成为问题。
但我应该补充一点,我真的没有这方面的经验。
这完全取决于您的 Hello World 应用程序在做什么。如果它正在为您的用户求解微分方程,它将使用很多 CPU。如果它用作流媒体电影服务器,带宽和内存使用量将很大。下面的 hello world 应用程序在具有 ~2GB 内存的双核 VM 上使用 Apache 基准测试程序进行了测试,以大致了解人们可能期望的结果。
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<p>Hello World</p>');
res.end();
}).listen(8080);
如您所见,这个程序非常基础,运行没有框架也没有逻辑。其中任何一个都会显着改变这些结果。 -n
参数是测试中的总请求数,-c
参数显示每秒的请求数。
ab -n 30000 -c 1000 <URL>
请注意,文档长度为 18 个字节。那里的任何增加都会线性扩展您的带宽(因此,如果您有一个 1kB html 文件,您将看到大约 1kB * 1000/sec = ~8mbps 带宽,大约是上游 link 的 80% ).为此,缓存非常重要。在每秒处理 1000 个请求时,节点使用了 CPU 的 99%(因为 1000 个并发连接可能使它的响应能力饱和,因此它总是有事情要做)。然而,node 的一个好处是它使用相对较少的内存来实现高并发,因此它徘徊在 2GB 可用内存的 3% 左右。
Document Path: /
Document Length: 18 bytes
Concurrency Level: 1000
Time taken for tests: 5.355 seconds
Complete requests: 30000
Failed requests: 0
Total transferred: 3540000 bytes
HTML transferred: 540000 bytes
Requests per second: 5602.75 [#/sec] (mean)
Time per request: 178.484 [ms] (mean)
Time per request: 0.178 [ms] (mean, across all concurrent requests)
Transfer rate: 645.63 [Kbytes/sec] received
希望这对您设计应用程序有所帮助!