高并发学习

来自linux中国网wiki
Evan讨论 | 贡献2020年10月27日 (二) 07:58的版本 →‎并发流量 eg 1000并发
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索
单个Nginx并发尽量不要超过2w,如果你的并发都达到10w了,是时候做DNS分流了,还不行的话,就应该像Google那样直接从网卡驱动层分流了
1、html化;2、图片独立服务器;3、缓存 +内存数据库 这3点都是优化单台服务器
最重要的是 4、服务器集群(web集群+数据库集群),负载均衡少不了,软负载ngnix ,硬负载F5或dns负载,数据库使用 mongodb集群

Web开发中,什么级别才算是高并发




可以看出来高并发在网络上业界也没有明确的定义。但根据我搜索情况,一般都是pv在千万级别以上的公司才会涉及到这个概念。所以我得出一个自定义概念:如果某个系统的日pv在千万级别以上,他就可能是一个高并发的系统。


先声明几个概念, 
* QPS(TPS):每秒钟 request/事务 数量,在互联网领域,指每秒响应请求数(指http请求); 
* 吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定); 
* 响应时间:系统对一个请求做出响应的平均时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间(我认为这里应该仅包含处理时间,网络传输时间忽略)。

这里一定要注意呃,QPS ≠ 并发数  但是平时说的并发有可能就是QPS

并发是指,某个时刻有多少个访问同时到来。QPS是指秒钟响应的请求数量。那么这里就肯容易推算出一个公式:

QPS = 并发数 / 平均响应时间

后面我们的分析都是围绕这个公示来进行展开,没明白的再回味一下。

现在我们来假设一个场景:既然QPS是每秒钟处理的http请求数量。那么1s = 1000ms。假设我们当前一个http请求服务器处理完成需要100ms(即那么 平均响应时间 = 100ms )。那么它1s钟可以处理10个请求。也就是说 qps = 10。推算出 并发数 = 10 

提高并发能力

通过上面的分析,要提升并发能力,我们就需要提升我们的qps(其实这里并不完全正确,为了说明问题,我们先放弃一部分正确性)

最快速解决方案,就是增加机器。我们根据以上情况来实际计算一下。 
* 访问量:200w pv 
* QPS:10

根据日常经验,80% 的访问量集中在 20%的时间,算一下这 200w pv实际需要机器达到多少qps才能满足。

qps = (200w * 0.8) / (24 * 3600 * 0.3)

qps = 61.7

实际上如果在单机上,要求我们每秒钟处理请求必须达到 61.7 以上才行,而实际上我们当前系统的qps是 10。那么怎么解决?

方案一:上机器

个人的能力是有限的,团队的力量是无穷的。既然一台机器搞不定,我们就多上几台机器。这就涉及到db主从、读写分离、负载均衡等技术。

它的原理就是分流,把以前集中的压力分散开来。改方案见效快,灵活,实践起来也更快。

方案二:增加单机性能

单机到底性能能够增加到一个什么程度,这取决于你的机器配置,也取决于你的服务到底有多复杂。

ps: 写到这里突然有点能够理解为什网上对高并发都是讲很多请求,没有具体数据了,因为这真的只能针对业务来讲,100个并发对静态网页来说根本没有的事儿,但是对于某些密集计算型的估计…

那么常见的单机如何提升性能?比如:增加不常变化数据的缓存,开启php的opcache,优化代码(如:n+1问题、多重嵌套循环、深层递归等),db表优化等等。由于这些每一个点拿出来都够写一本书了。咋就不继续下去。

如何支应高并发

并发量

负载平均衡  SLB  CLB etc

并发流量 eg 1000并发

满足1000并发,每个文件缓存30KB,带宽大概37.5Mb。至于服务器主流dellr420和dell720各一台,一台web一台数据库,具体配置就不说了。


slb clb

性能
1.CLB 单集群的最大并发连接数超过1.2亿,可处理峰值40Gbps的流量,每秒处理包量为600万。
您可放心的将日访问超过千万的电商网站、社交 App 软件、游戏业务部署到腾讯云。
 
2.传统硬件设备如 F5 BIG-IP、Netscaler,仅支持百万级别的连接数,吞吐量小于5Gbps,无法满足"抢购"、"秒杀"等突发、海量的 Web 访问请求。
 
3.自建的 Nginx、HAProxy 等方案,最大连接数往往只有数万,无法应对互联网的海量并发请求。


