高并发架构求解:千万级在线长连接,有偿咨询(杭州) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
opentrade
V2EX    外包

高并发架构求解:千万级在线长连接,有偿咨询(杭州)

  •  
  •   opentrade 80 前 2201 次点击
    这是一个创建于 80 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我们最近准备上云,之前一直走的自建服务路线。核心挑战在于长连接/心跳服务的高并发, 虽然单个心跳流量很小,但要求用户一直保持在线,这带来很大的架构压力(我们团队这方面没啥经验)。

    希望能跟有大规模长连接/IM/实时音视频/IoT/远程桌面云平台架构经验的朋友交流,有偿咨询或长期合作。

    我的微信是 bGxtaGcxMjM0IA==

    23 条回复    2025-09-28 13:50:50 +08:00
    LiaoMatt
        1
    LiaoMatt  
       80 天前
    千万连接如果只是心跳, 通过算每个连接占用到系统内存和带宽可以大概算出需要几个实例, 相对比较容易应对, 但是涉及到数据上传下发情况就会复杂很多, 就要提前限制实例连接设备数的上线, 做消息队列,重试等; 之前我的做法是检测到带宽瓶颈就扩容, 转移部份连接到扩容到实例
    cloudzhou
        2
    cloudzhou  
       80 天前
    肯定需要 proxy 的,这是“一直保持在线”最好的方式
    很早时候我就解析过 msn 聊天协议,方式就是多个接入点
    从 domain 就开始分流
    opentrade
        3
    opentrade  
    OP
       80 天前
    @LiaoMatt 瓶颈还是数据库
    queue
        4
    queue  
       80 天前
    插个眼,希望能等到大佬们成熟的架构方案,见识见识
    YiXinCoding
        5
    YiXinCoding  
       80 天前
    做一个节点负载监控服务,客户端初始化的时候从这个服务获取一个负载最低或距离最近的后端节点,在客户端负载均衡,只要客户端连接稳定,后面数据在内网通过队列排队处理就行了。

    思路就跟网游登录选服务器,哪个空闲选哪个一样的~
    xmh51
        6
    xmh51  
       80 天前
    @opentrade 数据库什么瓶颈?
    blueswhisper
        7
    blueswhisper  
       79 天前
    @opentrade 数据库分库分表业界有很多成熟方案了。 除非你用的是非常小众的数据库,得自己搓轮子
    jedihy
        8
    jedihy  
       79 天前
    这感觉是高频系统设计面试题?感觉和问 chatgpt 就能得到最优解,无非就是你怎么 shard 你的数据库,再加一次层 cache 。千万级长链接心跳并发并不高。100s 一次心跳就是 10W 的 QPS ,1 个 LB 带 10 个 VM 差不多了吧。
    opentrade
        9
    opentrade  
    OP
       79 天前
    @jedihy 你说的这些早就在 chatgpt 上问了好多遍了,主要是交流些实战经验,也好上线有点底气
    opentrade
        10
    opentrade  
    OP
       79 天前
    @blueswhisper 有是有,比如 Citus ,但是也各种限制,比如不喜欢 Azure ,aws 的 Aurora 相对又差点意思
    opentrade
        11
    opentrade  
    OP
       79 天前
    @opentrade 蟑螂 db ,pingcap 那些我又不敢用
    qinghuazs
        12
    qinghuazs  
       79 天前
    @opentrade #3 我理解数据库通过分库分表基本能解决大部分问题了,比如你用户量很大,那就搞比较多的数据库实例,目前我们公有云平台数据库实例应该是 70 个左右,分库后,再针对业务进行分表,同样的,用户量大的话,表分的就多一点,我知道的某个互联网头部企业的某个核心业务但是分表就分了一万多个!
    v2hh
        13
    v2hh  
       78 天前
    像这种长连接突然系统宕机恢复过程不是并发很高吗,做限流吗
    zzjcool
        14
    zzjcool  
       78 天前 via iPhone
    mqtt 很适合这个场景,我们有过千万级别实践经验,需要的可以联系我 dG9pLXRvaS10b2k=
    opentrade
        15
    opentrade  
    OP
       78 天前
    @v2hh 对, 你说到重点了
    opentrade
        16
    opentrade  
    OP
       78 天前
    @qinghuazs 我们没法跟大厂比啊,分表分那么多。分库又让系统搞得复杂了。你们用的啥公有云平台数据库?
    opentrade
        17
    opentrade  
    OP
       78 天前
    @qinghuazs 目前我们保守,选 auora ,citus 和蟑螂 db 那些还不敢用,我们是 psql ,也用不了 OceanBase 这些。
    blueswhisper
        18
    blueswhisper  
       78 天前
    @opentrade PostgreSQL 你首先遇到的问题是 PostgreSQL 连接数限制。长连是一个专有领域,分库分表是另一个领域,两者都精的不多。讨论跟你标题有点偏离了,如果你需要分库分表方面的咨询的话,倒是可以聊聊。
    opentrade
        19
    opentrade  
    OP
       78 天前
    @blueswhisper 聊聊呗,加我微信?
    opentrade
        20
    opentrade  
    OP
       78 天前
    @blueswhisper 连接数不会是太大问题
    dododada
        21
    dododada  
       78 天前
    在线只是个状态,只有 ping/pong ,和数据库没关系的呀,一般来讲,消息本身和数据库都没有关系,只有需要落地的时候才会最终流到数据库啊;

    传统的负载要么是 F5 ,要么是 HA 之类,再不济 nginx ,不过 nginx 的均衡要自己优化,云上的不太懂,感觉应该类似
    qinghuazs
        22
    qinghuazs  
       78 天前
    @opentrade #16 公有云平台数据库省事
    qinghuazs
        23
    qinghuazs  
       78 天前
    @opentrade #16 阿里云的 MySQL
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3152 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:31 PVG 19:31 LAX 03:31 JFK 06:31
    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