你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对?

你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算呢? 

PV是什么:

PV是page view的简写。PV是指页面的访问次数,每打开或刷新一次页面,就算做一个pv。

计算模型:
每台服务器每秒处理请求的数量=((80%*总PV量)/(24小时*60分*60秒*40%)) / 服务器数量 。
其中关键的参数是80%、40%。表示一天中有80%的请求发生在一天的40%的时间内。24小时的40%是9.6小时,有80%的请求发生一天的9.6个小时当中(很适合互联网的应用,白天请求多,晚上请求少)。

 

简单计算的结果:
((80%*500万)/(24小时*60分*60秒*40%))/1 = 115.7个请求/秒
((80%*100万)/(24小时*60分*60秒*40%))/1 = 23.1个请求/秒

初步结论:
现在我们在做压力测试时,就有了标准,如果你的服务器一秒能处理115.7个请求,就可以承受500万PV/每天。如果你的服务器一秒能处理23.1个请求,就可以承受100万PV/每天

 

留足余量:

以上请求数量均匀的分布在白天的9.6个小时中,但实际情况并不会这么均匀的分布,会有高峰有低谷。为了应对高峰时段,应该留一些余地,最少也要x2倍,x3倍也不为过。

115.7个请求/秒 *2倍=231.4个请求/秒

115.7个请求/秒 *3=347.1个请求/秒

23.1个请求/秒 *2=46.2个请求/秒

23.1个请求/秒 *3=69.3个请求/秒

 

最终结论:

如果你的服务器一秒能处理231.4--347.1个请求/秒,就可以应对平均500万PV/每天。

如果你的服务器一秒能处理46.2--69.3个请求,就可以应对平均100万PV/每天

 

说明:

这里说明每秒N个请求,就是QPS。因为我关心的是应用程序处理业务的能力。 

 

实际经验:

1、根据实际经验,采用两台常规配置的机架式服务器,配置是很常见的配置,例如一个4核CPU+4G内存+服务器SAS硬盘

2、个人武断的认为在服务器CPU领域Intel的CPU要优于AMD的CPU,有反对的就反对吧,我都说我武断了(请看CPU性能比较),不要太相信AMD的广告,比较CPU性能简单办法就是比价格,不要比频率与核心数,价格相差不多的性能也相差不多。

