Openfire 是使用JAVA并基于MINA架構實作的XMPP服務端程式,是以基本的性能調優主要集中在 系統、JVM 這兩層; 主要的名額也是并發使用者數和消息投遞成功率和耗時 。
建議: 如果你的産品目标是線上使用者超過100K,那麼最好早點考慮openfire之外的其他XMPP實作吧,比如 ejabberd ? 等等,erlang比java更适合做并發。 總的使用者量多少不會是大問題,你可以通過分片等來解決,但線上使用者和并發消息的處理能力,需要考慮多種不同方案。
關于這個部分,推薦一篇博文:
Openfire 性能優化
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 來實作的叢集方案,有待進一步驗證。