Tigase開發筆記2:Tigase組件詳解

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

Tigase的組件、插件配置非常靈活,幾乎都在tigase root doc path/etc/init.properties文件中進行配置.


1、Tigase HTTP API
實現XMPP和HTTP之間的橋樑,可通過REST調用實現對Tigase安裝的管理和維護,可通過腳本API在運行時進行擴展。
使用HTTP API組件,可以:
1)下載Tigase XMPP服務器運行時的統計,它包含了1000種不同的性能度量。可以做到輕鬆、快速的監控和早期預警等功能。
2)通過REST API管理Tigase XMPP服務器,實現Tigase服務器與第三方維護、管理系統的集成。(需要組件sess-man,默認會加載該組件)
3)靈活的腳本框架(Groovy),可以在運行時添加管理任務,可以在擴展管理和維護功能時無需重啓服務。
4)靈活的HTTP API框架,可以添加更多的服務並託管到XMPP引擎上。

#http-api
--comp-name-2=http
--comp-class-2=tigase.http.HttpMessageReceiver
--script-dir=src/main/groovy/tigase/admin
http/http/port[I]=8080
http/api-keys[s]=open_access
http/server-class[S]=tigase.http.jetty.JettyStandaloneHttpServer
#http/rest/rest-scripts-dir[S]=../http-api/src/scripts/groovy/tigase/rest


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不允許從一用戶訪問另一用戶的數據,在服務器端實現了強隔離。

config-type=--gen-config-def
--admins=[email protected]
--virt-hosts=10.5.1.48
--user-db=pgsql
#--user-db-uri=jdbc:postgresql://localhost/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true
--user-db-uri=jdbc:postgresql://10.5.1.12/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true


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)發佈訂閱頻道支持上百萬的訂閱者。

--comp-name-3=pubsub
--comp-class-3=tigase.pubsub.PubSubComponent






5、消息歸檔(Message Archiving)
Tigase提供了對消息歸檔的完整支持(XEP-0136擴展),支持數據庫分片(開箱即用),還能作爲外部組建部署到多種服務器上。
用戶往往希望保存聊天記錄以便以後檢索,基本上目前大多數聊天客戶端都在本地保存了聊天記錄,但是,用戶往往不止一個設備,用戶希望聊天記錄在每個設備上都能查到。那麼這些聊天記錄如何在各種設備的客戶端之間進行同步呢?
最佳的解決方法就是把聊天記錄存儲在服務器端,並運行用戶的所有設備都能訪問聊天曆史記錄。消息歸檔組件允許把用戶的聊天曆史記錄存儲到服務器的單個庫中,並能按需搜索。Tigase服務器提供了對消息歸檔擴展的完整支持。對終端用戶而言,他的工作完全透明,自動存儲消息。
消息歸檔提供了聊天文檔的大量特徵:
1)可以在任意時間打開/關閉聊天記錄
2)支持OTR(Off-The-Record,即聊後即焚)聊天
3)自動把羣聊分到不同線程以便邏輯區分不同的對話
4)根據不同的條件,可以靈活地檢索聊天曆史記錄
5)管理員可強制查看所有用戶的聊天記錄,而不管用戶的設置
6)支持開箱即用的數據庫分配,允許數據和負載進行分配

# message archive
--comp-name-4=message-archive
--comp-class-4 = tigase.archive.MessageArchiveComponent
#message-archive/archive-repo-uri=jdbc:postgresql://localhost/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true
message-archive/archive-repo-uri=jdbc:postgresql://10.5.1.12/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true
message-archive/auto=true
message-archiving/tags-support[B]=true
# message-archive-xep-0136  [message|body]
--sm-plugins=message-archive-xep-0136
sess-man/plugins-conf/message-archive-xep-0136/component-jid=[email protected]
sess-man/plugins-conf/message-archive-xep-0136/default-store-method=message
sess-man/plugins-conf/message-archive-xep-0136/required-store-method=message
sess-man/plugins-conf/message-archive-xep-0136/store-muc-messages=user


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瀏覽器發佈消息到發佈訂閱節點)

8、Android Messenger
完全支持XMPP/Jabber的主要規範和大多數擴展,至此文檔和照片的分享,好友的地理位置的分享。
Android Messenger是一個全功能的XMPP客戶端,而且還注意保護設備的電池電量,減少設備的流量。特徵如下:
1)至此XMPP最新的RFC規範和大多數擴展
2)面向移動的優化,減少電池使用率,降低流量
3)可以同時連接到不同的XMPP服務器,不限制賬戶數量
4)支持MUC羣聊
5)與好友分享地理定位
6)文檔和照片分享
7)支持發佈訂閱功能

