天天看點

Openfire 性能調優和叢集方案

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 來實作的叢集方案,有待進一步驗證。