3、硬盘的性能很重要,由其是数据库服务器。一般的服务器都配1.5万转的SAS硬盘,高级一点的可以配SSD固态硬盘,性能会更好。最最最最重要的指标是“随机读写性能”而不是“顺序读写性能”。(本例还是配置最常见的1.5万转的SAS硬盘吧

4、一台服务器跑Tomcat运行j2ee程序,一台服务器跑MySql数据库,程序写的中等水平(这个真的不好量化),是论坛类型的应用(总有回帖,不太容易做缓存,也无法静态化)。

5、以上软硬件情况下,是可以承受100万PV/每天的。(已留有余量应对突然的访问高峰)

 

注意机房的网络带宽:

有人说以上条件我都满足了,但实际性能还是达不到目标。这时请注意你对外的网络的带宽,在国内服务器便宜但带宽很贵,很可能你在机房是与大家共享一条100M的光纤,实际每个人可分到2M左右带宽。再好一点5M,再好一点双线机房10M独享,这已经很贵了(北京价格)。

一天总流量:每个页面20k字节*100万个页面/1024=19531M字节=19G字节,

19531M/9.6小时=2034M/小时=578K字节/s   如果请求是均匀分布的,需要5M640K字节带宽(5Mb=640KB 注意大小写,b是位,B是字节,差了8倍),但所有请求不可能是均匀分布的,当有高峰时5M带宽一定不够,X2倍就是10M带宽。10M带宽基本可以满足要求。

以上是假设每个页面20k字节,基本不包含图片,要是包含图片就更大了,10M带宽也不能满足要求了。你自已计算吧。

(全文完)

 

 

 

附:性能测试基本概念
---------------------------------------------------------------------------------------
基本概念:
Throughput(吞吐量):按照常规理解网络吞吐量表示在单位时间内通过网卡数据量之和,其中即包括本机网卡发送出去的数据量也包括本机网卡接收到的数据量。 一个100Mb(位)的双工网卡,最大发送数据的速度是12.5M字节/s ,
最大接收数据的速度是12.5M字节/s, 可以 同时 收发 数据。
并发用户数:是同时执行操作的用户(线程数)。
响应时间:从请求发出到收到响应花费的时间 。


QPS
- Queries Per Second  每秒处理的查询数(如果是数据库,就相当于读取)
TPS
- Transactions Per Second  每秒处理的事务数(如果是数据库,就相当于写入、修改)
IOPS,每秒磁盘进行的I/O操作次数

例如对某个数据库测试,分开两次测QPS与TPS。
QPS(读取)值总是高于TPS(写、改),并且有倍率关系,因为:
1、数据库对查询可能有缓存。
2、机械硬盘或SSD硬盘的读就是比写快。

---------------------------------------------------------------------------------------
JMeter测试参数说明:

Label:每一个测试单元的名字。

#Samples:表示一个测试单元一共发出了多少个请求。

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间。,不重要。

Median:中位数,也就是 50% 用户的响应时间,如果把响应时间从小到大顺序排序,那么50%的请求的响应时间在这个范围之内。重要。

90% Line:90% 用户的响应时间,如果把响应时间从小到大顺序排序,那么90%的请求的响应时间在这个范围之内。重要

Min:最小响应时间,不重要。

Max:最大响应时间,出现几率只不过是千分之一甚至万分之一,不重要。

Error%:本次测试中出现错误的请求的数量

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

KB/Sec:每秒从服务器端接收 到的数据量(只是接收),相当于LoadRunner中的Throughput/Sec
---------------------------------------------------------------------------------------
loadrunner测试参数说明:

响应时间:
取90%值,如果把响应时间从小到大顺序排序,那么90%的请求的响应时间在这个范围之内。重要。

每秒点击数 :hits per Second,每秒钟向服务器提交请求的数量。

TPS: Transaction per Second ,每秒事务数,一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程

Throughput(吞吐量): Loadrunner记录的Throughput是接收到服务器返回的所有字节数之和,与本地发出的字节数无关。

Throughput/Sec: 每秒的吞吐量。

对于BS架构的一般分析 响应时间、点击率、吞吐量、TPS(每秒事务数)。
对于CS架构的一般分析 TPS(每秒事务数)

---------------------------------------------------------------------------------------
Apache ab测试参数说明:

RPS:
Request per Second,每秒处理的请求数
详见:
http://blog.chinaunix.net/u3/108043/showart_2260477.html

<think>嗯,用户问的是如果一台Apache服务器并发连接数是150,每个页面有40个资源,那PV量大约是多少。首先,我需要理解这些术语的具体含义。PV是页面浏览量,每个用户访问一个页面就算一次PV。而并发连接数通常指的是同时处理请求数量。每个页面有40个资源,可能指的是每个页面需要加载40个不同的文件,比如图片、CSS、JS等。 首先,我需要确定并发连接数的计算方式。通常,Apache的并发连接数是指同一时间处理请求数。假设每个页面请求会同时产生多个资源请求,这里每个页面有40个资源,所以一个用户访问一个页面可能需要建立40个连接。不过,实际情况中浏览器可能会并行下载多个资源,但也会有并发限制,比如同一个域名下浏览器通常最多同时打开6个连接。因此,这里可能需要考虑实际情况中的并行下载数量。 假设每个用户的页面访问需要40个资源请求,那么每个用户实际上会占用40个并发连接。不过如果浏览器有并发限制,比如每个域名6个连接,那么可能需要分批次加载,这样每个用户的实际并发可能不会达到40,而是分多个时间段完成。但用户的问题可能希望简化计算,所以暂时假设每个页面需要同时处理40个资源请求。 接下来,并发数150意味着服务器同一时间可以处理150个请求。如果每个页面需要40个请求,那么并发用户数就是150 / 40 ≈ 3.75,大约同时有3.75个用户在访问。不过这可能不太合理,因为实际中用户访问页面后会有间隔时间,比如用户阅读页面的时间,这时候可能不需要占用并发连接。因此,可能需要用并发用户数乘以每个用户的平均请求速率来计算。 另一种方法是使用PV的计算公式:PV = 并发数 × 每秒请求数 × 86400(一天的秒数)。但需要确定每秒请求数。不过这里的并发数是指同时处理请求数,而每个请求处理时间会影响每秒请求数。比如,如果每个请求处理时间是0.1秒,那么每秒可以处理10个请求,这样并发数150的话,每秒处理150 / 0.1 = 1500请求? 不太对,可能需要重新考虑。 或者,考虑QPS(每秒查询数)和并发数的关系:QPS = 并发数 / 平均响应时间。假设每个资源请求的平均响应时间是0.5秒,那么QPS就是150 / 0.5 = 300。每秒处理300个请求,每个页面有40个资源,所以每秒处理的页面数就是300 / 40 = 7.5个页面/秒。然后PV就是7.5 × 86400 ≈ 648,000。不过这里假设的是服务器持续满负荷运行,这可能不太现实,需要考虑峰值和低谷。 另外,用户可能希望得到一个简化的估算,而不是精确计算。所以可能需要给出一个估算公式,并说明假设条件。例如:PV ≈ (并发数 / 每个页面的资源数) × 平均每个用户的会话时长 × 每天的活跃用户数。但可能需要更直接的公式。 或者,假设服务器持续以最大并发处理请求,每个页面需要40个资源,每个资源处理时间为T秒,那么每秒处理的页面数为150 / (40 × T)。如果每个资源处理时间T是0.1秒,那么每秒处理150 / (40×0.1) = 37.5页面/秒,PV=37.5 × 86400 ≈ 3,240,000。但这里的处理时间T会影响结果,用户可能没有给出,所以需要假设一个合理的T值,或者指出需要这个参数。 不过用户的问题可能希望用更简化的方式估算,比如假设每个页面的所有资源同时被处理,那么并发数150意味着可以同时处理150/40≈3.75个页面。如果每个页面的处理时间是1秒,那么每秒处理3.75个页面,PV=3.75×86400≈324,000。或者如果处理时间更短,比如0.5秒,那么PV=648,000。 可能用户希望得到一个粗略的估算,所以可能需要明确说明假设条件,比如假设每个资源请求处理时间,或者服务器的吞吐量。或者,使用经验公式,比如PV并发数 × 每个页面资源数 × 86400 / 页面平均加载时间。但需要明确页面加载时间。 可能需要指出,这个估算需要考虑多个因素,包括每个请求处理时间、用户访问模式、峰值时段等,因此只能给出一个理论上的最大值或粗略估计。例如,如果服务器一直以最大并发处理请求,每个页面需要40个资源,每个资源处理时间为T秒,那么PV = (150 / 40) * (86400 / T)。如果假设T=1秒,那么PV= (150/40)*86400 ≈ 324,000。如果T=0.5秒,则是648,000。 但用户可能没有给出处理时间,所以可能需要指出需要这个参数,或者给出一个常见的假设值。例如,通常一个请求处理时间可能在几十到几百毫秒,假设平均0.1秒,那么PV= (150/40)*(86400/0.1)= 3.75 * 864000=3,240,000。但这样数值可能太大,实际情况中服务器不可能全天满负荷运行,所以需要考虑服务器负载率和访问分布。 因此,更合理的估算可能需要考虑服务器每天的峰值时间和平均负载。例如,假设服务器在高峰时段处理最大并发,其他时间较低,或者取一个平均并发数。但用户给出的并发数是150,可能是指最大并发,所以理论上的最大PV可能按照150并发持续处理来计算。 总结,可能的回答是:PV ≈ (并发数 × 86400) / (每个页面的资源数 × 平均请求处理时间)。需要假设平均请求处理时间,比如0.1秒,则PV= (150×86400)/(40×0.1)= 3,240,000。但需要说明这只是一个理论值,实际情况会受到多种因素影响。</think>以下是PV量的简要估算方法与参考结果: --- ### **核心计算公式** PV ≈ $\frac{并发数 \times 86400}{页面资源数 \times 平均请求处理时间}$ --- ### **关键参数假设** 1. **并发数**:150(同时处理的HTTP请求数) 2. **页面资源数**:40(每个页面包含的CSS/JS/图片等) 3. **平均请求处理时间**:取典型值0.1秒(需根据服务器性能调整) 4. **全天有效服务时间**:按24小时计算(86400秒) --- ### **理论最大估算** PV = $\frac{150 \times 86400}{40 \times 0.1}$ = **3,240,000次/** --- ### **实际场景修正** 1. **负载波动**: 实际流量存在波峰波谷,建议按30%负载率计算: $3,240,000 \times 0.3$ ≈ **1,000,000次/** 2. **资源类型影响**: - 静态资源(如图片)可能启用缓存,减少实际请求量 - 动态请求(如API)处理时间更长 3. **连接复用**: 现代浏览器支持HTTP/2多路复用,实际资源请求可能非完全串行 --- ### **性能验证建议** 1. **压力测试**: ```bash ab -c 150 -n 10000 http://your-server/testpage/ ``` 2. **监控指标**: ```bash watch "ss -s | grep 'Total:'" # 查看实时连接数 top -p $(pgrep httpd) # 监控CPU/内存占用 ``` --- ### **扩展场景分析** | 请求处理时间 | 理论PV | 修正后PV(含波动) | |--------------|----------------|----------------------| | 0.05秒 | 6,480,000 | ~2,000,000 | | 0.1秒 | 3,240,000 | ~1,000,000 | | 0.2秒 | 1,620,000 | ~500,000 | --- ### **注意事项** 1. 该估算未考虑: - TCP连接建立/断开开销 - 数据库查询等后端延迟 - 网络带宽瓶颈 2. 生产环境建议: - 使用CDN分流静态资源 - 启用gzip压缩和缓存头 - 通过`worker MPM`调优Apache进程数 --- 通过以上估算可知,在常规配置下该服务器PV可达百万级别,但实际需结合具体业务场景和性能测试确定。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值