深入認識TigaseXMPPServer(上)

chszs發表於2014-11-19
版權宣告:本文為博主chszs的原創文章,未經博主允許不得轉載。 https://blog.csdn.net/chszs/article/details/41280957

深入認識Tigase XMPP Server(上)

作者:chszs,轉載需註明。部落格主頁:http://blog.csdn.net/chszs

本文的目的是深入認識Tigase XMPP Server的特性。

1、Tigase HTTP API

實現XMPP和HTTP之間的橋樑,可通過REST呼叫實現對Tigase安裝的管理和維護,可通過指令碼API在執行時進行擴充套件。

使用HTTP API元件,可以:
1)下載Tigase XMPP伺服器執行時的統計,它包含了1000種不同的效能度量。可以做到輕鬆、快速的監控和早期預警等功能。
2)通過REST API管理Tigase XMPP伺服器,實現Tigase伺服器與第三方維護、管理系統的整合。
3)靈活的指令碼框架,可以在執行時新增管理任務,可以在擴充套件管理和維護功能時無需重啟服務。
4)靈活的HTTP API框架,可以新增更多的服務並託管到XMPP引擎上。

2、Tigase XMPP Server

全球大約有1億的裝置連線到Tigase伺服器上,全球大約有1100臺伺服器部署執行著Tigase伺服器。

業界有很多優秀的開源XMPP伺服器,比如eJabberd、Openfire、Jabberd2、Prosody,還有一些優秀的商業XMPP伺服器,比如lsode、Jabber XCP等。在XMPP.ORG網站上可以看到完整的列表。

Tigase XMPP伺服器是相當獨特的,它完全支援最新的規範(如RFC6120-XMPP CORE、RFC6121-XMPP IM和其它擴充套件)。
1)高度優化的。主二進位制檔案小於1MB,可執行於10MB記憶體的裝置上。
2)高度模組化。每個部件或元件都可以通過配置載入或替代。
3)非常靈活。整合到系統中很方便,支援開箱即用的叢集,無需尋找附加軟體或擴充套件庫。
4)為低、中、高檔伺服器而設計。還在Amazon的EC2雲上廣泛測試過。
5)良好的測試。有專門的工具來執行自動化測試,還可以手動執行相容性測試,以及大量的負載測試。所有的測試結果都是公開的,所有測試使用的工具和配置細節都是公開的。
6)支援指令碼。支援Groovy、Python、Ruby、Scala等指令碼語言編寫擴充套件。
7)易於監控。可以通過HTTP、SNMP、JMX、XMPP等方式監控伺服器。
8)支援SSL。Tigase從設計上就保證了安全,保護使用者的隱私。API不允許從一使用者訪問另一使用者的資料,在伺服器端實現了強隔離。

3、Tigase ACS

Tigase單個安裝(One Installation)可以支撐1400萬線上使用者;單個安裝美妙可以處理50萬條訊息;單個安裝可以實現40臺伺服器叢集。即Tigase ACS。

Tigase ACS是Tigase XMPP伺服器的商業級的叢集實現。它專注於某些目標,如聯絡人列表超過10個,以及大規模XMPP系統工作在叢集模式:
1)在安裝時解決網路流量的問題
2)允許擴充套件到上百萬的線上使用者或裝置
3)允許把負載分配到多種機器上
4)實現系統的高可用,預防服務的中斷
5)支援超大群聊
6)提供訊息推送服務

使用ACS可以達到:
1)降低叢集節點間的網路流量10倍以上
2)減少CPU利用率至少5倍
3)在高負載情況下也能提供可靠服務
4)支援大量的連線
在設計上可處理500萬以上的線上使用者。我們測試過產品狀態,支援150萬線上使用者。
5)支援多伺服器
設計上可以在50臺以上伺服器上有效工作。測試過10個叢集節點,產品系統執行在40臺機器的情況。
6)部署極其簡單
只需修改一點配置,資料庫層不變。

4、Tigase釋出訂閱(PubSub)

Tigase支援完整的釋出/訂閱(PubSub)擴充套件規範。可以把訊息推送到上百萬的頻道中,每個頻道可以有上百萬的訂閱使用者。叢集模式下提供了近乎線性的可擴充套件性和負載分配。

