`
ssxxjjii
  • 浏览: 944886 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Openfire 性能优化

    博客分类:
  • IM
 
阅读更多

http://blog.csdn.net/smm11230704/article/details/7468010

 

 

Openfire  是一个XMPP协议的IM Server。

基于MINA的java nio服务器。

一般就是使用mysql来作为数据库,保存配置配置信息、离线信息、用户数据。

官网的数据是支持5000人同时在线,使用connectionManager可以实现支持3.3万人在线。

这数据一点都不漂亮,只能作为一个类似腾讯通的局域网聊天工具使用。

 

首先说点题外话,我测试用connectionManager。

这是一个openfire提供的连接管理器,作用其实是数据整流。

源码里是通过阻塞式多线程将信息通过特定端口与openfire提交数据。

测试之后的结果,这玩意严重影响效率,放弃,我们的目标不只是3.3万人。

 

Openfire使用mysql配合它不知所谓几乎无效的的Cache机制就注定无法支撑高并发,

所以第一步,将数据库切换为比较强一点的MongoDB。

但是MongoDB也是有问题的,在高并发时才会发现,MongoDB的锁表十分严重,

经过调查发现,MongoDB也比较坑爹,他是使用“全局锁”的,也就是说,你更新A表的时候,会锁住B表,数据更新后解锁。

所以作为实时查询数据库即使是使用MongoDB的master/slave模式依然不能胜任。

 

增加解决方案,缓存层,使用redis作为MongoDB的数据缓存,在访问时数据时,首先进入Cache层访问redis,如果没有,再去访问MongoDB,然后再回头填充Redis。

OK,数据源解决了,接下来确认需要在什么地方切入。

 

1,首先是将用户信息数据切换到MongoDB中。并停止Openfire自己的Roster服务,在管理控制台设置 xmpp.client.roster.active = false

2,AuthProvider,这里是登陆模块,可以继承接口重写一个属于自己的Provider。

重写authenticate方法,将登陆验证请求交给cache层。

3,离线信息的存储在之后也会成为负担,那么继承OfflineMessageStore类,重写属于自己的离线信息策略,将离线信息保存到Redis中。

4,重写状态更新的广播:PresenceUpdateHandler中的broadcastUpdate方法。

 

好了,这时候Openfire已经被修改的面目全非,但是效率已经不可同日而语了。

这时候还有一个问题,就是Openfire没有消息保障机制,也就是说,网络不稳定的时候,客户端异常断线,信息就会发送到空气中,

需要再发送信息的时候实现“握手机制”来保障信息的可靠性。不细说了,自己百度。

 

这时候Openfire的在线用户可以飚到6W无压力,但是死活上不去了,又被限制了。

在error.log中会发现类似 “open files too larger” 一类的错误,这些是linux系统参数:最大文件打开数。

在linux下执行ulimit -a就能观察最大的文件打开数,执行ulimit -n 350000设置为35万,然后kill掉openfire退出控制台,重新连接控制台使其生效,重新启动Openfire。

好吧,这时候用户量可以飙6W以上了。

XMPP服务器的测试工具,比较简单的可以使用tsung来实现,简单的配置,模拟成千上万的用户登陆,并且可以模拟HTTP等其他请求。

 

接下来就是单台服务器容量的问题了,我们服务器是Dell R710, 64G内存 16核CPU,15000转硬盘。

服务器在这种架构下在线用户数据在29W左右,几乎已经是单台Openfire封顶了。

开始考虑集群,不过Openfire的几种集群都测试过,效果不理想,有一个神马war包的插件,弄上去时好时坏,放弃。

还有一个oracle的集群插件,不过在高压下多台Openfire直接脱离集群,自己玩自己的了。。。日。

 

如果到了十万二十万左右的在线用户级别,就放弃掉Openfire,可以尝试使用tigase试试,尽管我没试过,不过看过源码,觉得还是比较可靠。

或者和我们一样,自己写通讯服务器。

 

分享到:
评论

相关推荐

    openfire深入浅出

    最后,故障排查和性能优化是运维人员不可忽视的部分。书中会提供一些常见问题的解决方案,教你如何诊断和解决OpenFire运行中遇到的问题。同时,你将学习到如何调整服务器参数以提高性能,包括内存分配、线程池设置、...

    基于openfire 仿QQ

    9. **性能优化**: - 为了提供流畅的用户体验,开发者可能会进行内存优化、网络请求优化,如使用Retrofit、OkHttp等库进行网络请求,Gson或Jackson处理JSON数据,使用异步加载策略等。 10. **测试与调试**: - ...

    openfire_4_0_1

    - 定期更新Openfire,以获取最新的安全补丁和性能优化。 - 根据服务器硬件和负载情况调整服务器设置,如线程池大小、内存分配等。 - 监控日志,及时发现并处理异常情况。 6. **故障排查** - 当遇到问题时,首先...

    Openfire 3.4.3

    7. **性能优化**:虽然这是一个较早的版本,但Openfire已经注重性能优化,可以处理大量并发连接,满足大规模用户的需求。 8. **资源管理**:Openfire能够有效管理服务器资源,包括内存、CPU和磁盘空间,确保服务的...

    openfire部署学习资料

    2. 性能监控:使用监控工具跟踪服务器性能,如CPU使用率、内存占用、网络流量等,以便优化配置。 以上只是Openfire部署学习的基本内容,实际操作中可能涉及更多的细节,如数据库的优化、服务器的硬件配置、网络环境...

    openfire聊天服务端源码

    通过阅读源码,我们可以学习到如何处理XMPP协议,如何实现安全的网络通信,以及如何优化服务器性能等技术。 虽然文件列表中只提到了"CMSPF",这可能是某个特定模块或者项目的缩写,但由于具体文件内容未知,我们...

    xmpp,openfire搭建ppt

    **XMPP与Openfire搭建详解** ...但请注意,实际开发中可能还会遇到其他挑战,如网络条件、性能优化、用户体验设计等,需要不断学习和实践来提升。这份PPT文档将为你提供详细的指引,帮助你快速掌握相关知识。

    Jwchat+openfire部署

    - 监控系统性能,定期更新和维护,确保系统稳定运行。 通过以上步骤,你可以成功部署一个基于Jwchat和Openfire的即时通讯系统。这个系统不仅能满足基本的聊天需求,还能通过扩展插件和API实现更多功能,满足不同...

    openfire3.9.3 WINDOWS安装包

    它包含了对之前版本的一些错误修复、性能优化以及新功能的添加。对于Windows操作系统,它提供了易于安装的.exe文件,方便用户快速部署。 2. **Windows 安装过程**:首先,用户需要下载`openfire_3_9_3.exe`这个执行...

    openfire简介.pdf

    - **性能优化**:Openfire的高性能依赖于合理的架构设计和代码优化,特别是在处理大量并发连接和消息时。 总结来说,Openfire是一款功能强大、高度可定制的实时通信服务器,基于XMPP协议构建。无论是企业级的即时...

    openfire 下载

    9. 性能优化:根据你的用户规模和需求,可能需要对Openfire进行一些性能调优,比如调整内存分配、启用集群模式、优化数据库连接池等。 10. 移动客户端支持:Openfire可以与许多支持XMPP协议的移动IM应用配合使用,...

    openfire 安装包

    11. **性能优化**:根据服务器硬件资源和用户负载,可能需要调整Openfire的配置以优化性能,例如调整内存分配、并发连接数等。 理解并掌握以上知识点,将有助于你在Linux环境中顺利安装和管理Openfire即时通讯...

    openfire企业版插件

    **coherence-cache-config.xml** 和 **tangosol-coherence-override.xml**:这些可能是与Oracle Coherence相关的配置文件,Coherence是一个分布式数据网格解决方案,可能被Openfire插件用来优化数据存储和访问性能。...

    openfire_4_1_5

    7. **性能优化**:Openfire 4.1.5可能包含了性能优化,比如改进的内存管理和更快的协议处理,以应对大量并发用户的需求。 8. **API与SDK**:开发人员可以利用Openfire的API和SDK来创建自定义客户端或与现有应用集成...

    openfire xmpp协议源码

    2. 性能优化:合理设计消息推送策略,避免过度耗电和网络资源。 3. 异常处理:对网络断开、服务器异常等状况进行优雅的处理,提高用户体验。 五、实战案例 实际开发中,可以通过创建Android示例项目,实现注册、...

    openfire jvm配置文件

    在Openfire的运行中,JVM(Java Virtual Machine)的配置对于优化性能、管理内存以及确保稳定运行至关重要。`openfire.vmoptions`和`openfire-service.vmoptions`是两个与Openfire JVM配置相关的文件。 `openfire....

    openfire集群用到的 Oracle Coherence

    5. **性能优化**:Oracle Coherence内置了多种优化机制,如数据分区、数据压缩以及对网络传输的优化,有助于减少延迟,提升响应速度。 6. **故障检测与恢复**:Coherence有强大的健康检查和故障检测机制,一旦发现...

    openfire3.10.0

    3.10.0版本可能包含一些性能优化和新功能,用户可以关注官方文档或社区论坛获取最新资讯。 总之,Openfire 3.10.0是开发即时通讯应用的理想选择,它提供了全面的功能、强大的扩展性以及良好的安全性和稳定性。...

Global site tag (gtag.js) - Google Analytics