9、Tigase Socks5 Proxy
實現通過NAT網絡地址轉換後的用戶間的二進制數據和文件的傳輸,針對大文件和小文件傳輸做了優化,支持傳說的quotas與計費系統的集成。
及時消息和實時通信系統如今不僅是聊天、在線狀態,還可以是語音、視頻通話。人們分享他們的想法、經驗、情感、照片、視頻以及文件。儘管文檔分享主要是企業和團體協作的主要功能,照片和視頻分享才幾乎是每個人都需要的。人們拍照、錄製視頻,並希望與朋友和家人即時分享。因此,當前的IM和RTC部署需要有效的文件共享系統。
理想情況下,你希望人們直接互聯並直傳文件。但這不可能,因爲如果用戶位於NAT背後,或者用戶希望與多人一起分享文件就做不到。對於後者,用戶需要多次傳輸文件給朋友才能實現羣體分享,消耗太大。
使用公網的代理服務器可以輕鬆解決以上問題。它允許用戶通過代理傳輸文件。在NAT背後的用戶都可以連接到公網代理服務器,並通過它傳輸共享的文件給多個好友,每位好友可以從服務器下載分享的文件。
Tigase Socks5 Proxy提供了很多獨特的功能:
1)NAT背後的用戶的二進制數據傳輸,可交換各種類型的文件
2)超高吞吐率,可充分利用帶寬,尤其是傳輸大文件時
3)大量的並行傳輸,同時傳輸多個文件
4)全局配額或爲每位用戶配額或爲域配額,以限制傳輸和防止濫用
5)易於與計費系統相集成,以便爲用戶提供更好的服務
6)提供積分系統
7)設置多種機器來分擔負載
8)虛擬域的支持,允許隔離用戶和客戶端到不同的計費組
9)很好地與Tigase XMPP服務器集成,在集羣模式下部署系統支持數百萬在線用戶

10、Tigase CLI Management
提供對XMPP服務器的命令行訪問,輕鬆完成管理任務。
此功能很方便,它可以通過一個漂亮的圖形界面來管理。但是,對於Tigase集羣模式的安裝,最好是採用命令行方式管理,尤其是執行那些通過定時器運行的自動化任務。Web控制檯和獨立應用都幹不了這些任務,還是需要可靠的、靈活的命令行工具來完成這些任務。這就是Tigase命令行管理工具。它的特徵如下:
1)完全支持XEP-0133規範的管理命令
2)通過API編寫腳本做擴展。儘管工具只是一個Java應用程序,但還是可以使用腳本語言(如Groovy、Python、Ruby等)擴展其功能和命令
3)提供大量開箱即用的管理任務,滿足常規的管理需求
4)簡單、易用,學習成本低

11、Tigase MUC
支持基於角色的羣聊,提供API和自定義擴展,可處理數百萬的小型聊天室和有數千用戶的大型聊天室。
真正的社區需要人們的互動。這可以通過多種方式實現:電郵、Twitter、FaceBook、論壇、網站評論等。但是,這些都比不上實時通信,發送聊天消息,可以立即得到迴應,與朋友在線聊天。多個人一起聊可以用羣聊。
Tigase的MUC組件可以提供:
1)實時羣聊
這意味着很多人可以在虛擬房間聊天,交流想法。
2)基於角色的房間成員
允許設定房間管理員、版主,分配發消息和允許監聽/讀取消息的權限。
3)密碼保護的聊天室
創建私人羣聊室,有密碼的用戶才能進入聊天室。
4)受邀的聊天室
受邀的用戶才能進入聊天室。
5)私人的、無形的聊天室或公共聊天室都可以按需求輕鬆創建
6)聊天曆史記錄到數據庫
7)通過MUC集羣模式支持數百萬的羣聊室,負載可以有效地分佈到各服務器上,並提供了幾乎無線的可擴展性
8)MUC集羣模式支持超大羣聊天室,可容納成千上萬的用戶,可以把單個聊天室分不到集羣中的多臺服務器上。
所有提供的MUC功能都是開源軟件,只有MUC集羣模式是官方額外提供的商業級功能。

# muc
--comp-name-1=muc
--comp-class-1=tigase.muc.MUCComponent
muc/history-db=pgsql
#muc/history-db-uri=jdbc:postgresql://localhost/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true
muc/history-db-uri=jdbc:postgresql://10.5.1.12/tigasedb?user=postgres&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true
muc/muc-lock-new-room[B]=true
muc/muc-allow-chat-states[B]=true
muc/default_room_config/muc#roomconfig_persistentroom=true