釋出訂閱擴充套件允許你建立頻道供使用者訂閱,你可以把內容推送到頻道併發布。然後全部內容或者只是更新的內容會被髮送給所有的訂閱者。這種基於角色的系統,與群聊類似,但訂閱者不必線上,離線也能把訊息推送給使用者(只要使用者一上線就能收到)。

釋出訂閱功能可以做什麼?
1)可以根據興趣分組內容,如體育、科學、天氣、新聞等,並把內容推送給感興趣的人。
2)可以用於災害預警,居民可以根據地理位置進行分組。
3)可以提供基於位置的服務。
4)業務流程可以使用此方式來傳送警告。

Tigase的釋出訂閱可以提供:
1)交付近乎實時的通知給訂閱頻道的使用者
2)基於角色的訂閱系統,決定哪些使用者只能接收/讀取內容,哪些使用者可以釋出內容到頻道,以及頻道級管理員、全域性管理員。
3)自定義內容和通知後設資料可以很好地匹配各種需求。
4)靈活的基於使用者的交付系統,可以決定是否只把通知交付給線上訂閱的使用者;是否把通知交付給所有訂閱的使用者;還可以指定通知的過期時間,以及其他很多選項。
5)支援數百萬的釋出訂閱頻道交付通知給訂閱者。
6)釋出訂閱頻道支援上百萬的訂閱者。

5、訊息歸檔(Message Archiving)

Tigase提供了對訊息歸檔的完整支援(XEP-0136擴充套件),支援資料庫分片(開箱即用),還能作為外部組建部署到多種伺服器上。

使用者往往希望儲存聊天記錄以便以後檢索,基本上目前大多數聊天客戶端都在本地儲存了聊天記錄,但是,使用者往往不止一個裝置,使用者希望聊天記錄在每個裝置上都能查到。那麼這些聊天記錄如何在各種裝置的客戶端之間進行同步呢?

最佳的解決方法就是把聊天記錄儲存在伺服器端,並執行使用者的所有裝置都能訪問聊天曆史記錄。訊息歸檔元件允許把使用者的聊天曆史記錄儲存到伺服器的單個庫中,並能按需搜尋。Tigase伺服器提供了對訊息歸檔擴充套件的完整支援。對終端使用者而言,他的工作完全透明,自動儲存訊息。

訊息歸檔提供了聊天文件的大量特徵:
1)可以在任意時間開啟/關閉聊天記錄
2)支援OTR(Off-The-Record,即聊後即焚)聊天
3)自動把群聊分到不同執行緒以便邏輯區分不同的對話
4)根據不同的條件,可以靈活地檢索聊天曆史記錄
5)管理員可強制檢視所有使用者的聊天記錄,而不管使用者的設定
6)支援開箱即用的資料庫分配,允許資料和負載進行分配

6、JaXMPP庫

提供Android移動裝置、GWT Web客戶端、獨立的Java應用程式等庫,完全支援XMPP/Jabber規範及其所有主要的擴充套件。

JaXMPP代表Java XMPP,但它不僅是Java庫,它還相容GWT,因此可以用於開發Web客戶端,它還相容Android Java,因此可以用於開發帶XMPP支援的Android移動應用,以及常規的Java應用程式。

此客戶端庫的功能完整,而且程式碼開源並免費。
JaXMPP庫網站: 
https://projects.tigase.org/projects/jaxmpp2
JaXMPP庫文件: 
https://projects.tigase.org/projects/jaxmpp2/wiki

7、Web客戶端

全功能的Web客戶端,支援基本的聊天、MUC、釋出/訂閱和許多擴充套件管理介面,通過CORS,經BOSH或WebSocket連線到任意XMPP伺服器實現跨站點支援。

CORS:Cross-Origin Resource Sharing,跨域資源共享

功能非常全,支援:
1)完整的XMPP規範
2)Web優化(更快的重連和聊天狀態恢復)
3)訊息歸檔支援(從伺服器檢視歷史聊天記錄)
4)良好的MUC群聊協議(訪問Web瀏覽器時可以群聊)
5)釋出訂閱(直接從Web瀏覽器釋出訊息到釋出訂閱節點)