前段时间,有位后台的朋友给我们留言:
问一个需求10万并发,2秒内给出响应!该怎么去做?有什么好思路?急等!!!
于是,我们决定出一篇文章,好好讲讲如何解决高并发问题的一些思路,有需要的朋友记得收藏~
下面开始进入正文:
以前在阿里担任团队面试官,平心而论,简历上有写高并发经验的候选人,大部分都被我挂了......
还原一下真实场景👇 :
简历关常常会看到候选人简历中有如下文字:
对业务逻辑解耦,高并发等有比较深入的研究和丰富的开发实战经验
当我在面试中,问及对方的职业规划的时候,大部分人是这么回答的:
希望将来可以学习高并发相关技术能够处理高并发业务。
然而当我问及以下问题的时候,绝大部分人就答不上来了:
  • 有没有用任何方式(比如虚拟机)模拟过各种集群?
  • 负载均衡有几种分配方式?
  • 有没有用任何方式测试过采用了高并发应对策略后对项目的改进和提升?
  • 如果业务规模再次扩大,下一阶段应该用什么技术和策略?
下面给大家直接上干货,高并发问题常见解决思路,以免面试被问到细节直接挂机。
开始之前,先推荐一个我最近的一场免费讲座——《电商秒杀系统的基本架构》,系统地讲解了秒杀系统场景下的高并发解决方案,现在可以免费试听
扫码报名,免费试听
01
页面静态化(Static Page Technology)
高并发场景下的秒杀系统,秒杀页面由商品信息和前端页面资源组成,前后端分离,静态化的意思就是将数据渲染后的动态页面变成一个html静态页面的保存起来,如果以后需要再次访问该页面,则将该请求重定向到静态页面
页面资源不会经过后端服务器。使用户就近获取所需内容,降低网络拥塞,大大的提高了响应速度,减轻了服务端的负担。这个原理其实和缓存一样,只是将整个页面进行了缓存。nginx就自带了页面静态化的解决方案。
02
缓存预热(Cache Warm-up)
比如:在秒杀系统活动开始前,提前将设置好秒杀的商品信息、限购数量,库存数量等写入Redis中,同样是减少服务器压力的方式。
网站访问数据的特点大多数呈现为“二八定律”:80%的业务访问集中在20%的数据上。
总的来说就是用户只用到了总数据条目的一小部分,当到一定规模,数据库IO操作成为性能瓶颈的时候,使用缓存将这一小部分的热门数据缓存在内存中是一个很不错的选择,不但可以减轻数据库的压力,还可以提高整体网站的数据访问速度。
03
service服务
服务可以认为是逻辑处理的整合。对于同一类问题的逻辑处理归并在一个服务中,整个系统可以细分为若干个小的服务。
比如:静态资源与后台服务进行分离。静态资源主要包括图片、视频、js、css和一些资源文件等,这些文件因为没有状态所以分离比较简单,直接存放到响应的服务器就可以了。一般会使用专门的域名去访问。通过不同的域名可以让浏览器直接访问资源服务器而不需要再访问应用服务器了。
04
异步(Asynchronnous)化
以异步化方式将交易创建过程中,对于有严格先后调用关系的服务保持顺序执行,对于能够同步执行的所有服务均采用异步化方式处理。阿里巴巴内部使用消息中间件的方式实现了业务处理流程,提高服务的并发处理。
通过异步化被分割的两部分逻辑处理并没有太多事务性的关系,即一般是前面部分的逻辑处理成功后,后面那部分是否成功执行不会对前一部分的处理结果产生影响。
05
乐观锁思路
乐观锁,是相对于“悲观锁”采用更为宽松的加锁机制,大都是采用带版本号(Version)更新。实现就是,这个数据所有请求都有资格去修改,但会获得一个该数据的版本号,只有版本号符合的才能更新成功,其他的返回抢购失败。
这样的话,我们就不需要考虑队列的问题,不过,它会增大CPU的计算开销。但是,综合来说,这是一个比较好的解决方案。
关于乐观锁的详细解决方案,TMD高级架构师欧阳修秒杀项目实战都讲的很清楚了,感兴趣的小伙伴可以去免费试听一下。
扫码报名,免费试听
接下来,直接给大家上高并发常见场景举例,具体场景的实现逻辑也有所不同
1电商秒杀系统
举个简单例子:某年双11,商家以4499的价格上架了某iphone,比官网价格便宜了1000元,库存总数10台,运营设置11/11 00:00活动生效,一人只能购买1台,商品售完为止。
针对这种常见的高并发场景,九章算法的欧阳修老师给出了秒杀系统背后的技术和原理
详细可移步秒杀系统项目课听欧阳修老师详细拆分讲解。
扫码报名,免费试听
简单来说,秒杀系统的高并发的核心解决思路包括:
  1. 从高纬度出发,从整体上思考问题,抓住问题本质:并发读,并发写。
  2. 明确核心架构目标:高性能,一致性,高可用。
  3. 分而治之,逐一击破:拆分服务,逐一完善。
除了设计思路,欧阳修老师还将在秒杀系统项目课中提供秒杀系统的源码,其中解决瞬时大流量高并发问题的核心思想为:分层过滤,分而治之
你需要在不同的层次尽可能地过滤掉无效请求,让“漏斗”最末端的才是有效请求。
具体实现步骤,可参考欧阳修老师的秒杀系统项目课
扫码报名,免费试听
2Twitter信息流系统
设计Twitter本质上就是在考高并发的信息流系统,其涉及的技术难点非常多。九章算法的令狐老师作为前FB多年架构师以及A家全栈工程师,在九章Twitter项目课上到在课堂上还原了大厂真实的开发场景
整个项目涉及代码多达10000+行,课上会通过每次100~200行代码的Git Commit,6~8周就可以带大家搭建一个对标L5/P8级别的工业化标准项目
在项目的搭建过程中,还会带大家攻克18大技术难点和常用技术栈,高并发解决思路的详细的讲解。
详情可以移步令狐老师的Twitter后端系统课,现在免费试听前六章。
扫码报名,免费试听
继续阅读
阅读原文