什么是高并发,有什么意义
当我们谈论高并发时,我们指的是系统在同一时间内能够处理大量的并发请求。
如电子商务、金融交易、社交媒体、在线游戏和视频流媒体等都需要一定的高并发,比如实时竞技,你开枪了,对面由于延迟还没死,对吧,那就离谱。
比如拼多多百亿补贴,淘宝双十一活动,等等,对吧,商品就五个,谁抢到是谁的,那同时抢的可不是几个人几百人,而是上千万甚至更多,那机器听谁的,该给谁,谁延迟低给谁么?其他人怎么办,卡死了,死机了?
金融行业就更不用说了,开盘抄底还是抄家,系统能抗住吗?
因此,了解高并发的挑战和应对策略变得尤为重要。
高并发实现思路
以商品抢购系统为例,当大促活动开始时,可能有上千万个用户会点击商品,进入商品详情页,一直点击抢购按钮。可能要发送数亿次请求来获取商品数据。
数据是从哪里获取的呢?归根结底是服务器,那你的服务器怎么办能够提供数亿次的访问请求呢。
根据用户请求的生命周期,可以得到如下互联网流量漏斗图:

互联网用户访问漏斗图
由上至下分析流量漏斗过程和用到的技术:
- 首先,用户在客户端(前端)发起抢购请求。为防止流量过大,可以使用有损服务来放弃一部分数据的一致性和完整性(“有损”服务 定义:在不损坏主流程、核心功能的前提下,让系统 做一些取舍的操作,比如超时设置,熔断,限流,重试,资源隔离,就像参加活动的时候有些人会提示活动用户过多一样,在上一个页面提示,阻止这部分用户进如下一个环节),或者采用业务限流(比如加验证码,特别是图形验证等不容易被技术攻破的场景,所以现在的验证码是越来越看不懂了。)
- 请求域名被DNS解析成IP或CNAME(CDN + 静态化)
- 请求发送至解析到的负载均衡机器(L5、LVS等)
- 请求被负载均衡器转发至接入层网关(Nginx、HAProxy等)
- 请求被转发至应用服务器实例(如果底层是微服务,可能还有一层应用层网关,比如Zuul),应用服务负责读取数据、执行业务逻辑。在服务中耗时的操作可以采用消息队列进行异步化。qps过高时,可采用服务熔断和降级。
- 服务先从缓存层(如redis集群)中读取数据,如果命中缓存,直接读取缓存
- 没命中缓存,则查询数据库
经过层层过滤和转发,最后,实现降低对数据库的压力。
实现高并发的要点:静态化、有损服务、负载均衡、缓存、队列。
每一个步骤都有很多的细节
比如数据库的选择,是mysql,还是sqlserver,或者oracle。选择不同的企业级和吞吐量的数据库,来应对不同的业务场景。可以具体参考性能评测和你的钱包。
比如经典的MySQL数据库,但受限于磁盘IO读写、并发连接数等因素,可以提升磁盘的性能,换上高性能,和高处理速度的固态硬盘等。
还有缓存采用几级,因为缓存层级越多,处理数据,数据一致性就要考虑的越多。越复杂。
比如数据的分析,百度统计等,查看哪些页面,访问的数据高,针对页面进行跳转。
比如cdn,可以发放静态资源到离用户最近的地域,减少地域损耗等。
分析恶意请求,及时屏蔽和处理ip等手段来维护网站。
好了就到这里啦,有兴趣的小伙伴可以一起来探讨一下。
