Golang Go语言中使用Go/Kafka/Redis/Mongo构建IM系统

Golang Go语言中使用Go/Kafka/Redis/Mongo构建IM系统

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

28 回复

做吧 加油

更多关于Golang Go语言中使用Go/Kafka/Redis/Mongo构建IM系统的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


为什么要用 mongo…

可以带我一个吗?我是 Go 新人,给我点边边角角的活就好,不收钱只收反馈,告诉我代码哪里有需要改进的地方

可以看看 goim , B 站的架构师开源的

这技术栈我也有。。。

老实说, 用这个架构你根本没有这么多机器去撑连接数

“Go/Kafka/Redis/Mongo”

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

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

一个光部署就需要 3 个中间件, 3 台以上服务器的软件怎么可以被称为轻量呢?

你问可不可以?那当然是可以的

Kafka 太耗内存,nats 要好很多。Mongo 的必要性也不是很大。

其实只用 redis 就行,redis 5 已经支持 stream 了。

需要一个关系数据库的一种替代

gopush-cluster、goim 我学 go 语言的时候经常看他们的代码

7 月加急名单

最近也在构思一个 im 框架,用 ws,先看看别人的架构是怎样的,比如怎样支持海量连接数 /私聊 /群聊,怎样方便集群部署快速提高性能等等

我也一直在想这个。。但一直没去做 感觉自己功力不够 期待楼主分享

最近刚做了一套
Go/beanstalkd/redis/mysql
ws 接入支持分布式部署

呵呵, 都是老套路, 不搞一堆机器都跑不起来的, 自己玩太重(太贵),公司拿来用的话, 你是要怼微信? Slack ?拿投资了么?没投资服务器的钱都花不起吧。

#13 用 Java 实现过一个,可以参考下。

https://github.com/crossoverJie/cim

最近写了个单机客服系统,用的 Go,MySQL,Redis

先明确要实现什么功能 再考虑用什么中间件
脱离实际需求谈组件都是耍流氓

题主其实就是喜欢 Go/Kafka/Redis/Mongo 这一套技术栈,想凭借兴趣,用这一套东西,做个 IM 玩具,来玩玩罢了。

对于这种情况,建议大家支持鼓励他。

真是缘分,我前几天就看过老哥的项目,还给你了 star。

redis + go ,使用长连接 + brpop 这个方法阻塞消费 redis 队列数据,然后数据持久化可以使用 mysql,消息 ack 机智可以使用延迟队列,或者 brpoplpush 这个方法,多个线程检查一下就可以的。楼主喜欢这套技术栈不错,可以尝试一下,弄好了叫我围观哈

也晒下我们用 java 写的,目前 3k+ star 了

https://github.com/wildfirechat

加油,做好了围观

问下楼主侧重点是啥?我想到 2 个:
1,技术:为了把这几个技术用起来,那么直接开干吧
2,功能:轻量级 im 重点在于 socket 长连接,配合下数据库完事了

请问是否有机会交流一下 你的客服系统是怎么样设计的 我自己最近也有实现一个不过感觉写的很垃圾

哈哈 哥们你做出来了吗?

在构建IM(即时通讯)系统时,使用Golang结合Kafka、Redis和MongoDB可以提供一个高性能、可扩展的解决方案。以下是一个简要的架构说明:

  1. Golang:作为后端开发语言,Golang以其高效的并发处理和简洁的语法,非常适合处理高并发的IM请求。

  2. Kafka:用于消息队列,可以处理用户之间的实时消息传递。Kafka的高吞吐量和分布式架构使其成为处理大量实时消息的理想选择。通过Kafka,可以实现消息的异步处理和持久化,确保消息的可靠性和顺序性。

  3. Redis:作为缓存和会话存储,Redis可以显著提高IM系统的响应速度。通过Redis,可以快速获取用户会话信息、在线状态等,同时支持发布/订阅模式,用于实现实时通知功能。

  4. MongoDB:用于存储用户信息和历史消息。MongoDB的灵活文档模型可以方便地存储复杂的用户数据和消息内容。同时,MongoDB的横向扩展能力使其能够处理海量数据的存储和查询。

在构建IM系统时,还需要考虑消息的加密和安全性、用户认证和授权、系统的可扩展性和稳定性等。通过使用Golang、Kafka、Redis和MongoDB的组合,可以构建一个高效、可扩展且安全的IM系统。同时,结合合理的架构设计和代码优化,可以进一步提升系统的性能和稳定性。

回到顶部