如何用Netty集群打造高性能即时通讯服务?
- 内容介绍
- 文章标签
- 相关推荐

哎,说起这个Netty集群搞即时通讯,真是个让人头疼又让人兴奋的事情。当初为了给咱们的项目加点“劲儿”,提升用户体验,硬着头皮入了这坑。一开始吧,就想着简单粗暴地复制几个Netty实例上去, 太虐了。 后来啊...呵呵,问题来了!连接数一上来就炸,消息丢来丢去,用户体验直接掉到谷底。后来经过一番折腾,才慢慢摸索出一些门道。
单体Netty的困境与集群化需求
在项目初期,单体架构的Netty服务确实方便快捷。但是因为用户数量的增长和业务的复杂化,单体架构的弊端逐渐暴露出来。高并发下容易出现性能瓶颈、连接不稳定等问题。为了解决这些问题,必须将Netty服务进行集群化改过。
方案一:Nginx负载均衡
最开始我想到的方案就是用Nginx作为负载均衡器,将用户请求分发到不同的Netty服务器上。每个用户固定连接到某一台服务器上。这种方案看起来简单易懂,部署也比较方便。 我跪了。 但它存在一个致命的问题:无法实现跨服务器的消息传递!想象一下用户A和用户B分别连接到不同的Netty实例上,他们之间的消息根本无法送达!简直是鸡肋啊!
方案二:引入Redis
后来我寻思着是不是可以用Redis来解决这个问题?把所有用户的连接信息都存到Redis里 然后Controller服务查询Redis获取用户所在服务器的信息,再把消息路由到正确的Netty实例上。这听起来好像有点希望啊!但是问题又来了:Redis的性能瓶颈、数据一致性等等...想想就觉得头大,这事儿我得说道说道。。
方案三:基于消息路由的分布式架构
经过反复权衡和调研,到头来我们选择了, 通 观感极佳。 过RabbitMQ实现跨服务器的消息传递。
组件 功能 ZooKeeper 服务注册与发现、 动态配置管理 RabbitMQ 消息队列、 层次低了。

哎,说起这个Netty集群搞即时通讯,真是个让人头疼又让人兴奋的事情。当初为了给咱们的项目加点“劲儿”,提升用户体验,硬着头皮入了这坑。一开始吧,就想着简单粗暴地复制几个Netty实例上去, 太虐了。 后来啊...呵呵,问题来了!连接数一上来就炸,消息丢来丢去,用户体验直接掉到谷底。后来经过一番折腾,才慢慢摸索出一些门道。
单体Netty的困境与集群化需求
在项目初期,单体架构的Netty服务确实方便快捷。但是因为用户数量的增长和业务的复杂化,单体架构的弊端逐渐暴露出来。高并发下容易出现性能瓶颈、连接不稳定等问题。为了解决这些问题,必须将Netty服务进行集群化改过。
方案一:Nginx负载均衡
最开始我想到的方案就是用Nginx作为负载均衡器,将用户请求分发到不同的Netty服务器上。每个用户固定连接到某一台服务器上。这种方案看起来简单易懂,部署也比较方便。 我跪了。 但它存在一个致命的问题:无法实现跨服务器的消息传递!想象一下用户A和用户B分别连接到不同的Netty实例上,他们之间的消息根本无法送达!简直是鸡肋啊!
方案二:引入Redis
后来我寻思着是不是可以用Redis来解决这个问题?把所有用户的连接信息都存到Redis里 然后Controller服务查询Redis获取用户所在服务器的信息,再把消息路由到正确的Netty实例上。这听起来好像有点希望啊!但是问题又来了:Redis的性能瓶颈、数据一致性等等...想想就觉得头大,这事儿我得说道说道。。
方案三:基于消息路由的分布式架构
经过反复权衡和调研,到头来我们选择了, 通 观感极佳。 过RabbitMQ实现跨服务器的消息传递。
组件 功能 ZooKeeper 服务注册与发现、 动态配置管理 RabbitMQ 消息队列、 层次低了。

