Golang Go语言中使用Go/Kafka/Redis/Mongo构建IM系统
Golang Go语言中使用Go/Kafka/Redis/Mongo构建IM系统
技术栈 Go/Kafka/Redis/Mongo 不知此方案是否成熟 能否满足轻量级的 IM 系统 包含群聊
为什么要用 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可以提供一个高性能、可扩展的解决方案。以下是一个简要的架构说明:
-
Golang:作为后端开发语言,Golang以其高效的并发处理和简洁的语法,非常适合处理高并发的IM请求。
-
Kafka:用于消息队列,可以处理用户之间的实时消息传递。Kafka的高吞吐量和分布式架构使其成为处理大量实时消息的理想选择。通过Kafka,可以实现消息的异步处理和持久化,确保消息的可靠性和顺序性。
-
Redis:作为缓存和会话存储,Redis可以显著提高IM系统的响应速度。通过Redis,可以快速获取用户会话信息、在线状态等,同时支持发布/订阅模式,用于实现实时通知功能。
-
MongoDB:用于存储用户信息和历史消息。MongoDB的灵活文档模型可以方便地存储复杂的用户数据和消息内容。同时,MongoDB的横向扩展能力使其能够处理海量数据的存储和查询。
在构建IM系统时,还需要考虑消息的加密和安全性、用户认证和授权、系统的可扩展性和稳定性等。通过使用Golang、Kafka、Redis和MongoDB的组合,可以构建一个高效、可扩展且安全的IM系统。同时,结合合理的架构设计和代码优化,可以进一步提升系统的性能和稳定性。