im负载均衡的实现

im负载均衡的实现

im的负载均衡,其实主要就是tcp协议的负载均衡

当im项目的用户量增加到一定的量的时候,势必需要增加服务器来解决单机问题,web项目中,我们可以使用nginx做反向代理,这是因为web服务的连接都是无状态的,交互完毕立刻关闭,而在im中,我们要保持连接,并让服务器主动通知对方接受消息。一次完整的通讯应该是 客户-》服务器-》客户。单台服务器中,我们可以使用tcp连接,在连接中保存客户的id,实现消息的发送。如果是4台服务器,两个客户在不同的服务器怎么办?

解决方案1,如果是小规模的im的话,我们可以做一个路由服务,所有的im服务连接到路由服务器中,当客户的消息大道,im服务器之后,做完处理之后,不去寻找目标客户的连接,而是将信息发送到路由服务器中,然后由路由服务发送给所有的im服务器,然后所有im服务器再查看自己是否有目标客户的连接,有的话发送,没有的话丢弃!基本可以达到负载均衡的效果,但是规模变大时,反而是一种负担

解决方案2,还是方案1差不多的步骤其实,我们给每台im服务器一个唯一标识,同时监听一个rpc服务,当一个客户连接到服务器上之后,我们不仅在本地im服务器上记录用户id,还会在redis(etcd)等上面记录下所在im服务器的id,然后以用户id做键值,进行存储,两个路由服务器对外提供rpc服务,当客户的消息到达im服务器上之后,根据自己的id取模,确定发送给那个路由服务器,路由服务器收到消息之后,拿出目标客户的redis数据,就可以确定客户在哪一台im服务器上,直接rpc将数据转发给目标客户所在的im服务器,然后im服务器判断连接是否存活后,发送消息。

总结:方案二基本可以满足im的扩展了,微服务当中,服务的发现 注册,也是这种方案差不多,只是一个记录的是客户,一个记录的是内部服务!
有不对的地方,欢迎探讨!
另外,我是拿golang实现的,java只能读,不能写!-,- 只聊原理哦!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c 实现的开源 IM 系统是指使用 C 语言来开发的开源即时通讯系统。C 是一种高性能、低开销的编程语言,适合编写底层网络通信和系统级别的软件。下面将介绍一个使用 C 实现的开源 IM 系统:MongooseIM。 MongooseIM 是一个基于 XMPP(可扩展通信和表示协议)的开源 IM 系统,使用 C 语言进行开发。它的主要目标是提供可靠、高性能和可扩展的 IM 解决方案。MongooseIM 支持它能够在高负载情况下处理数万个并发用户,它具有横向扩展的能力,可以方便地扩展到更多的用户和服务器。 MongooseIM 的特点包括: 1. 可靠性和稳定性:它使用了高效的内存管理和多进程架构,确保系统的稳定性和可靠性。 2. 高性能:MongooseIM 提供了高性能的消息传递机制,支持实时消息的发送和接收。 3. 可扩展性:系统可以水平扩展,支持集群和负载均衡,可以轻松地扩展到数万个并发用户。 4. 安全性:MongooseIM 支持多种身份验证机制,包括用户名/密码、OAuth 和外部身份验证机制,确保用户数据的安全性。 5. 开放性和可定制性:MongooseIM 遵循 XMPP 协议,具有开放的标准,可以与其他支持 XMPP 的 IM 系统进行互操作。同时,开发者也可以根据自己的需求定制和扩展 MongooseIM。 总之,C 实现的开源 IM 系统 MongooseIM 是一个适用于大规模、高负载场景的高性能、可靠和可扩展的 IM 解决方案,具有安全性和定制性。它为开发者提供了一个功能强大的基础平台来构建自己的 IM 系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值