关于线程池在高并发场景下落地使用的疑惑? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liian2019
V2EX    Java

关于线程池在高并发场景下落地使用的疑惑?

  •  
  •   liian2019 2021-12-03 10:25:55 +08:00 1950 次点击
    这是一个创建于 1476 天前的主题,其中的信息可能已经有所发展或是发生改变。
    好比我现在有这么一个场景,我一个列表查询接口,在双 12 活动的时候并发会很高。而这个列表接口需要依赖 N 个外部接口查询的结果,如果这些外部接口查询都是串行的话整个方法响应时间相对较高,想用线程池去并发调用这些外部接口,这样瓶颈就会落在最耗时的一次外部接口调用上了。但是这个设想很快就被自己否定了,因为线程池的核心线程数也不是无限的,一次请求带来的是多个线程池线程被使用,在高并发场景下很快核心线程数就会别打满,更多的请求会进入等待队列,这样感觉会得不偿失。
    想请教下大家,有没有碰到过类似的问题,这种问题是否只能靠水平扩展来解决,通过负载均衡使更多的机器来处用户请求。大家有没有在对 C 的场景使用过线程池呢?
    6 条回复    2022-01-02 16:05:51 +08:00
    mazyi
        1
    mazyi  
    PRO
       2021-12-03 10:39:27 +08:00 via iPhone
    对,你是对的,需要加机器
    realrojeralone
        2
    realrojeralone  
       2021-12-03 11:59:04 +08:00
    外部接口调用是 IO 密集型,并不会耗费很多 CPU ,尝试把线程池调大,使用 callback 而不是直接 get 结果,另外资源限制也是一方面,评估单机承受的压力,必要时扩容,最后,第三方接口也可能扛不住,需要做压力评估
    Joker123456789
        3
    Joker123456789  
       2021-12-06 12:17:32 +08:00
    需要等结果的场景,不适合用异步。 异步只适用于不需要等结果的场景,主要是为了快速响应的。

    而且你这种情况,对顺序也有严格的要求吧,你可能需要等 A 接口返回了,用 A 接口的返回结果去执行下一步 调 B 接口,用 B 的返回结果调 C 接口对吧? 如果是这样的话,那多线程的意义就更是彻底被玩没了, 反正都要等了为什么还要用线程?

    如果不需要等,对顺序没有任何要求,只要调了就行,那或许还可以试试。但前提是 平常的压力之下,这些三方接口的处理速度必须要 > 生产速度,务必保证线程池里不会挤压任何任务。 让线程池 只用于应对 突发流量,保护三方接口不会被压垮(传说中的削峰)。

    线程池其实就是一个内存级别的消息队列

    你现在最好的情况是 做横向扩展,在双 12 当天加机器,同时做一下网关层的限流
    liian2019
        4
    liian2019  
    OP
       2021-12-06 17:12:54 +08:00
    @Joker123456789 对顺序倒是没有要求,但是保证线程池里不会挤压任何任务,这个现实实现起来太难了,所以说线程池在这种场景下还是很难使用的。
    liian2019
        5
    liian2019  
    OP
       2021-12-06 17:18:39 +08:00
    @realrojeralone 暂时先不搞了 风险太大了 不如堆机器来的实在,瓶颈抛给下游业务
    tanweiiiii
        6
    tanweiiiii  
       2022-01-02 16:05:51 +08:00
    用线程池接收请求后发送到 MQ 队列慢慢消费, 根据流量水平扩展 MQ 和消费端
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5170 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:26 PVG 15:26 LAX 23:26 JFK 02:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86