Openfire 性能调优和集群方案

Openfire 性能调优和集群方案

 

Openfire 是使用JAVA并基于MINA框架实现的XMPP服务端程序,所以基本的性能调优主要集中在 系统、JVM 这两层; 主要的指标也是并发用户数和消息投递成功率和耗时 。

 

建议: 如果你的产品目标是在线用户超过100K,那么最好早点考虑openfire之外的其他XMPP实现吧,比如 ejabberd ? 等等,erlang比java更适合做并发。  总的用户量多少不会是大问题,你可以通过分片等来解决,但在线用户和并发消息的处理能力,需要考虑多种不同方案。

 

关于这个部分,推荐一篇博文:

Openfire 性能优化 

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

 

 

Openfire集群方案

 

Connection Manager  http://www.igniterealtime.org/projects/openfire/connection_manager.jsp

实际上CM并不是一个集群方案,只是openfire官方提供的一个用来扩展openfire连接能力的工具;

CM 项目由 Guus(http://community.igniterealtime.org/people/Guus) 负责,官方数据表示一个CM可以连接至少5K个客户端,CM主要负责建立和维护与客户端之间的连接,其他业务逻辑处理都由后面的openfire完成,二者之间会维持会话;一个Openfire可以连接多个CM ,从而提高在线用户数。

 

但我个人的问题是如果你无法预测连接到CM1上的用户与连接到CM2上的用户发送消息的频率,那么这个CM的作用还是非常有限的,相当于登陆上QQ了,但发消息很慢,当在线用户多的时候。

 

Oracle Coherence / clustering plugin 

http://www.igniterealtime.org/projects/openfire/plugins/clustering/readme.html 

这个是最早也是官方一直在维护的集群插件,基于分布式内存共享模型,所以使用了Coherence,因为版权以及其他各方面的问题,此插件已经从3.7版本后开始被放弃了。实践中很多人也是使用这个插件,其实我个人觉得此插件带来的性能增长并不会非常显著,也无法做大大量的结点扩展。

 

Terracotta http://terracotta.org/ 

这是一个比较通用的分布式内存共享项目(Terracotta本身是解决实时大数据分析的),有一些人用来支持openfire的集群扩展,但门框较高,不是被推荐的方案之一。

 

Hazelcast   http://community.igniterealtime.org/message/224947 

这个是目前比较火的一个插件,很多人在尝试使用,性能未知,请参考上述链接。

 

open-clustering https://code.google.com/p/open-clustering/ 

这是一个典型的插件项目,干净整洁,只要放入plugins目录即可,在后台做基本设置就可以开启集群功能。项目的目标是“To provide a complete open source clustering plugin for Openfire with no dependecies on Oracle Coherence or any other closed component” 。  值得去尝试,但性能依然未知。

 

zkfire  https://code.google.com/p/zkfire/   

这是一个作者实验性的项目,借用zookeeper 来实现的集群方案,有待进一步验证。

 

 

 参考:

 

JGroups, Terracotta & Hazelcast

http://stackoverflow.com/questions/11404688/jgroups-terracotta-hazelcast

 

Hazelcast Performance vs MongoDB, Cassandra, Terracotta and Oracle Coherence

http://www.hazelcast.com/resources/hazelcast-performance-vs-mongodb-cassandra-terracotta-and-oracle-coherence/ 

你可能感兴趣的:(开源,集群,openfire,IM,XMPP)