nginx和阿里云的SLB的区别?
阿里云SLB的介绍:负载均衡支持包含TCP协议和UDP协议的四层负载均衡,也支持包含HTTP协议和HTTPS协议的七层负载均衡,并针对HTTPS协议提供集中化的证书管理系统,满足用户的可靠传输、快速传输与安全传输等多样化需求

Nginx是一个有负载均衡web环境,SLB是一个单独的负载均衡系统。所以有了SLB,后续的web环境可以专心做它本身的业务。


每秒的新建链接数(CPS)



连接数是 最大并发连接数,
包括 活跃连接数和非活跃连接数。

首先,建议用户在SLB实例的后端尽可能地去挂载多个可用区的ECS实例。SLB能够支持跨可用区地挂载ECS云服务器,这样可以避免某个可用区的ECS都出现故障的情况下,还有其他可用区的ECS能够接替工作,虽然跨可用区挂在ECS会存在大约2毫秒左右的延迟,但是却能够大大地提升服务的可用性。第二步就是针对于一些特别重要的业务,建议在不同的可用区分别地去购买SLB的实例。比如在可用区A和可用区B各自购买一个SLB实例,在此基础之上再使用全球负载均衡GSLB来进行实例间的调度。


阿里云推出了性能保障型的负载均衡实例。超强性能保障型实例的性能规格如上图所示,其并发连接数最大可以达到500万,每秒的新建链接数(CPS)可以达到50万,针对于七层负载均衡系统的QPS可以达到10万。除此之外,性能保障型实例还具有以下的特点:超强HTTPS性能。性能保障型实例针对于七层系统,特别是HTTPS的业务进行了优化,实现了高性能硬加解卡,并且能够实现使HTTPS的业务单实例可达10万QPS。超大并发连接数。性能保障型实例的单实例的并发连接数可达500万,所以其可承载物联网场景的下海量连接,可以支撑共享自行车、智能手表等存在特别大量长连接的场景。共享型实例平滑升级。原有的共享型实例可以平滑升级至性能保障型实例,而无需更换VIP。完善的业务监控系统。在推出性能保障型实例之后,因为每个实例都有相应的性能规格和性能指标,所以阿里云也为用户提供了完整的业务指标监控系统,并支持电话、短信、钉钉企业群等方式的告警。性能规格上图所展现的是阿里云SLB性能保障型实例的规格参数。图中的最后两行规格7、8默认在控制台上是无法购买的,目前只针对企业级用户,而且需通过客户经理申请后,通过白名单开放。如何选择规格对于保障型实例而言,主要有如下几个性能指标:最大连接数:一个实例可承载的最大连接数。新建连接数:CPS表示一个实例每秒可以新建的链接数。每秒查询数:QPS表示一个实例7层的像HTTP或者HTTPS系统的吞吐量。通常一个4层SLB的性能好坏由最大连接数和新建连接数来衡量,它们表示了一个SLB系统的并发能力和处理突发连接的能力。通常一个7层SLB的性能好坏主要由QPS决定,QPS表示了一个7层系统的吞吐量。这里需要注意的是QPS是7层独有概念。虽然每个规格都定义了三个性能指标,但是这并不代表这三个性能指标在任何一个性能场景下或者任何一个时刻都能够同时达到最大值,这里存在一个性能指标的短木板原则。比如在某一个应用系统中,QPS已经达到指标上限,但最大连接数还远远没有达到上限,这时不论怎样加大客户端数量,最大连接数都会因为QPS达到上限,而无法达到最大值。

单个监听公网带宽峰值1Gbps  


see also

什么是TPS 什么是QPS 什么是并发量 什么是PV 什么是UV

Web开发中,什么级别才算是高并发

系统吞吐量(TPS)、用户并发量、性能测试概念和公式

构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试


六大Web负载均衡原理与实现


腾讯云、阿里云负载均衡CLB优势对比

负载均衡进阶:SLB常见问题解决方法

构建分布式、高并发、高性能、高可用、大规模并发、高可扩展性、高可维护性Java应用系统,书籍推荐或经验之谈?

slb并发连接数

阿里云文档


阿里云SLB配置

进阶参考

9种高性能高可用高并发的技术架构


Nginx高并发下的优化

高并发下的 Nginx 优化

高性能高并发 面试

怎样学习才能拥有所谓“高并发”的经验

1秒1000并发 高并发需要什么样的服务器?