“金三银四”
面试了几家公司,总是问到“有没有高并发的经验”
就职过的公司要么一直是内部系统,要么就是公司规模小,用户基数不高,问到高并发确实没有什么经验,能说出来的无非就是,负载均衡把请求分流,引入缓存减少数据库压力,数据库读写分离,队列对请求削峰……
那些 QPS 动辄就百万、千万的场景到底是怎么实现的?
我自己知道的也就一个秒杀的场景,顶多是前端控制一下,缓存锁一下……
求助各位大神,面试被问高并发的问题,到底要怎么回答呀?
1
opengps 2020-02-20 14:08:09 +08:00 2
简单来说就是提高上限,是把系统架构设计成“加机器”能立刻应对更高压力的效果。
云的单机性能那么低,但是却成了现在主流选择,主要原因就在于扩展性,考虑周全的项目,从部署初期就负载均衡,队列,web 负载机,缓存,数据库一整套都用上了,发现某个点瓶颈立刻升级或扩容即可。 常见的升级阶段:第一步升级可能只是提高单节点配置,第二步升级是集群里加机器数量,第三步则可能针对性的优化瓶颈点。 |
2
sumarker OP @opengps 因为我确实没高并发的经验,但站在系统层面我个人觉得,加机器的目的确实是让机器更抗压,但在一定条件下,可能也需要限流,比如热点资源。
目前能想到的例子,一个是双十一,双十二的抢购;一个是新闻热点话题; 但这两除了我之前提到的 分流,缓存,削峰限流,可能再有加机器……似乎也没有什么特别之处吧? 就面试来说,如果提到这些,是不是还会被认为是没高并发的经验的开发者呀? |
3
opengps 2020-02-20 14:31:13 +08:00
@sumarker 没多少人有高并发经验的,秒杀之所以被拿来面试提问,那是因为最近几年大厂的活动引发的思考。
我经历过负载量增长,但并不敢说经历过高并发,高并发往往偏向于强调某个瞬间高,只要消除了单点(这点需要配合分布式锁等设计提高单点的开发能力),那么他跟高并发如出一辙: https://www.opengps.cn/Blog/View.aspx?id=279 |
6
ZehaiZhang 2020-02-20 14:54:44 +08:00 1
面试作业帮同遇到类似问题,问的都是设计秒杀服务,高并发 Orz
|
7
sumarker OP @ZehaiZhang 那是怎么回答的呀
|
8
ZehaiZhang 2020-02-20 15:07:27 +08:00
@sumarker 说自己读过的中间件,Nginx 预处理,redis 锁来敷衍(实际并没有用过)
|
9
across 2020-02-20 15:17:18 +08:00
自己看过书或业余接触过,却没经商业项目实践的问题,面试回答时我都会事先诚实说明下,然后讲纸上的解决思路的···
反正我是这样的,大佬们怎么应对就不知道了。 |
10
lucifer9 2020-02-20 16:00:11 +08:00
技术上都都吹一些
但其实秒杀抢购都是靠前端的吧 |
11
linxl 2020-02-20 16:03:50 +08:00
背一些文章, 一顿乱说(指望瞎猫碰到死耗子)...
|
12
sumarker OP @ZehaiZhang redis 锁似乎倒是知道一些,中间件也没用过几个……一被深问就两眼一摸黑了
|
15
sumarker OP @linxl 基本是碰不上的,一般的书太教条了,跟实际的应用有一些差距,就像现在的 spring-boot 一样,书很多,但有些书只讲一部分,还有一些坑需要自己一步一步趟过去……
|
18
ZehaiZhang 2020-02-20 17:25:21 +08:00
@lucifer9 小米?
|
19
sumarker OP |
22
wysnylc 2020-02-20 21:36:58 +08:00
高并发分布式场景下的解决方案只有一个:队列
|
23
ZehaiZhang 2020-02-21 09:39:39 +08:00
@wysnylc mq 么?
|