如何解决高并发和大流量

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 名词解释:并发在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任意一个时刻上只有一个程序在处理机上运行。

名词解释:并发

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

我们说的高并发是什么?

上面的定义明显不是我们通常所言的并发,在互联网时代,所讲的并发、高并发,通常是指并发访问。也就是在某个时间点,有多少个访问同时到来通常如果一个系统的日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算法是一种变相的轮询算法

相关文章
|
7月前
|
缓存 NoSQL 关系型数据库
亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证
你们有多少人是被面试官问到过Redis和MySQL的数据一致性如何保证的? 你们是否考虑过在高并发场景下,Redis与MySQL的同步会有哪些问题?该如何解决? 本篇文章会带大家详细了解,让你知其然,知其所以然,吊打面试官。
521 0
亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证
|
3月前
|
消息中间件 存储 负载均衡
高并发流量杀手锏:揭秘秒杀系统背后的削峰技术!
本文介绍了秒杀场景下的“削峰填谷”策略,通过消息队列缓冲用户请求,避免高并发对系统造成冲击。文中详细解释了消息队列的工作原理及如何通过预扣减库存和分布式锁确保数据一致性,同时还提出了合理的消息队列配置、高可用性及数据库负载均衡等最佳实践。通过这些技术手段,可有效提升系统的稳定性和用户体验。
168 8
高并发流量杀手锏:揭秘秒杀系统背后的削峰技术!
|
4月前
|
存储 SQL 关系型数据库
(二十一)MySQL之高并发大流量情况下海量数据分库分表的正确姿势
从最初开设《全解MySQL专栏》到现在,共计撰写了二十个大章节详细讲到了MySQL各方面的进阶技术点,从最初的数据库架构开始,到SQL执行流程、库表设计范式、索引机制与原理、事务与锁机制剖析、日志与内存详解、常用命令与高级特性、线上调优与故障排查.....,似乎涉及到了MySQL的方方面面。但到此为止就黔驴技穷了吗?答案并非如此,以《MySQL特性篇》为分割线,整个MySQL专栏从此会进入“高可用”阶段的分析,即从上篇之后会开启MySQL的新内容,主要讲述分布式、高可用、高性能方面的讲解。
327 1
|
5月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
6月前
|
存储 安全 应用服务中间件
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
298 0
|
7月前
|
存储 安全 应用服务中间件
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
408 0
|
BI Sentinel
最新发布!阿里巴巴内部实战AlibabaSentinel高并发流量治理手册
为什么要使用Sentinel? Sentinel使用简单、配置灵活,可将Sentinel的动态数据源接口与配置中心结合使用,动态地改变流量规则。Sentinel提供的流量控制功能有限流、熔断、系统自适应、授权等。笔者当时使用了熔断和系统自适应功能应对突增流量导致服务雪崩的问题,同时使用限流功能并结合信号量隔离、匀速限流效果控制器,应对内部定时任务瞬时高并发调用某服务接口的问题。
134 0
最新发布!阿里巴巴内部实战AlibabaSentinel高并发流量治理手册
|
BI Sentinel
最新发布!阿里巴巴内部实战AlibabaSentinel高并发流量治理手册
为什么要使用Sentinel? Sentinel使用简单、配置灵活,可将Sentinel的动态数据源接口与配置中心结合使用,动态地改变流量规则。Sentinel提供的流量控制功能有限流、熔断、系统自适应、授权等。笔者当时使用了熔断和系统自适应功能应对突增流量导致服务雪崩的问题,同时使用限流功能并结合信号量隔离、匀速限流效果控制器,应对内部定时任务瞬时高并发调用某服务接口的问题。
|
缓存 前端开发 JavaScript
设计一个高流量高并发的系统需要关注哪些点
我相信每一位开发同学多多少少都想参与或负责一个高用户、高访问、高并发的系统吧😁。一来可以增加自己实际的项目经验,有应对高并发场景的解决方案,二来是有个高并发的项目经验无疑是自己简历的一个大大的加分项。但是奈何很多人都没有机会可以参与这样的项目,本文从以下几点介绍一下设计一个高流量高并发的系统需要经历哪些步骤以及考虑哪些因素($\color{red}{文章中的不足之处还请大佬们多多指点}$)。
165 0
|
弹性计算 缓存 负载均衡
阿里云云计算ACP实验考试之高并发访问时流量分发和会话保持的实现
阿里云云计算ACP实验考试之高并发访问时流量分发和会话保持的实现
261 0
阿里云云计算ACP实验考试之高并发访问时流量分发和会话保持的实现