有大佬熟悉高并发技术吗?有空进来交流一下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hxysnail
V2EX    程序员

有大佬熟悉高并发技术吗?有空进来交流一下

  •  1
     
  •   hxysnail 2022-11-18 13:51:53 +08:00 7316 次点击
    这是一个创建于 1073 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位大佬,事情是这样的:前几天有个初学者朋友问我关于高并发的技术,这个话题有点大,在微信上简单跟他介绍了一些,然后想着周末抽个时间详细写出来,我列了一个提纲,大概这样展开:

    应用程序本身:

    • 套接字编程技巧
    • 经典多进程、多线程并发
    • IO 多路复用:select => poll => epoll
    • 协程
    • 内核参数:fs.file-max 以及 ulimit fileno
    • 跟操作系统和处理器架构相关的,比如 SMP MUMA CPU 缓存等
    • etc

    负载均衡架构:

    • 为什么要负载均衡
    • nginx
    • haproxy
    • lvs
    • dns
    • 会话保存
    • 均衡手段和策略
    • etc

    数据库优化:

    • SQL 调优、索引调优
    • 读写分离
    • 查询缓存
    • 数据分片(分表分库)
    • etc

    关于高并发方面,我目前知道的套路基本就是以上列的这些。我自己工作后这类场景涉及不太多的,肯定有疏漏,有经验的大佬帮忙补充一下,帮我补全知识面

    另外,由于我遇到的业务场景都不怎么牛逼,感觉也写不出彩,各位大佬有什么典型的应用场景也请不吝分享一下

    我梳理完毕,把文章整理好后,也会回来分享

    不胜感激~

    第 1 条附言    2022-11-27 22:19:14 +08:00
    我将帖子提到的各种技术点梳理了一遍,大家可以参考:
    https://fasionchan.com/posts/high-concurrency/
    45 条回复    2022-11-27 22:16:38 +08:00
    sadfQED2
        1
    sadfQED2  
       2022-11-18 13:58:51 +08:00 via Android
    都不是关键,关键应该是加钱
    hxysnail
        2
    hxysnail  
    OP
       2022-11-18 14:00:30 +08:00
    @sadfQED2 他确实是想加钱,但面试时被问到这些没答好
    xiaotianhu
        3
    xiaotianhu  
       2022-11-18 14:12:10 +08:00
    查询高并发 跟 写入高并发,区别还是挺大的。
    一般高并发还得搭配高可用。
    除了编码技巧,更多的还有架构设计,什么扩缩容降级之类的。
    而且理论跟实践差距也蛮大,我司的一个写入高并发业务,从最开始 Mysql/Redis 到 MongoDB 到现在 C++自己写 Raft 也折腾了好多年才勉强高可用了...
    hxysnail
        4
    hxysnail  
    OP
       2022-11-18 14:18:48 +08:00
    @xiaotianhu 没错,这个话题确实有点大,涉及面也广。你提到的 [服务降级] 我记下了,多谢~
    xsank
        5
    xsank  
       2022-11-18 14:19:37 +08:00
    不如针对场景写项目、晒代码,否则极容易形成八股
    opengps
        6
    opengps  
       2022-11-18 14:27:18 +08:00 via Android
    再加一层硬件方面的弹性伸缩,单机应用性能再高也是有个明显瓶颈摆在那,能堆硬件完成更高负载反而是现实业务最需要的指标
    hxysnail
        7
    hxysnail  
    OP
       2022-11-18 14:27:32 +08:00
    @xsank 没错,所以想跟大家收集一些比较典型的场景
    hxysnail
        8
    hxysnail  
    OP
       2022-11-18 14:28:51 +08:00
    @opengps 嗯嗯,弹性扩缩容打算归到负载均衡部分讨论
    hxysnail
        9
    hxysnail  
    OP
       2022-11-18 14:33:57 +08:00
    @opengps 加一层硬件大佬是指类似 F5 这种吗?
    anonymousar
        10
    anonymousar  
       2022-11-18 14:36:51 +08:00
    天天 oncall 离不开的只有 监控 p999 长尾

    其次要说扩容 限流 熔断
    hxysnail
        11
    hxysnail  
    OP
       2022-11-18 14:40:45 +08:00
    @anonymousar 监控测量 限流 熔断 确实被我忽略了,已记笔记,多谢提醒
    dudubaba
        12
    dudubaba  
       2022-11-18 14:41:37 +08:00
    高并发 加机器
    hxysnail
        13
    hxysnail  
    OP
       2022-11-18 14:43:34 +08:00
    @dudubaba 嗯嗯,负载均衡部分就是讨论如何加机器实现水平扩容
    tojike
        15
    tojike  
       2022-11-18 16:27:53 +08:00
    核心概念:以空间换时间
    dqzcwxb
        16
    dqzcwxb  
       2022-11-18 16:30:22 +08:00
    能分清串行并行并发就已经很强了
    bthulu
        17
    bthulu  
       2022-11-18 16:30:45 +08:00
    你们的并发, 都是 IO 并发吗? 没有人来聊聊非 IO 纯 CPU 并发计算吗?
    hxysnail
        18
    hxysnail  
    OP
       2022-11-18 16:32:56 +08:00
    @bthulu 是指并行计算吗?
    hxysnail
        19
    hxysnail  
    OP
       2022-11-18 16:33:24 +08:00
    @hunterzhang86 这个挺全面的,多谢
    looplj
        20
    looplj  
       2022-11-18 16:33:29 +08:00
    话题太大了,具体实施要看业务场景。
    bthulu
        21
    bthulu  
       2022-11-18 16:35:59 +08:00
    @hxysnail 是啊, 一个计算量很大的任务, 如何用到多个处理器核心来减少任务耗时
    looplj
        22
    looplj  
       2022-11-18 16:36:43 +08:00   1
    你这些太细了,高并发基本几个套路

    缓存 + 异步 + 分区
    wdwwtzy
        23
    wdwwtzy  
       2022-11-18 17:04:37 +08:00
    真不是几句话能说清楚的
    yuanmouren1hao
        24
    yuanmouren1hao  
       2022-11-18 17:07:26 +08:00
    1 、理论上横向弹性伸缩可以无限加,
    2 、 采用合适的技术或优化可以节省核数
    newmlp
        25
    newmlp  
       2022-11-18 17:10:19 +08:00
    高并发不得用 dpdk 吗,epoll 不行
    NoString
        26
    NoString  
       2022-11-18 17:13:15 +08:00
    你可以关注美团技术团队,里面有不少实践的内容,包括但不限于:
    NoString
        27
    NoString  
       2022-11-18 17:14:46 +08:00
    1.日志系统
    2.高峰期下单和订单查询
    3.广告系统
    https://tech.meituan.com/

    这些系统对可用性要求都比较高,加上请求的流量都很庞大
    (刚才手抖发出去了)
    westoy
        28
    westoy  
       
    没具体业务谈这个就跟太监谈上青楼一样

    有业务加钱自然有办法解决, 到现在有哪个流量平台是被流量增长搞死的,caoz 以前写过一些文章, 当年 BAT 里以技闻名的 B 都搞过很多土法炼钢的解决方案

    而且 c10k 、c100k 这种问题不是十年前流行的么, 现在还有人会问? 不都是八股么, 不要假想一些问题
    luomao
        29
    luomao  
       2022-11-18 17:19:23 +08:00
    期待一波大佬的分享
    blackeeper
        30
    blackeeper  
       2022-11-18 17:52:26 +08:00
    套路有很多,队列,CDN ,anycast ?
    想要高并发,从浏览器-----中间设备-------服务器------数据库,各个阶段缓存
    用队列削峰填谷,异步处理,提高并发
    根据 dns ,src-IP ,cookie ,id ,做水平切割,画逻辑区做负载
    hxysnail
        31
    hxysnail  
    OP
       2022-11-18 18:14:24 +08:00
    @westoy 不敢苟同。太监谈上青楼固然尴尬,但也有一句俗话:没吃过猪肉还没见过猪跑吗?有具体业务固然好,但这不是没机会接触嘛。

    土法炼钢我觉得要他要传达的思想是业务第一,技术第二,毕竟技术是服务业务的,不能盲目追求技术。但这个贴我不想讨论业务问题,就一个纯粹的技术讨论帖,讨论实现高可用都有哪些技术手段可以采用。退一步讲,如果有更好的技术方案,我不相信他们会土法炼钢。这也是这个帖子的初衷,学习更多更科学的技术方案。

    c10k 、c100k 我解释一下,算是一个技术发展史介绍吧,主要目的是让初学者知道技术是怎么一脉相承,一步步发展到今天的。
    hxysnail
        32
    hxysnail  
    OP
       2022-11-18 18:17:03 +08:00
    感谢各位大佬无私分享,好多大佬都提到了异步化和队列,我之前也干过。但最近几年都在打杂,竟给忘了,哈哈
    hzxxx
        33
    hzxxx  
       2022-11-18 18:27:44 +08:00
    其实没有具体业务场景经验,问高并发真的是很八股,基本只能听别人的经验和自己猜想的一些情况,心里不靠谱不踏实
    hxysnail
        34
    hxysnail  
    OP
       2022-11-18 21:24:20 +08:00
    @hzxxx 的确是个问题,但有一些了解总比没有好咯
    jeesk
        35
    jeesk  
       2022-11-18 23:01:40 +08:00
    呵呵 屁事多。 队列能解决 9 成问题。
    hxysnail
        36
    hxysnail  
    OP
       2022-11-18 23:05:32 +08:00
    @jeesk 其实吧,你说第二句就行了,第一句说了有什么意义呢?不过还是谢谢你
    jeesk
        37
    jeesk  
       2022-11-18 23:07:05 +08:00
    @hxysnail 就当图个槽, 主要是喷面试的。 还有就是你朋友既然是初学者, 我还是不建议你普及太多概念给他, 废脑子。
    jeesk
        38
    jeesk  
       2022-11-18 23:08:53 +08:00
    @bthulu 纯 cpu 优化算法呗, 减少 cpu 占用,还能怎么样?
    hxysnail
        39
    hxysnail  
    OP
       2022-11-18 23:10:52 +08:00
    @jeesk 我其实是想借此机会梳理个提纲性的材料,简单罗列一下都有些什么,用来做什么的。因为初学者想学也不知道要从哪入手,有个知识地图之类的指引应该会好一些
    blankmiss
        40
    blankmiss  
       2022-11-18 23:14:18 +08:00
    最好的方法就是堆机器
    westoy
        41
    westoy  
       2022-11-18 23:18:00 +08:00
    @hxysnail

    面向具体业务, 不是假设具体业务

    初学者不需要学这个, 因为根本没有任何意义

    架构和业务层的调整什么时候是一个需要面试才能入职的能影响的?

    这是面试干活儿的, 不是面试 VP 或者技术合伙人

    等初学者通过项目实践成长能干涉到架构的调整, 能去协调业务层配合的职级, 他就不是初学者了, 他也不需要再看这种
    hxysnail
        42
    hxysnail  
    OP
       2022-11-19 09:50:36 +08:00
    @westoy 架构有大有小,比如说你负责厂里一个很小的模块,它可能不需要 VP 或技术合伙人来做决策,但不意味着它不需要支撑高并发压力。我也不认为干活的人就不需要懂这些技术,难道干活的人只配 if else 堆业务逻辑吗?退一步讲,从干活能干涉到架构调整,也需要一些知识储备吧?一个人不可能天生就会这些东西呀。

    我不否认干活大部分情况下,是不需要用到这些东西的;我也不否认成长到能干涉架构调整时,这些东西早已掌握了,也不需要再看这种。但从前者到后者,起码有个学习过程吧?这个帖子就是想梳理一下,都有哪些技术点可以去了解、学习,仅此而已
    mind3x
        43
    mind3x  
       2022-11-19 17:09:41 +08:00 via Android
    看来国内真是人均手写 raft 的水平啊
    hxysnail
        44
    hxysnail  
    OP
       2022-11-19 22:20:50 +08:00
    @mind3x 怎么看出来的?感觉比人均水平差太多,raft 的原理是什么我现在都说不清楚,更别说写出来了……
    hxysnail
        45
    hxysnail  
    OP
       2022-11-27 22:16:38 +08:00
    花了一个周末把梳理出来的知识点都简单写了一遍,大家有兴趣可以看看:

    https://fasionchan.com/posts/high-concurrency/

    也算是完成了前些天立下的 flag
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2556 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:17 PVG 19:17 LAX 04:17 JFK 07:17
    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