導語:本文由Zoosk(一個具備5000萬會員的浪漫的社交約會網站)工程副總裁Peter Offringa所寫,講述了Zoosk的實時通訊技術。html
當咱們的會員從Zoosk得到的最有價值的消息時,他們能夠實時進行交互。畢竟,每一個用戶其鏈接的另外一端均可能在將來產生關係。這種狀況的興奮和豐富才能充分實現實時。該套件的Zoosk服務促進這些交互通常被描述爲實時通訊(RTC)。這些通訊交付使用XMPP協議,其餘流行的即時通訊產品也使用該協議。Zoosk的會員在三個不一樣的相互做用中體驗實時通訊:ios
這些通訊目前經過全部主要的Zoosk產品向用戶提供。web
RTC基礎設施算法
這些RTC服務經過一個高性能和高可擴展性的基於XMPP的基礎設施來交付。採用開源Jabber服務器Tigase,是這項聊天服務的核心。Tigase是用Java編寫的,而且咱們的平臺團隊已經建立了一些自定義的擴展,來處理Zoosk特定的業務邏輯。數據庫
Tigase部署在具備標準的8個CPU,並基於Linux的應用服務器級別的機器上。Tigase服務器在配對集羣中配置,經過負載均衡管理的主要和次要節點。全部的鏈接在一個時間點都被指定到主節點。若是服務查詢主服務器失敗,負載平衡器將當即開始從新引導用戶流量到輔助服務器。瀏覽器
這裏有18個成對的集羣,每一個都在任什麼時候間處理4000到8000個鏈接。除了套接字(socket)鏈接傳輸XMPP流量,Tigase還包括一個經過HTTP鏈接支持BOSH的服務。緩存
BOSH是咱們容許web瀏覽器瀏覽Zoosk.com和咱們的Facebook應用程序保持一個持久鏈接到Tigase的協議。咱們的桌面應用程序和移動應用程序使用標準的TCP/IP套接字鏈接。服務器
Tigase服務器經過Tigase和客戶端應用程序(web瀏覽器、移動設備、桌面應用程序)之間的持續鏈接來實時跟蹤用戶在線狀態。許多核心Zoosk的產品功能,包括搜索結果,概要視圖和消息傳遞,須要確保這種狀態是近實時得反映在全部客戶端應用程序中。爲了保持這種狀態的Zoosk基礎設施的其他部分相一致,用戶在用戶數據庫中的記錄被更新,以反映其當前的在線狀態,包括其最新的聯機轉換的時間戳記。網絡
用戶的在線狀態也存儲在咱們的搜索基礎設施的緩存上,從而使搜索結果能夠將在線狀態考慮在內。Zoosk搜索功能由一個SOLR服務器層驅動。咱們已經擴展每一個SOLR服務器,包括ehcache實例來存儲那些目前在線的用戶。這個緩存的在線狀態經過一個稱爲在線狀態管理器(OSM)的專用的Tigase實例來實時更新。併發
OSM從主要的Tigase聊天服務器接收自定義的顯示用戶在線狀態的XMPP數據包,而後讓一個網絡調用來更新ehcache實例的每個SOLR服務器。在高峯期,大約一分鐘內有8000個這樣的在線狀態轉換。保持這種高速緩存之外的SOLR索引容許用戶的狀態進行實時更新,獨立於主站到從站的週期性索引複製快照。用戶在線狀態將在查詢時與查詢結果結合起來,過濾仍是採納基於用戶當前是否在線。搜索算法更喜歡在線用戶,由於這鼓勵的實時通訊,併爲其餘用戶提供更豐富的體驗。
用戶交互與核心RTC功能之外的Zoosk服務,也能夠觸發生成一個實時通知給一個鏈接用戶的業務邏輯。例如,若是其餘用戶查看咱們的我的資料,或接受咱們發送的好友請求,咱們但願能當即知道該行爲。基於PHP的web應用程序將觸發異步工做,打開一個網絡鏈接到一個Tigase服務器,並將 XMPP 數據包傳遞給服務器,通知提供數據的自定義消息負載。該數據包被Tigase處理後,傳送到當前鏈接用戶的客戶端應用程序。
用戶的客戶端應用程序處理這個自定義數據包,並給用戶顯示相應的「提醒」或更新一個「標籤」。若是在用戶離線時,Tigase將存儲數據包,直到用戶從新上線。此時,它會將自定義數據包傳遞到用戶的客戶端應用程序。
監控和測試
Zoosk的技術運營團隊已經創建了許多方法來測試和監控RTC基礎設施的運營情況,以確保其響應速度和可用性。這些測試主要從Tigase服務器收集涉及各類機制的性能數據,或模擬真實用戶的互動。若是一個特定的健康檢查失敗或性能數據超出既定的臨界值,咱們的Nagios安裝將發出一個警告。
下一步是什麼
展望將來,咱們將繼續積極探索新的方法來讓Zoosk成員充分利用實時體驗。咱們本月將推出RTC支持咱們的移動web應用程序。其餘設備或媒介,將讓Zoosk應用程序一樣被實時鏈接。隨着咱們的成員鏈接到Zoosk應用程序的時間正在快速增長,咱們計劃提升咱們RTC的基礎功能,便於成員之間更容易互相發現和交流。
本文來自:High Scalability