概念
高并发通常是指我们提供的系统服务能够同时处理很多请求。
了解下概念:
- QPS(TPS):每秒钟reques/事务 数量,指每秒应对的请求数(http请求);
- 吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定);
- 响应时间:系统对一个请求做出响应的平均时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间(我认为这里应该仅包含处理时间,网络传输时间忽略)。
- 并发是指,某个时刻有多少个访问同时到来,处理多个任务的能力,不一定要同时
- 并行是同时刻在多个cpu核心发生的事件,并发是单个cpu核心在一个时间段内交替发生的事件
QPS = 并发数 / 响应时间
二八原则:80%的业务量在20%的时间里完成
TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。(业务TPS = CAPS × 每个呼叫平均TPS)
QPS:每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。
场景
假定总并发请求数量为10000,每个请求的处理时间为t秒,服务器一次性可以处理的请求数量为n个,那么处理完所有的请求需要用时为T
T = (10000 / n ) * t
反过来计算每秒处理多少请求则
QPS = (1 / t ) * n
假设我们每天80%的访问集中在20%的时间里(峰值),如果每天有300万的pv,而 我们的单台机器的QPS为58,运行在单机上(当然经常宕机),按照上面的系统性能数据,给出优化解决方案。
qps = ( 300W x 0.8 ) / ( 24x3600x0.2 ) = 139
方案一:加机器
既然一台机器搞不定,我们就多上几台机器。这就涉及到db主从、读写分离、负载均衡等技术。
它的原理就是分流,把以前集中的压力分散开来。改方案见效快,灵活,实践起来也更快。
所以机器上需要 139/58 台
方案二:增加单机性能
单机到底性能能够增加到一个什么程度,这取决于你的机器配置,也取决于你的服务到底有多复杂。
常见比如:提高机器cpu、memory(可以提高系统同时处理请求的数量);php启用opcache缓存;运用各种数据缓存技术;代码性能优化;数据库优化;运用常驻内存的技术;
分析
假设现在需要你设计个系统,来分析当前产品各个接口的qps,及当前系统的qps情况。
qps = 时间段内请求数/时间段
假设我们以每分钟或者每小时来运算。首先对每次请求记录日志包含响应时间、响应结果(每次请求用一个唯一标识标记)记录到日志文件,后端起个进程对日志文件读取,将数据发送到队列系统,另一方队列消费,落地到数据库或者nosql,接下来
就是对这些数据进行分析,不难分析qps吧,这样的日志系统也可以作为全局日志系统,供公司各个业务线查询日志,也可以起到监控预警的作用(比如说请求超时、访问量激增异常)。为什么不直接入库分析,这样的方案大流量下不会造成性能问题。
【feek 指定行指针;fgets 获取行内容;feof 判断是不是到达末尾】