如何解决高并发和大流量

简介: 名词解释:并发 在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任意一个时刻上只有一个程序在处理机上运行。
+关注继续查看

名词解释:并发

在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任意一个时刻上只有一个程序在处理机上运行。

我们说的高并发是什么?

上面的定义明显不是我们通常所言的并发,在互联网时代,所讲的并发、高并发,通常是指并发访问。也就是在某个时间点,有多少个访问同时到来通常如果一个系统的日PV在千万以上,有可能是一个高并发的系统,但是有的公司完全不走技术路线,全靠机器堆,这不在我们的讨论范围。

高并发的问题,我们具体该关心什么?

  • QPS:每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求)
  • 吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定)
  • 响应时间:从请求发出到收到响应花费的时间,例如系统处理一个HTTP请求需要100ms,这个100ms就是系统的响应时间
  • PV:综合浏览量(Page View),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量,同一个人浏览你的网站同一页面,只记作一次PV
  • UV:独立访问(UniQue Visitor),即一定时间范围内相同访客多次访问网站,只计算为1个独立访客
  • 带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小
    日网站带宽=PV/统计时间(换算到秒)平均页面大小(单位KB)8
    峰值一般是平均值的倍数,根据实际情况来定
    QPS不等于并发连接数
    QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数量
    (总PV数80%)/(6小时秒数20%)=峰值每秒请求数(QPS)
    80%的访问量集中在20%的时间!!!

QPS达到极限,各种情况如何处理?
随着QPS的增长,每个阶段需要根据实际情况来进行优化,优化的方案也与硬件条件、网络带宽息息相关。

  • QPS达到50
    可以称之为小型网站,一般的服务器就可以应付
  • QPS达到100
    假设关系型数据库的每次请求在0.01秒完成

假设单页面只有一个SQL查询,那么100QPS意味这1秒钟完成100次请求,但是此时我们并不能保证数据库查询能完成100次

方案:数据库缓存层、数据库的负载均衡

QPS达到800

假设我们使用百兆带宽,意味着网站出口的实际带宽是8M左右

假设每个页面只有10k,在这个并发条件下,百兆带宽已经吃完

方案:CDN加速、负载均衡

QPS达到1000

假设使用Memcache缓存数据库查询数据,每个页面对Memcache的请求远大于直接对DB的请求

Memcache的悲观并发数在2W左右,但有可能在之前内网带宽已经吃光,表现出不稳定

方案:静态HTML缓存

QPS达到2000

这个级别下,文件系统访问锁都成为灾难

方案:做业务分离,分布式存储

三种高并发解决方案

一、数据库缓存层的优化

  • 什么是数据库缓存?

MySQL等一些常见的关系型数据库的数据都存储在磁盘中,在高并发场景下,业务应用对MySQL产生的增、删、改、查的操作造成巨大的I/O开销和查询压力,这无疑对数据库和服务器都是一种巨大的压力,为了解决此类问题,缓存数据的概念应运而生

  • 为什么是要使用缓存?

缓存数据是为了让客户端很少甚至不访问数据库服务器进行数据的查询,高并发下,能最大程度的降低对数据库服务器的访问压力极大地解决数据库服务器的压力

  • 提高应用数据的响应速度

用户请求-->数据查询-->连接数据库服务器并查询数据-->将数据缓存起来(HTML、内存、JSON、序列化数据)-->显示给客户端
用户再次请求或者新用户访问-->数据查询-->直接从缓存中获取数据-->显示给客户端

二、CDN加速

  • 什么是CDN?

CDN的全称是Content Delivery Network,即内容分发网络,尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定

在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络

CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上

  • 使用CDN的优势?

本地Cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度

跨运营商的网络加速,保证不同网络的用户都得到良好的访问质量

远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器

自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽,分担网络流量,减轻原站点WEB服务器负载等功能

广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵

三、Web服务器的负载均衡、请求分发

  • 七层负载均衡的实现

基于URL等应用信息的负载均衡

Nginx的proxy是它一个很强大的功能,实现了7层负载均衡

  • Nginx实现的优点

功能强大,性能卓越,运行稳定

配置简单灵活

能够自动剔除工作不正常的后端服务器

上传文件使用异步模式

支持多种分配策略,可以分配权重,分配方式灵活

  • Nginx负载均衡

内置策略,扩展策略

内置策略:IP Hash、加权轮询

