高并发分析

概念

高并发通常是指我们提供的系统服务能够同时处理很多请求。

了解下概念:

  • QPS(TPS):每秒钟reques/事务 数量,指每秒应对的请求数(http请求);
  • 吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定);
  • 响应时间:系统对一个请求做出响应的平均时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间(我认为这里应该仅包含处理时间,网络传输时间忽略)。
  • 并发是指,某个时刻有多少个访问同时到来,处理多个任务的能力,不一定要同时
  • 并行是同时刻在多个cpu核心发生的事件,并发是单个cpu核心在一个时间段内交替发生的事件

QPS = 并发数 / 响应时间

二八原则:80%的业务量在20%的时间里完成

场景

假定总并发请求数量为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 判断是不是到达末尾】

猜你喜欢

转载自www.cnblogs.com/followyou/p/10991462.html