群聊天系统,高吞吐量,高转发量,后端什么架构? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanghui
V2EX    问与答

群聊天系统,高吞吐量,高转发量,后端什么架构?

  •  
  •   fanghui 2013-12-06 22:12:27 +08:00 13234 次点击
    这是一个创建于 4417 天前的主题,其中的信息可能已经有所发展或是发生改变。
    群聊天系统,高吞吐量,高转发量,后端什么架构?比如一个群1000个人在聊天,共20万个这样的群,正在此系统活动。目前没有这方面的经验,还请v2er多多提看法和意见
    18 条回复    1970-01-01 08:00:00 +08:00
    ejin
        1
    ejin  
       2013-12-06 22:34:54 +08:00
    yy一个频道几万人在线。还有视频。太牛擦了
    czheo
        2
    czheo  
       2013-12-06 22:38:28 +08:00   1
    IRC
    victor
        3
    victor  
       2013-12-06 23:38:30 +08:00   1
    xmpp
    plucury
        4
    plucury  
       2013-12-06 23:57:09 +08:00   1
    如果只是群聊天可以考虑用发布-订阅的协议来做。比如MQTT,用户进入群就是订阅了topic,然后发言就向这个topic发消息,所有订阅该topic的人都能收到。具体到使用的技术,我们现在用netty实现了类似的应用,大概每台服务器支持了150w个用户这样(应该还能提升)。
    013231
        5
    013231  
       2013-12-07 00:03:34 +08:00   1
    binux
        6
    binux  
       2013-12-07 00:08:29 +08:00
    20w*1000人在线,同时在线2亿人。。。QQ就是个渣渣啊
    9hills
        7
    9hills  
       2013-12-07 00:39:09 +08:00
    2亿人同时在线的系统。。lz没有经验还是不要做了,这个最少值2亿
    lvye
        8
    lvye  
       2013-12-07 00:46:22 +08:00
    架构做出来,验证也是个问题。目前估计只有腾讯有这个经验了。
    Numbcoder
        9
    Numbcoder  
       2013-12-07 00:58:34 +08:00
    @binux
    一个群1000个人在聊天,共20万个这样的群, 一个人有没有可能在多个群,那么这样的话就不能简单 20w*1000 这么算了

    其实最重要的是要估算同时在线人数和消息量吧
    binux
        10
    binux  
       2013-12-07 01:12:54 +08:00
    @Numbcoder 一个人在多个群,那也是多个链接啊,对于服务器来说是一样的啊
    Numbcoder
        11
    Numbcoder  
       2013-12-07 01:24:05 +08:00
    @binux 怎么会是多个链接,必须是一条链接!
    zorceta
        12
    zorceta  
       2013-12-07 07:34:09 +08:00 via Android
    @Numbcoder 感觉“信道”这个说法比较合适……我就随口一说
    xujialiang
        13
    xujialiang  
       2013-12-07 08:38:22 +08:00 via Android
    消息队列吧。可路由转发不同服务器,貌似公司的报文服务就是这么干的
    fanghui
        14
    fanghui  
    OP
       2013-12-07 09:27:17 +08:00
    目前,消息大小限值在255个字符之内,不限制一个人在多个群。
    akira
        15
    akira  
       2013-12-07 09:58:36 +08:00
    估计没几个人有这种经验。

    不过大规模的使用内存数据库 和 消息队列 应该跑不掉的了。
    inyfee
        16
    inyfee  
       2013-12-07 10:38:47 +08:00
    之前做聊天室时,用的是redis的 subpub 功能,用户订阅了频道,在同频道中的其它用户发布消息都由redis 来做发布,开发起来也简单。不过20w*1000人在线 ~~~ 这里面要考虑的东西还要更复杂
    binux
        17
    binux  
       2013-12-07 11:42:30 +08:00
    @Numbcoder 需要处理和转发的事件量是一样的啊
    Numbcoder
        18
    Numbcoder  
       2013-12-07 20:28:03 +08:00   2
    做过百万级别同时在线的案例。lz 这个可能比我的大。
    给 lz 几个建议:
    1. 选好协议。从你的应用场景来看,XMPP 或 MQTT 比较合适,群组功能是典型的 PubSub 应用场景。如果有移动端的话,MQTT 稍微好点。
    2. 服务端语言选型要慎重。erlang,golang 或许比较合适,java 的话可以试试 netty。
    3. 还是要先做好充分的调研,同时在线人数(群组数量真不太重要,在 PubSub 里就是订阅个 topic 而已),每秒钟的消息量,这两个指标比较重要。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1104 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 18:06 PVG 02:06 LAX 10:06 JFK 13:06
    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