类似"万人聊天群"的需求,目前的技术栈最佳实践会是怎样呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
withablink
V2EX    问与答

类似"万人聊天群"的需求,目前的技术栈最佳实践会是怎样呢?

  •  
  •   withablink 2018-11-10 12:04:24 +08:00 4871 次点击
    这是一个创建于 2526 天前的主题,其中的信息可能已经有所发展或是发生改变。
    考虑这样的需求:

    1. 千人聊天群。可以查看完整的信息历史。所有客户端保持同步。同步速度尽量快,对服务器压力尽量小。

    2. 万人聊天群。可以查看完整的信息历史。所有客户端保持同步。同步速度尽量快,对服务器压力尽量小。

    3. 十万人聊天群。可以查看完整的信息历史。所有客户端保持同步。同步速度尽量快,对服务器压力尽量小。

    4. 一百万人聊天群。可以查看完整的信息历史。所有客户端保持同步。同步速度尽量快,对服务器压力尽量小。

    5. 以此类推... 目前的技术栈最佳实践会是怎样呢?
    36 条回复    2018-11-13 10:31:34 +08:00
    trys1
        1
    trys1  
       2018-11-10 12:07:55 +08:00 via Android
    telegram 了解一下
    withablink
        2
    withablink  
    OP
       2018-11-10 12:13:22 +08:00
    @trys1 小规模时就是类似 telegram,但是电报群也没见过十万人及以上的...

    (实际需求中,参与的不一定是人,所以不用担心消息太多看不过来)
    jamesxu
        3
    jamesxu  
       2018-11-10 12:21:08 +08:00 via iPhone
    看不出来哪里需要用到这么大的群,这么大的群还叫群吗,有何意义
    vindurriel
        4
    vindurriel  
       2018-11-10 12:22:42 +08:00 via iPhone
    想多了 一个群不会有那么多人同时在线的 telegram 为例 我参加的最大的群 7555 人 5 人在线
    withablink
        5
    withablink  
    OP
       2018-11-10 12:22:58 +08:00
    @jamesxu 群只是一个比喻。实际需求中,参与的不一定是人。

    想了想,如果参与人数特别多,还真的似乎只有靠区块链。
    xiaolanglang
        6
    xiaolanglang  
       2018-11-10 12:23:09 +08:00
    你这是聊天群啊?我觉得你按照消息中间件去设计吧……
    可以参考一下 kafka 之类的实现
    withablink
        7
    withablink  
    OP
       2018-11-10 12:23:15 +08:00
    @vindurriel 群只是一个比喻。实际需求中,参与的不一定是人。
    vindurriel
        8
    vindurriel  
       2018-11-10 12:25:21 +08:00 via iPhone
    @withablink 不推历史到客户端 谁看谁去服务器拉取 加缓存
    withablink
        9
    withablink  
    OP
       2018-11-10 12:26:10 +08:00
    @gy911201 消息队列是肯定需要的,不过稍微复杂的是需要保持全部人和全部历史的同步,而且需要支持很多 client,所以可能还是 P2P 的做法更好,那么好像就只有靠区块链了。
    vindurriel
        10
    vindurriel  
       2018-11-10 12:28:00 +08:00 via iPhone
    @vindurriel kafka 就是这么个思路 消息持久化 消费者随用随取
    kernel
        11
    kernel  
       2018-11-10 12:29:04 +08:00 via Android
    @withablink 你是不是对区块链有什么误解
    withablink
        12
    withablink  
    OP
       2018-11-10 12:29:35 +08:00
    @vindurriel 好的我研究下,目前还有与 Kafka 类似的方案吗
    wsh1108
        13
    wsh1108  
       2018-11-10 12:34:17 +08:00 via Android
    只有我觉得超过 10 万人的聊天群这个需求不存在吗
    innoink
        14
    innoink  
       2018-11-10 12:34:49 +08:00 via Android
    一始说“ x 人聊天群”
    然后又说不一定是人
    那是不是还可以说不一定是聊天
    那鬼知道你问的什么
    withablink
        15
    withablink  
    OP
       2018-11-10 12:39:03 +08:00
    @innoink @wsh1108 标题中说了“类似”。

    举聊天群的例子,因为聊天群的信息流速度很大(尤其是发图片和视频时)。

    而且不同人数的做法完全不同。百人千人可以随便做。一万人十万人百万人的信息量和同步需求,就不是随随便便可以做得出来了。
    Tumblr
        16
    Tumblr  
       2018-11-10 12:51:56 +08:00
    @withablink #2 “及以上”没见过,因为上限就是 10 万人,前段时间某些东西比较火的时候,前面的几个群都是 10 万人群(是不是这几个名字并不确定,至少前面的当初都是 10 万人群)
    jetbillwin
        17
    jetbillwin  
       2018-11-10 12:57:14 +08:00
    说靠区块链的是不是对区块链有什么误解……
    uqin
        18
    uqin  
       2018-11-10 13:16:01 +08:00
    哈哈 区块链恰恰是最低效的数据库(就目前水平) tg 本身跟区块链一毛钱关系没有 只是出于某种因素很多区块链项目交流喜欢用他交流而已
    gamexg
        19
    gamexg  
       2018-11-10 13:23:33 +08:00 via Android
    @withablink 区块链?你是认真的?
    MonoLogueChi
        20
    MonoLogueChi  
       2018-11-10 13:25:00 +08:00 via Android
    各大直播网站的弹幕不就是最好的示例吗,一个能容纳 60 亿人的“聊天群”
    chinvo
        21
    chinvo  
       2018-11-10 13:27:10 +08:00 via iPhone
    @withablink #9 区块链?别逗了。低效就是最大的缺点
    kslr
        22
    kslr  
       2018-11-10 13:28:22 +08:00
    直接通知消息,本地做历史不就行了
    RqPS6rhmP3Nyn3Tm
        23
    RqPS6rhmP3Nyn3Tm  
       2018-11-10 13:29:45 +08:00 via iPhone
    @MonoLogueChi 弹幕池会自动清的
    jadec0der
        24
    jadec0der  
       2018-11-10 14:18:38 +08:00 via Android
    你说的区块链 100 万人聊天群,是每秒钟只能发三条消息的那种吗?
    argsno
        25
    argsno  
       2018-11-10 14:24:19 +08:00 via iPhone
    区块链???
    ericls
        26
    ericls  
       2018-11-10 14:27:24 +08:00 via iPhone
    Erlang otp
    iceheart
        27
    iceheart  
       2018-11-10 14:27:43 +08:00 via Android
    为啥群不能太大?
    不说图片,一个人在群里发个 10k 的短文,1 万人在线,那流量就要 X10000,发个几十 K 的图片,server 的几百兆流量就出去了。
    azh7138m
        28
    azh7138m  
       2018-11-10 15:36:31 +08:00 via Android
    tg 有 10w 人的群,年初的时候各种币圈韭菜群不都是这个规模的吗?
    murmur
        29
    murmur  
       2018-11-10 15:38:13 +08:00
    ig 打 fnc 的直播算不算万人聊天群 不仅聊天还 刷礼物看视频呢
    fox0001
        30
    fox0001  
       2018-11-10 16:09:51 +08:00 via Android
    ingress 内置的聊天功能,算不算?貌似可以全球玩家同时聊
    lsgjwkr
        31
    lsgjwkr  
       2018-11-10 16:30:54 +08:00 via Android
    Telegram 万人群就很好,虽然我不知道有什么用。
    xuanbg
        32
    xuanbg  
       2018-11-10 20:33:37 +08:00
    万人群聊起来那叫一个没法看,速度 x10 的弹幕感受一下
    dxgfalcongbit
        33
    dxgfalcongbit  
       2018-11-10 23:17:20 +08:00
    @MonoLogueChi 弹幕可以算的话贴吧也行吧
    chuhemiao
        34
    chuhemiao  
       2018-11-11 10:46:13 +08:00
    貌似并解决不了什么刚需,不知道 discord 最高能多少人,见过群组过万很正常,频道能一直添加
    irgil
        35
    irgil  
       2018-11-11 11:55:26 +08:00
    这跟区块链有什么关系。。。
    innoink
        36
    innoink  
       2018-11-13 10:31:34 +08:00
    @withablink 我们哪里知道你说的类似是怎么类似
    有人觉得鱼和青蛙类似,因为都能在水里游泳
    有人觉得兔子和青蛙类似,因为都有腿还能跳

    人多不一定数据量就大,谁知道你的聊天者发送信息的频率多少,是否纯文本,是否分角色,满足什么样的统计规律,网络状况如何(是否存在大量不稳定的移动网络)
    只说一个类似,估计你自己都不知道你想问的究竟是什么
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3602 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 00:46 PVG 08:46 LAX 17:46 JFK 20:46
    Do have faith in what you're doing.
    ubao 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