高并发性能指标

QPS,每秒查询

QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。注意这里的查询是指用户发出请求到服务器做出响应成功的次数,简单理解可以认为查询=请求request。所以:QPS = 每秒的请求量

TPS,每秒事务

Transactions Per Second 的缩写,每秒处理的事务数。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

针对单接口而言,TPS可以认为是等价于QPS的,比如访问一个页面/index.html,是一个TPS,而访问/index.html页面可能请求了3次服务器比如css、js、index接口,产生了3个QPS。

tps=每秒钟事务数量

RT,响应时间

RT(Response-time)响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。一般取平均响应时间。

Load(系统负载)

linux服务器上执行top或uptime命令,即可看到服务器端Load。
top命令示例

top - 14:33:45 up 279 days,  3:30,  1 user,  load average: 0.00, 0.03, 0.05
Tasks: 191 total,   2 running, 189 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.4 us,  0.2 sy,  0.0 ni, 99.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  5944432 total,  1414544 free,  3402840 used,  1127048 buff/cache
KiB Swap:  5242876 total,  4302588 free,   940288 used.  2233924 avail Mem

uptime示例

14:51:22 up 279 days,  3:47,  1 user,  load average: 0.02, 0.04, 0.05

load average后面的3个数就是第1分钟、5分钟、15分钟的平均Load。load average 的值越低,系统负荷越小。示例中我们的系统负载就很低。1或大于1表示满负荷甚至超负荷,如果持续飙高那说明负载有问题了。

一般情况下,当系统负荷持续大于0.7的时候可能就需要我们重视了。

并发数

系统能同时处理的请求的数量。例如,请求一个index.html 页面,客户端发起了三个请求(css、js、index接口),那么此时TPS =1 、QPS =3 、并发数 3。

QPS = 并发数 / RT,所以: 并发数 = QPS * RT

吞吐量

每秒承受的用户访问量,吞吐量(系统能承受多少压力)和当前请求对CPU消耗、内存、IO使用等等紧密相关。单个请求消耗越高,系统吞吐量越低,反之越高。

TPS 、QPS、并发数,每个系统针对这些值都有一个相对极限值,只要其中某一个达到最大,系统的吞吐量也就到达极限了。

PV

页面访问次数:Page View

UV

访客数(去重复):Unique Visitor

服务器数量推算

按二八定律来看,如果每天 80% 的访问集中在 20% 的时间里,这 20% 的时间就叫做峰值时间。

峰值时间段每秒QPS = ( 总PV数 * 80% ) / ( 每天秒数 * 20% )
峰值时间每秒QPS / 单台机器的QPS = 需要的机器

假设每天300w PV 的在单台机器上,这台机器需要多少QPS?
( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)
如果一台机器的QPS是58,需要几台机器来支持?
139 / 58 = 3

单线程QPS

单线程QPS = 1000ms/RT
我们知道一台服务器可以执行多个线程,这意味着

单服务器的QPS = 单线程QPS * 线程个数 * cpu个数

但是,以上算法有个问题,随着线程数的增长,各个线程在等待cpu的时间将变长,RT会变大,如果持续增加系统负载,可能导致系统崩溃,qps降到0。

RT = 线程在CPU执行时间 + 线程等待CPU执行时间

最佳线程数量计算

假设:RT = 执行时间 50ms + 等待时间 200ms
理论上来说(实际情况远比我们此时的计算复杂,我们只是需要计算一个大概的最佳线程数量),在此RT在等待的200ms中,我们的系统还能处理其他的RT,那么这200ms可以处理等数量为 200/50 = 4。加上我们的RT本身,也就是在RT的时间内(50ms + 200ms)可以处理5个RT。

最佳线程数量 = (执行时间 50ms + 等待时间 200ms)/执行时间 50ms

以上是在单核cpu,以及不考虑cpu其他情况下的理想计算。我们最终推导的公式如下:

最佳线程数量 = (执行时间 + 等待时间 )/执行时间 * cpu个数 * cpu利用率

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高性能并发服务器项目实战是指在实际项目中开发和部署能够处理高并发请求的服务器。在这个项目中,我们需要考虑到服务器的性能和并发处理能力。 首先,我们需要选择适合的服务器框架和编程语言,例如Java或C++。这些语言具有较高的性能和并发处理能力,可以满足大量请求的需求。 其次,我们需要进行服务器的优化和扩展设计。可以通过使用多线程线程池、异步IO等技术来提高服务器的并发处理能力。同时,还需要考虑服务器的物理资源和网络带宽等因素,以确保服务器能够支持高并发量。 然后,我们需要对服务器进行压力测试和性能优化。可以使用工具,如JMeter或wrk来模拟大量并发请求,并监测服务器的性能指标,如吞吐量、响应时间等。通过分析测试结果,我们可以找出性能瓶颈并进行相应的优化,如代码优化、数据库优化、缓存策略等。 最后,我们需要进行服务器集群和负载均衡的部署。通过将服务器部署在多台机器上,并使用负载均衡器来分发请求,可以进一步提高服务器的性能和可扩展性。同时,还需要考虑服务器的容灾和备份策略,以确保系统的高可用性和可靠性。 总之,高性能并发服务器项目实战是一个综合性的项目,需要综合考虑多个因素,包括服务器框架的选择、优化设计、性能测试与优化、集群部署等。只有通过不断的实践和优化,才能够开发出满足高并发请求的高性能服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值