12、Tigase Testsuite
針對基本的XMPP和大多數擴展,提供了數百個測試。
Tigase測試包是一個強大的工具,可以運行Tigase服務器的功能和性能測試。它不限於Tigase,還可以測試支持XMPP協議的服務器。但是,此測試包是爲Tigase設計的,是爲了確保Tigase各模塊功能正常。
這裏是測試結果: http://build.tigase.org/~tigase/
實際上,Tigase的每日構建版都用此測試包做了測試,以保障代碼質量。
詳見: http://build.tigase.org/nightlies/tests/
可以基於此測試包設計複雜的測試場景,此測試包最有趣的特點包括:
1)自定義的腳本語言,可使用很少的代碼即可設計非常複雜的測試場景。
2)無需添加簡單的測試腳本(內容很全了),在大多數場景下只需指定發送到的服務器、預期的返回結果即可。
3)產生HTML格式的測試報告:成功的測試標綠,失敗的測試標紅。
4)對每個測試案例都有定時器,因此可以清楚知道服務器的響應時間,還可以用它比較各版本之間的性能差異。
5)每個測試案例都有完整的協議交互的輸出,可以定位和分析錯誤。
6)所有的測試案例都是運行在網絡並執行了服務器的方方面面,因此測試包是完整的測試,從網絡層到上層組件都得到了測試。

13、Tigase ALB
無限制的設備在線數,地理上發佈的集羣節點,減少97%網絡流量。
有幾種解決方案,允許你把用戶分配到集羣節點,並分發到多個服務器上。這些解決方案包括:Round-robin輪詢、專業級的硬件路由器(比如Cisco的)、軟硬件防火牆、代理服務等。
這些方案都是爲用戶隨機分配機器,分佈或許是比較平均的,但不是最佳的,如果你使用了Tigase ALB(Advanced Load Balancer),那麼可以做到其它方案做不到的三件事:
1)爲1億或更多在線用戶運行安裝
2)構建地理上分散的XMPP集羣
3)爲有非常大的聯繫人列表的用戶運行安裝,聯繫人列表的人數平均有數千個
對Tigase ALB來說是可能的,因爲它把用戶分配到特定的集羣節點或節點組。它會分析所有用戶賬戶的社交網絡,把用戶分配到特定的機器上,以便減少網絡流量。它採用了基於人工智能和遺傳算法的高級技術來實現這一點。
ALB很複雜,但他工作的很好。
ALB是非入侵式的,它可以在後臺不斷地優化用戶數據,並逐步提高系統的整體性能。ALB可以在任意時間打開和關閉,而不會影響XMPP的安裝。ALB可以與Round-robin輪詢或其它負載均衡方案一起工作。一旦你正確地安裝並配置ALB到系統中,它會變爲不可見,但你可以看到效果,系統的性能每天都在變得更好。

14、Tigase STUN
允許NAT背後的設備直連,減少服務和系統的負載,降低網絡流量。
Jabber、XMPP、IM(Instant Messaging)、IC(Instant Communication)服務最初是交換文本信息。消息文本、用戶狀態文本、聯繫人信息文本等,都是通過這樣的系統進行交換的。
現在,各種類型的文檔、招聘、視頻、數據庫等,這些二進制數據也需要實時交換。XMPP服務器可以搞定這個,它可以作爲二進制連接握手代理和實際的P2P連接的代理或中轉代理。偶爾還可作爲帶內傳輸。這裏有多種選擇,通常首選薩送大的二進制數據塊給直連的用戶。這也是最高效和成本最低的方式。
不幸的是,用戶之間要實現直連是很困難的,這是因爲NAT的原因,用戶在NAT背後,所以用戶的設備是不可見的,Internet不能直達。如果某個應用從NAT背後的設備連接互聯網時,它是沒有辦法告知服務器它自己的公開/靜態IP地址的,因此它也沒法提供任何可選項給第三方如何建立P2P連接。這就需要一箇中間服務器,STUN服務器可以搞定這個。它允許應用程序發現自己的公開IP地址,並與另一方協商最優的直連。
此方案的優點:
1)位於NAT背後的兩個設備可以建立P2P直連
2)消除了網絡消耗大的二進制傳輸,減少了服務器負載;
3)通過減少了負載和網絡流量,降低了運營成本
4)如果需要媒體交換作爲用戶到XMPP服務的連接,那麼它是一個理想的解決方案。它可以很好地與Tigase XMPP服務器相集成,可以部署到多臺服務器上,無需複雜的配置。

15、Tigase Monitor監控
更早的發現網絡瓶頸。
Tigase Monitor是一個獨立的桌面應用程序,它可以連接到所有的Tigase服務器,並提供所有Tigase系統的狀態概覽。它可以展示有意義的圖表,包括:CPU利用率、內存使用率、用戶的分佈、不同類型的流量……
除此以外,它還提供了內部隊列尺寸、潛在的評獎、平均處理時間的詳細信息。
Tigase Monitor是實時監控,系統有狀況,會立即得到通知。
Tigase Monitor特徵包括:
1)Tigase測量的實時數據活動圖
2)單個應用監控的服務器數量無限制
3)自定義的“第二”窗口:用於顯示自定義的測量數據
4)系統性能和瓶頸的詳細信息
5)自動產生屏幕截圖,並週期性的存儲到硬盤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章