V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sumarker
V2EX  ›  问与答

[不懂就问] 没有高并发经验如何应对面试中的高并发问题

  •  
  •   sumarker · 2020-02-20 13:55:45 +08:00 · 5361 次点击
    这是一个创建于 1737 天前的主题,其中的信息可能已经有所发展或是发生改变。

    “金三银四”

    面试了几家公司,总是问到“有没有高并发的经验”

    就职过的公司要么一直是内部系统,要么就是公司规模小,用户基数不高,问到高并发确实没有什么经验,能说出来的无非就是,负载均衡把请求分流,引入缓存减少数据库压力,数据库读写分离,队列对请求削峰……

    那些 QPS 动辄就百万、千万的场景到底是怎么实现的?

    我自己知道的也就一个秒杀的场景,顶多是前端控制一下,缓存锁一下……

    求助各位大神,面试被问高并发的问题,到底要怎么回答呀?

    24 条回复    2020-02-21 10:15:42 +08:00
    opengps
        1
    opengps  
       2020-02-20 14:08:09 +08:00   ❤️ 2
    简单来说就是提高上限,是把系统架构设计成“加机器”能立刻应对更高压力的效果。
    云的单机性能那么低,但是却成了现在主流选择,主要原因就在于扩展性,考虑周全的项目,从部署初期就负载均衡,队列,web 负载机,缓存,数据库一整套都用上了,发现某个点瓶颈立刻升级或扩容即可。
    常见的升级阶段:第一步升级可能只是提高单节点配置,第二步升级是集群里加机器数量,第三步则可能针对性的优化瓶颈点。
    sumarker
        2
    sumarker  
    OP
       2020-02-20 14:26:52 +08:00
    @opengps 因为我确实没高并发的经验,但站在系统层面我个人觉得,加机器的目的确实是让机器更抗压,但在一定条件下,可能也需要限流,比如热点资源。
    目前能想到的例子,一个是双十一,双十二的抢购;一个是新闻热点话题;
    但这两除了我之前提到的 分流,缓存,削峰限流,可能再有加机器……似乎也没有什么特别之处吧?
    就面试来说,如果提到这些,是不是还会被认为是没高并发的经验的开发者呀?
    opengps
        3
    opengps  
       2020-02-20 14:31:13 +08:00
    @sumarker 没多少人有高并发经验的,秒杀之所以被拿来面试提问,那是因为最近几年大厂的活动引发的思考。

    我经历过负载量增长,但并不敢说经历过高并发,高并发往往偏向于强调某个瞬间高,只要消除了单点(这点需要配合分布式锁等设计提高单点的开发能力),那么他跟高并发如出一辙: https://www.opengps.cn/Blog/View.aspx?id=279
    sumarker
        4
    sumarker  
    OP
       2020-02-20 14:40:20 +08:00
    @opengps 膜拜大佬,那是不是我可以理解为 高并发主要偏向处理某时间段或时间点产生的 大量瞬时请求的问题?
    opengps
        5
    opengps  
       2020-02-20 14:52:01 +08:00 via Android
    @sumarker 面试问得高并发往往特指这种瞬间高流量,而不是持续负载大的场景
    ZehaiZhang
        6
    ZehaiZhang  
       2020-02-20 14:54:44 +08:00   ❤️ 1
    面试作业帮同遇到类似问题,问的都是设计秒杀服务,高并发 Orz
    sumarker
        7
    sumarker  
    OP
       2020-02-20 15:04:54 +08:00
    @ZehaiZhang 那是怎么回答的呀
    ZehaiZhang
        8
    ZehaiZhang  
       2020-02-20 15:07:27 +08:00
    @sumarker 说自己读过的中间件,Nginx 预处理,redis 锁来敷衍(实际并没有用过)
    across
        9
    across  
       2020-02-20 15:17:18 +08:00
    自己看过书或业余接触过,却没经商业项目实践的问题,面试回答时我都会事先诚实说明下,然后讲纸上的解决思路的···
    反正我是这样的,大佬们怎么应对就不知道了。
    lucifer9
        10
    lucifer9  
       2020-02-20 16:00:11 +08:00
    技术上都都吹一些
    但其实秒杀抢购都是靠前端的吧
    linxl
        11
    linxl  
       2020-02-20 16:03:50 +08:00
    背一些文章, 一顿乱说(指望瞎猫碰到死耗子)...
    sumarker
        12
    sumarker  
    OP
       2020-02-20 16:46:52 +08:00
    @ZehaiZhang redis 锁似乎倒是知道一些,中间件也没用过几个……一被深问就两眼一摸黑了
    sumarker
        13
    sumarker  
    OP
       2020-02-20 16:48:04 +08:00
    @across 是啊,想去大公司,大公司要有高并发的经验,但实际没经验,要经验要去大公司……就像是恶性循环一样
    sumarker
        14
    sumarker  
    OP
       2020-02-20 16:49:01 +08:00
    @lucifer9 前端其实也只是做一个限流作用,实际还是要后端处理,要是依赖前端,那数据就危险了
    sumarker
        15
    sumarker  
    OP
       2020-02-20 16:50:36 +08:00
    @linxl 基本是碰不上的,一般的书太教条了,跟实际的应用有一些差距,就像现在的 spring-boot 一样,书很多,但有些书只讲一部分,还有一些坑需要自己一步一步趟过去……
    lucifer9
        16
    lucifer9  
       2020-02-20 16:53:16 +08:00
    @sumarker #14 有一次猴王不是被扒出来,页面点击以后直接返回已抢完,压根不去联网的
    gimp
        17
    gimp  
       2020-02-20 17:01:50 +08:00
    @lucifer9 我记的那次 😃
    ZehaiZhang
        18
    ZehaiZhang  
       2020-02-20 17:25:21 +08:00
    @lucifer9 小米?
    sumarker
        19
    sumarker  
    OP
       2020-02-20 17:51:11 +08:00
    @lucifer9 @gimp @ZehaiZhang 完全没印象,那是什么时候的事呀
    gimp
        20
    gimp  
       2020-02-20 18:31:41 +08:00   ❤️ 1
    搜索“小米耍猴被实锤 js”

    @sumarker
    sumarker
        21
    sumarker  
    OP
       2020-02-20 18:46:21 +08:00
    @gimp 居然是 18 年的?
    wysnylc
        22
    wysnylc  
       2020-02-20 21:36:58 +08:00
    高并发分布式场景下的解决方案只有一个:队列
    ZehaiZhang
        23
    ZehaiZhang  
       2020-02-21 09:39:39 +08:00
    @wysnylc mq 么?
    sumarker
        24
    sumarker  
    OP
       2020-02-21 10:15:42 +08:00
    @wysnylc 队列是可以的,如果没有咋办
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1765 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 131ms · UTC 16:33 · PVG 00:33 · LAX 08:33 · JFK 11:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.