目录
指标
-
关键指标:
- 并发数SBC(Simultaneous Browser Connections),客户端向服务器发起请求,并建立了TCP连接。每秒钟【服务器】接收到的链接的总TCP数量
- 响应时间(Response Time):从发送http请求(并发数),到处理完所有的http请求(并发数)所用到的时间
- 每秒请求数QPS/RPS(Query Per Second/Request Per Second):Query=查询,也相当于请求。请求数指的是客户端在建立完连接后,向http服务发出GET/POST/HEAD数据包;
- 每秒事务处理量TPS(Transaction Per Second)
- 吞吐量(Throughput)
- 同时在线用户数量
搜索结果的 Average-Time : 一般从C端用户体验来说,Average-Time 不能超过3秒的。
TPS和QPS的区别:
打个比方:你在系统上点击【同步数据】功能,这是一个事务,所以【TPS=1】;但这个事务可能需要调用A服务器的n个接口,给服务器发送n个request,所以【QPS=n】;
TPS一般会比QPS少好几个数量级,常见QPS有到亿的但TPS只到万;
-
关键指标的维度:
-平均,如:小时平均、日平均、月平均
-TP(Top Percentile),Top百分数,如:TP50、TP90、TP99、TP4个9
-最大值
-趋势
-
引申指标:
-活跃用户数,如:日活DAU(Daily Active User)、月活MAU(Monthly Active Users)
DAU=QPS*200;业内一般是放大200倍计算
-点击量PV(Page View)
-访问某站点的用户数UV(Unique Visitor)
-独立IP数IP(Internet Protocol)
-日单量
高并发现状
下面是网上查的资料:
2021全国总人口是14亿多;
2019年的【淘宝双十一】从零点开始,不到100秒,仅仅96秒,淘宝就达成了100亿的交易额!
淘宝【双十一】的QPS是1.05亿,平均每秒完成1.05亿交易额;
支付宝【双十一】的QPS是百万级(100万);
支付宝【双十一】的数据库请求峰值:4200万/秒;
12306火车票的QPS也是百万级;
携程旅行的高峰QPS也是百万级;
所以,一般业务并发没有上面那么牛的,吹个【单机】QPS=2万+ ,线上有4台服务器做负载均衡就行了;吹牛吹个千万级的QPS就过了;
如果一次性可以处理100个请求,每个请求耗时100毫秒,则 QPS = 1000(100/0.1)
如果一次性可以处理50个请求,每个请求耗时200毫秒,则 QPS = 250(50/0.2)
所以QPS与单个请求处理时间以及服务器一次性可以处理多少请求是成比例关系的。
服务器配置有好有坏,比如【高配物理机】和【低配虚拟机】;通常的配置有:cpu、内存、磁盘、带宽、网卡;
单机QPS的上限是多少呢?
说到单机,你必须明确指出硬性指标,CPU、内存、硬盘、带宽等
假定 CPU为4核、内存8G、硬盘7200转、带宽10M又比如:
固态硬盘SSD(Solid State Disk)说:我读取和写入高达 1G/秒
mysql说:我单机TPS 1W+
nginx说:我单机QPS 10W+
静儿说:给我一台56核200G高配物理机,我可以创建一个单机QPS1000W
每台搜索实例的QPS(搜索有50~60台虚拟机实例,按最大并发量,每台请求吞吐量>1000)。
注意:内存占用超过50%就影响性能了
QPS计算需多少台服务器
原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间 公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS) 机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器
那么,单台机器的QPS是多少呢?
先笼统给出一个结论:单机性能QPS达到几千已经比较优秀了!
若按照5W TCP连接来算,这个时候的qps可以推断为5000。
服务器一般都是购买的,性能上一般一致,大概2000-3000;
1G【内存】抗 10万 TCP,QPS大概为1W;
若内存为10G,则QPS理论上10W,但内存使用率不能超过50%,否则影响性能,那么认为10G内存对应 5W QPS,那么:
若目标QPS为200W,那么所需要的的服务器台数为:200W / 5W = 40台;
抗量思路
1、谁来做应用最前面的TCP连接抗量呢?
- nginx:支持数以“百万级”别的TCP连接,高达 50,000 个并发响应;
- Redis:Redis 的性能非常高,号称单机 QPS 能抗 10W 的并发;
Redis官方压测每秒10万每秒,如果线上Redis集群规模是128片,在流量均匀的场景,每次请求我们按3次Redis交互,那么能抗的量为128*10/3=426W
一般情况下nginx就可以;
2、TCP连接量有人抗了,那么如何抗QPS?
“ 如果一次性可以处理100个请求,每个请求耗时100毫秒,则 QPS = 1000(100/0.1)”
上面这句话反应的信息是:若提升处理单个请求的耗时,那么QPS就提升了;
所以抗QPS的方法落到 “如何提升处理单个请求的耗时” 上;
3、限速
QPS是以【秒】为衡量单位的,但打到服务器的高并发请求可能是在同一【毫秒】进来的,且在1秒的时间内不均匀:第1毫秒接受600万的并发,第2毫秒0并发,第3毫秒0并发... ...
于是可以通过 “限速” 在每毫秒接收10万的并发;使并发量 “均匀” ;这样服务器的压力也小些;
提升处理效率
互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。
- 垂直扩展:提升单机处理能力。垂直扩展的方式又有两种:
- 增强单机硬件性能,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G;
- 提升单机架构性能,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;
- 水平扩展:只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计是本文重点讨论的内容。
这块参考:抗住百万高并发的 6 个关键技术! - Java技术栈 - 博客园

ps: CDN 利用全局负载均衡技术将用户的访问指向离用户最近的工作正常的流媒体服务器上,由流媒体服务器直接响应用户的请求。服务器中如果没有用户要访问的内容,会根据配置自动从原服务器抓取相应的内容并提供给用户;
架构设计:
- 分布式
- 分区集群
- 负载均衡:使用LVS或F5来使多个Nginx负载均衡,通过DNS轮询实现机房间LVS的负载均衡;
- 消息中间件
- 自动扩容:Docker+K8s
- 加速:DOK阿里云CDN加速技术,CDN也能自动扩容
- 水平可扩展
- 动静分离(前端资源)
- 热点的发现与隔离
- 请求分层过滤
应用:
- 资源隔离
- 应用降级
- 服务解耦
- 读写分离
- 大应用拆分小应用
- 复用的功能抽离成微服务
- 引入企业服务总线ESB屏蔽服务接口的访问差异
数据库:
- 数据库按业务分库
- redis存热点数据,降低数据库压力
- 分布式数据库
- 分表分库
- 大表拆小表
- DBA 表优化,索引优化等
并发:
提前创建线程
线程池技术
线程池隔离
本文探讨了高并发场景下的抗量策略,包括TCP连接的抗量、QPS计算与优化、限速措施以及提升处理效率的架构设计。强调了Nginx和Redis在抗量中的作用,提出了通过优化单个请求处理时间和利用消息中间件、分布式数据库等手段提升系统并发能力。
207

被折叠的 条评论
为什么被折叠?



