V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
chinaliuhan
V2EX  ›  Go 编程语言

什么是信箱模式?

  •  
  •   chinaliuhan · 2021-02-04 21:11:43 +08:00 · 3550 次点击
    这是一个创建于 1422 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天在群里和大伙聊 IM 架构,有个朋友提出信箱模式是现在最流行也是最强悍的架构。 请问什么是信箱模式? 貌似搜不到,问他又说自己领悟。

    23 条回复    2021-02-05 17:26:17 +08:00
    dreasky
        1
    dreasky  
       2021-02-04 21:15:44 +08:00
    自己瞎掰的吧,最流行会搜不到?
    kran
        2
    kran  
       2021-02-04 21:21:51 +08:00 via Android
    Erlang 的并发模型?
    chinaliuhan
        3
    chinaliuhan  
    OP
       2021-02-04 21:22:21 +08:00
    @dreasky 我搜了好久,全是信箱相关的东西。所以我自己想了一套架构
    ETCD 服务注册于发现,集群之间启动之时通过 ETCD 注册。
    集群之间相互通过 TCP 连接
    Keyes
        4
    Keyes  
       2021-02-04 21:30:41 +08:00 via iPhone   ❤️ 11
    利益相关,我不能说太多,如果真有心的话你可以看看国外最近的那个 cs 论文,找不到的话说明你不适合这个行业。信箱模式有多强,行内人都知道,而且大厂内部早就已经用了很多年了,不然某些 im 怎么能扛那么大的用户量?你自己好好想想,为什么偏偏叫信箱模式,不叫 xx 模式?其实原理就在这个词中,回去好好领悟一下就明白了,懂与不懂只隔一层纸。好了我就说这么多,不然同行要打死我,毕竟都是靠这个吃饭的,拜师的话可以私聊,我很忙,有拜师门槛,你自己想清楚了可以来找我


    以上纯属扯淡,包括什么需要自己领悟的信箱模式
    westoy
        5
    westoy  
       2021-02-04 21:35:11 +08:00
    去看 erlang 或者 zeromq
    lix7
        6
    lix7  
       2021-02-04 21:40:27 +08:00
    就是把原有的读扩散改成写扩散,IM 可以理解成实时性更强的邮箱
    chinaliuhan
        7
    chinaliuhan  
    OP
       2021-02-04 21:44:00 +08:00
    @Keyes 哭了
    chinaliuhan
        8
    chinaliuhan  
    OP
       2021-02-04 21:46:17 +08:00
    @lix7 老哥,可以展开讲讲吗?写扩散,意思是发送消息的时候同时连接集群中所有的节点吗?
    caotian
        9
    caotian  
       2021-02-04 21:51:44 +08:00
    前几年有文章分析微信的协议,说 foxmail qqmail 是张小龙做的,微信消息协议是扩展的邮件的 sync 协议,难道指的是这里的信箱? google 微信协议 有几篇文章有详细介绍
    chinaliuhan
        10
    chinaliuhan  
    OP
       2021-02-04 21:52:03 +08:00
    @lix7 我大概搜了一下读扩散和写扩散,感觉这个更加适合于群聊啊。我们当时聊的是 IM 集群,跨节点聊天。
    比如我在 Server1 你在 Server2,咱俩聊天。我当时想做一个中间件分发,但是又怕中间件单机性能不够。想用 Zookeeper 又不了解,后来用了消息中间件相互订阅。
    他推荐我信箱模式
    luozic
        11
    luozic  
       2021-02-04 22:01:05 +08:00
    Yuiham
        12
    Yuiham  
       2021-02-04 22:08:25 +08:00 via Android
    @luozic actor model 吧
    lizytalk
        13
    lizytalk  
       2021-02-04 22:14:12 +08:00
    @Keyes 懂得都懂,听懂掌声👏
    Keyes
        14
    Keyes  
       2021-02-04 22:34:12 +08:00 via iPhone
    @chinaliuhan 加了中间件分发就相当于做了一条总线嘛,用户量起来这条总线压力就太大了,小用户量没什么问题的
    zhlssg
        15
    zhlssg  
       2021-02-04 22:53:25 +08:00   ❤️ 1
    v2 也有谜语人了嘛
    BBCCBB
        16
    BBCCBB  
       2021-02-04 23:07:59 +08:00
    只知道读扩散和写扩散, timeline 模型. 这个信箱模式? 等一个答案
    littlewing
        17
    littlewing  
       2021-02-04 23:10:16 +08:00
    张小龙以前是做 QQ 邮箱的,现在你懂了吧
    YouLMAO
        18
    YouLMAO  
       2021-02-05 09:14:33 +08:00 via Android
    Actor 模型,信箱收消息干活
    ccc825
        19
    ccc825  
       2021-02-05 09:22:51 +08:00
    @lizytalk 老懂王了
    raysonlu
        20
    raysonlu  
       2021-02-05 11:06:46 +08:00
    @Keyes 以 Actor 模型为线索,稍微搜索了一下资料做了一下理解,不知道对不对(或者究竟是否沾边):
    其实所谓的“信箱”,归根到底,就是利用了一个“链”来存放消息,并且单步逐个消化“链”中的每一个消息。Actor 模型无非是有多个 Actor (例如处理信息的 Actor 若干个,组装信息的 Actor 若干个),每个 Actor 各自有自己的“信箱”并且根据信箱消息单步地干活。
    不知道这样理解是否为正确,我反观一下有点类似于把一个“进程”微服务化。
    fovecifer
        21
    fovecifer  
       2021-02-05 11:15:18 +08:00
    听起来像是 actor model?
    其实就是 CSP(Communicating Sequential Process)模型啊
    对应的传统的模型是 share memory
    woscaizi
        22
    woscaizi  
       2021-02-05 11:26:55 +08:00
    看你的描述应该是 Actor 模型
    zh5e
        23
    zh5e  
       2021-02-05 17:26:17 +08:00
    https://proto.actor/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.