V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
withablink
V2EX  ›  问与答

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

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

    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 群只是一个比喻。实际需求中,参与的不一定是人。

    想了想,如果参与人数特别多,还真的似乎只有靠区块链。
    gy911201
        6
    gy911201  
       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   ·   实用小工具   ·   3410 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:42 · PVG 08:42 · LAX 16:42 · JFK 19:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.