扩展策略:fair策略、通用hash、一致性hash

  • 加权轮询策略

首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器

当所有后端机器都down掉时,Nginx会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处于timeout的状态

  • IP Hash策略

Nginx内置的另一个负载均衡的策略,流程和轮询很类似,只是七种的算法和具体的策略有些变化

IP Hash算法是一种变相的轮询算法

相关文章
|
1月前
|
缓存 前端开发 JavaScript
设计一个高流量高并发的系统需要关注哪些点
我相信每一位开发同学多多少少都想参与或负责一个高用户、高访问、高并发的系统吧😁。一来可以增加自己实际的项目经验,有应对高并发场景的解决方案,二来是有个高并发的项目经验无疑是自己简历的一个大大的加分项。但是奈何很多人都没有机会可以参与这样的项目,本文从以下几点介绍一下设计一个高流量高并发的系统需要经历哪些步骤以及考虑哪些因素($\color{red}{文章中的不足之处还请大佬们多多指点}$)。
|
2月前
|
存储 算法 NoSQL
关于高并发限流的详谈
高并发限流是在面对大量请求并发访问时,为了保护系统的稳定性和可用性,对请求进行限制和控制的一种技术手段。下面将详细介绍高并发限流的原理、常见的限流算法以及实现方法。
25 0
|
5月前
|
算法 NoSQL 网络协议
没有10年的功力,根本不可能设计出这么好的高并发限流方案!
没有10年的功力,根本不可能设计出这么好的高并发限流方案!
|
8月前
|
安全 网络协议 Shell
高并发服务器的限制有哪些,如何提高并发量
高并发服务器的限制有哪些,如何提高并发量
高并发服务器的限制有哪些,如何提高并发量
|
9月前
|
缓存 负载均衡 前端开发
网站关于高并发时候的应该采取一些优化方案
网站关于高并发时候的应该采取一些优化方案
70 0
|
数据采集 算法 Java
高并发系统三大利器之限流
高并发系统三大利器之限流
175 0
高并发系统三大利器之限流
|
NoSQL 安全 Java
【高并发】亿级流量场景下如何实现分布式限流?看完我彻底懂了!!
在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一、京东618、秒杀、抢购促销等,这些都是典型的大流量高并发场景。关于秒杀,小伙伴们可以参见我的另一篇文章《【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!》
186 0
【高并发】亿级流量场景下如何实现分布式限流?看完我彻底懂了!!
|
算法 安全 Java
【高并发】如何实现亿级流量下的分布式限流?这些算法你必须掌握!!
在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一、京东618、秒杀、抢购促销等,这些都是典型的大流量高并发场景。关于秒杀,小伙伴们可以参见我的另一篇文章《【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!》 关于【冰河技术】微信公众号,解锁更多【高并发】专题文章。 注意:由于原文篇幅比较长,所以被拆分为:理论、算法、实战(HTTP接口实战+分布式限流实战)三大部分。理论篇参见《【高并发】如何实现亿级流量下的分布式限流?这些理论你必须掌握!!》
169 0
【高并发】如何实现亿级流量下的分布式限流?这些算法你必须掌握!!
|
设计模式 缓存 Java
【高并发】如何实现亿级流量下的分布式限流?这些理论你必须掌握!!
在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一、京东618、秒杀、抢购促销等,这些都是典型的大流量高并发场景。关于秒杀,小伙伴们可以参见我的另一篇文章《【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!》
134 0
|
设计模式 缓存 负载均衡
【高并发】如何设计一个支撑高并发大流量的系统?这次我将设计思路分享给大家!
最近不少小伙伴们都在问我:高并发专题我学了不少文章了,但是如何设计一个高并发的系统我还是一脸懵逼!这个问题怎么解决呢?其实,相信不只是问我的这些小伙伴有这个困惑,就连工作(入坑)了好几年的开发人员也都有这样的困惑:我学习了很多的高并发课程,也看了不少的高大上的文章,可就是不知道怎么去设计一个支撑高并发大流量的系统。针对小伙伴们的疑惑,这里,我就把一些设计高并发大流量的常规思路分享给大家,不一定完全正确,设计高并发大流量系统本来就是一个仁者见仁、智者见智的事情,只要是符合自身业务场景的架构思路,都是好的架构思路,架构本身来说就是没有一个完全正确的架构,而是尽量符合当时自身的业务场景,并且能够良好
293 0
推荐文章
更多