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

想用 Go/Kafka/Redis/Mongo 做一个 IM 系统

  •  
  •   tbss · 2019-07-20 10:41:34 +08:00 · 7100 次点击
    这是一个创建于 1952 天前的主题,其中的信息可能已经有所发展或是发生改变。

    技术栈 Go/Kafka/Redis/Mongo 不知此方案是否成熟 能否满足轻量级的 IM 系统 包含群聊

    27 条回复    2021-03-05 14:37:54 +08:00
    darkweb
        1
    darkweb  
       2019-07-20 11:07:47 +08:00
    做吧 加油
    polebug
        2
    polebug  
       2019-07-20 12:41:18 +08:00 via Android
    为什么要用 mongo...
    richzhu
        3
    richzhu  
       2019-07-20 13:18:00 +08:00 via iPhone
    可以带我一个吗?我是 Go 新人,给我点边边角角的活就好,不收钱只收反馈,告诉我代码哪里有需要改进的地方
    securityCoding
        4
    securityCoding  
       2019-07-20 13:23:47 +08:00
    可以看看 goim , B 站的架构师开源的
    guyeu
        5
    guyeu  
       2019-07-20 14:08:52 +08:00
    这技术栈我也有。。。
    niubee1
        6
    niubee1  
       2019-07-20 14:11:54 +08:00
    老实说, 用这个架构你根本没有这么多机器去撑连接数
    lihongjie0209
        7
    lihongjie0209  
       2019-07-20 14:24:34 +08:00
    "Go/Kafka/Redis/Mongo"

    "能否满足轻量级的 IM 系统"

    自己想想如果你开发出来要部署的话需要多少机器, kafaka*3 redis*3 mongodb*3, 光存储这一块就最少需要 3 台机器, 而且只会更多.

    一个光部署就需要 3 个中间件, 3 台以上服务器的软件怎么可以被称为轻量呢?
    misaka19000
        8
    misaka19000  
       2019-07-20 14:26:14 +08:00 via Android   ❤️ 1
    你问可不可以?那当然是可以的
    liulaomo
        9
    liulaomo  
       2019-07-20 15:09:32 +08:00
    Kafka 太耗内存,nats 要好很多。Mongo 的必要性也不是很大。

    其实只用 redis 就行,redis 5 已经支持 stream 了。
    tbss
        10
    tbss  
    OP
       2019-07-20 16:54:17 +08:00
    @polebug 需要一个关系数据库的一种替代
    laravel
        11
    laravel  
       2019-07-20 18:25:07 +08:00
    gopush-cluster、goim 我学 go 语言的时候经常看他们的代码
    iamJack
        12
    iamJack  
       2019-07-20 18:40:08 +08:00
    @misaka19000 7 月加急名单
    Leigg
        13
    Leigg  
       2019-07-20 21:22:02 +08:00 via Android
    最近也在构思一个 im 框架,用 ws,先看看别人的架构是怎样的,比如怎样支持海量连接数 /私聊 /群聊,怎样方便集群部署快速提高性能等等
    Immortal
        14
    Immortal  
       2019-07-20 21:28:19 +08:00
    我也一直在想这个。。但一直没去做 感觉自己功力不够 期待楼主分享
    pubby
        15
    pubby  
       2019-07-20 22:19:15 +08:00 via Android
    最近刚做了一套
    Go/beanstalkd/redis/mysql
    ws 接入支持分布式部署
    niubee1
        16
    niubee1  
       2019-07-20 23:29:26 +08:00
    呵呵, 都是老套路, 不搞一堆机器都跑不起来的, 自己玩太重(太贵),公司拿来用的话, 你是要怼微信? Slack ?拿投资了么?没投资服务器的钱都花不起吧。
    crossoverJie
        17
    crossoverJie  
       2019-07-20 23:57:20 +08:00
    @Leigg #13 用 Java 实现过一个,可以参考下。

    https://github.com/crossoverJie/cim
    python
        18
    python  
       2019-07-21 01:06:50 +08:00 via Android
    最近写了个单机客服系统,用的 Go,MySQL,Redis
    STRRL
        19
    STRRL  
       2019-07-21 01:50:47 +08:00 via Android
    先明确要实现什么功能 再考虑用什么中间件
    脱离实际需求谈组件都是耍流氓
    laminux29
        20
    laminux29  
       2019-07-21 03:18:13 +08:00
    题主其实就是喜欢 Go/Kafka/Redis/Mongo 这一套技术栈,想凭借兴趣,用这一套东西,做个 IM 玩具,来玩玩罢了。

    对于这种情况,建议大家支持鼓励他。
    Leigg
        21
    Leigg  
       2019-07-21 06:39:39 +08:00 via Android
    @crossoverJie 真是缘分,我前几天就看过老哥的项目,还给你了 star。
    alpha2016
        22
    alpha2016  
       2019-07-21 08:08:53 +08:00
    redis + go ,使用长连接 + brpop 这个方法阻塞消费 redis 队列数据,然后数据持久化可以使用 mysql,消息 ack 机智可以使用延迟队列,或者 brpoplpush 这个方法,多个线程检查一下就可以的。楼主喜欢这套技术栈不错,可以尝试一下,弄好了叫我围观哈
    imndx
        23
    imndx  
       2019-07-21 08:39:51 +08:00 via Android
    也晒下我们用 java 写的,目前 3k+ star 了

    https://github.com/wildfirechat
    Y4ssss
        24
    Y4ssss  
       2019-07-21 09:02:46 +08:00 via iPhone
    加油,做好了围观
    opengps
        25
    opengps  
       2019-07-21 10:32:10 +08:00
    问下楼主侧重点是啥?我想到 2 个:
    1,技术:为了把这几个技术用起来,那么直接开干吧
    2,功能:轻量级 im 重点在于 socket 长连接,配合下数据库完事了
    ilovesusu
        26
    ilovesusu  
       2019-08-23 19:41:55 +08:00
    @python 请问是否有机会交流一下 你的客服系统是怎么样设计的 我自己最近也有实现一个不过感觉写的很垃圾
    lairdnote
        27
    lairdnote  
       2021-03-05 14:37:54 +08:00
    哈哈 哥们你做出来了吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:07 · PVG 05:07 · LAX 13:07 · JFK 16:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.