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