想用 Go/Kafka/Redis/Mongo 做一个 IM 系统 - V2EX
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 系统

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

    技术栈 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     Solana     2669 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 09:44 PVG 17:44 LAX 02:44 JFK 05:44
    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