相信很多5年以上工作经验的同学在面试的时候经常会被问道:现在有一个很大量的秒杀场景,应该怎么处理?

很多同学的第一反应回答80%都是: 用Redis来做缓存,防止超卖也能保证一定的性能...

当你说出这个回答的时候恭喜你你已经成功入坑了,大多数面试官会直接跳过这个问题不在深入追问(因为你连第一个问题都没回答到面试官心坎里,面试官已经放弃问你这个问题了)

那么我们应该怎么回答才能让伟大的面试官满意呢?

 

需要同学门深思熟虑下面试官的意图,秒杀场景 == redis??显然不是这样的(太多同学的思维被百度文章固话了,认为秒杀只需要一个redis就能解决了....),经历过大公司秒杀系统的同学就会知道其实秒杀涉及到的东西非常多,综合来看就是一个高并发系统的架构设计问题...看到这里小伙伴应该知道面试官想要问的是什么了吧(其实想问你一套高并发系统的架构设计可能要考虑的东西),单单一个Redis根本不可能支撑得住高并发系统

 

一、关于高并发

高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11、双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击。
 

1 高并发会来带的后果

服务端:导致站点服务器/DB服务器资源被占满崩溃,数据的存储和更新结果和理想的设计是不一样的,比如:出现重复的数据记录,多次添加了用户积分等。

用户角度:网站打不开

服务器雪崩:

2 并发下的数据处理

通过表设计,如:记录表添加唯一约束,数据处理逻辑使用事物防止并发下的数据错乱问题。通过服务端锁进程防止包并发下的数据错乱问题。

这里主要讲述的是在并发请求下的数据逻辑处理的接口,如何保证数据的一致性和完整性,这里的并发可能是大量用户发起的,也可能攻击者通过并发工具发起的并发请求。

 

二、高并发系统架构主要关注点

1 服务器架构(应用服务器、数据库、中间件...)

业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。

一个可以支持高并发的服务少不了好的服务器架构,需要有均衡负载,数据库需要主从集群,NoSQL缓存需要主从集群,静态文件需要上传CDN,这些都是能让业务程序流畅运行的强大后盾

2 并发测试

高并发相关的业务,需要进行并发的测试,通过大量的数据分析评估出整个架构可以支撑的并发量。

测试高并发可以使用第三方服务器或者自己测试服务器,利用测试工具进行并发请求测试,分析测试数据得到可以支撑并发数量的评估,这个可以作为一个预警参考,俗话说知己自彼百战不殆

3 MQ缓冲队列(削峰填谷、系统解耦)

大量需要处理的各种请求涌入到服务端,无论是nosql还是sql都支撑不住,那么就要考虑如何解决这些请求,让他们不会搞垮我们的服务端应用甚至搞垮我们的数据库

4 网关(令牌桶)

解决前端到服务端的不确定流量以及瞬时的超大流量,防止服务器血崩

5 缓存(静态缓存、动态缓存)

缓存不单单只是Redis,还需要考虑静态CDN缓存以及应用内部的一级缓存等等

6 应用内的代码设计(多线程、锁等等)

7 异常流量的抵御(缓存攻击、数据库攻击...)

布隆过滤器

 

其实高并发系统涉及到的知识点还有很多很多,网络抖动?灾备?动态伸缩?等等等等等等...

如果同学们回答道了上面的这些点,我相信面试官对于这个问题的回答是认可的,至少知道你对于高并发系统的全貌考虑是对的,当然接下去他会和你继续深入畅聊高并发系统的人生...

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