轉詳解Zoosk千萬用戶實時通訊背後的開源技術

導語:本文由Zoosk(一個具備5000萬會員的浪漫的社交約會網站)工程副總裁Peter Offringa所寫,講述了Zoosk的實時通訊技術。html

當咱們的會員從Zoosk得到的最有價值的消息時,他們能夠實時進行交互。畢竟,每一個用戶其鏈接的另外一端均可能在將來產生關係。這種狀況的興奮和豐富才能充分實現實時。該套件的Zoosk服務促進這些交互通常被描述爲實時通訊(RTC)。這些通訊交付使用XMPP協議,其餘流行的即時通訊產品也使用該協議。Zoosk的會員在三個不一樣的相互做用中體驗實時通訊:ios

  • 存在。當一個成員正在積極地鏈接到 Zoosk RTC的基礎設施時,其公共的狀態將顯示爲「可用」。若是他們一段時間內均處於空閒狀態,它們的狀態過渡到「離開」。他們關閉或斷開鏈接的客戶端應用程序時,他們的存在將自動更改成「離線」。會員還能夠選擇顯示「隱身」的狀態呈現給其餘用戶。這個選項讓他們繼續使用Zoosk服務並看到其餘在線成員,但其自身不會出如今其餘用戶的好友列表裏。
  • 通知。重要的相互交互是在視覺上進行包裝,就像有短信時有「提醒」。提醒指導用戶完成如接受一個邀請、查看他們的我的資料或與其餘用戶相匹配等一系列事件。做爲一個彈窗給用戶接收,在他們的我的資料,或被視爲與另外一個用戶。Zoosk服務利用這些通知包,告訴客戶端應用程序來更新用戶界面的相關標記,如其餘用戶發來的未讀消息的數量。
  • 信息傳送。若是兩個用戶同時在線,他們能夠在一個熟悉的「即時消息」聊天版本里相互發送消息。這些消息經過RTC基礎設施來實時傳送。若是用戶將來使用不一樣的客戶端應用程序來從新鏈接,那麼消息內容將保存到一個提供將來消息歷史檢索的數據庫中。

這些通訊目前經過全部主要的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安裝將發出一個警告。

  • Tigase監控—這是一個cron上每10分鐘運行一次的腳本。它登陸到全部主要的聊天服務器,測試鏈接和傳輸。它記錄這些測試的結果,併發送更新到Nagios以肯定是否發佈警報。
  • Tigase性能指標—這些指標涵蓋了各類內部的Tigase措施,包括次執行關鍵功能、消息計數,隊列大小和內存消耗等。這些值每2分鐘經過XMPP管理界面特設stats命令收集。這些指標而後被傳遞到Ganglia進行繪圖。
  • 商業智能報告—每隔一小時,都有一個腳本到各個主要的Tigase服務器檢查活動鏈接數和信息數量。這個數據被加載到一個數據庫。一個定製的Excel報告能夠鏈接到這個數據源,並提供一個歸納的數據視圖和易於比較的歷史趨勢。
  • Tigase測試套件—這是一個無人控制的XMPP客戶,其登陸到每一個Tigase服務器並模擬真實的交互。Tigase測試套件將記錄功能測試的結果。

下一步是什麼

展望將來,咱們將繼續積極探索新的方法來讓Zoosk成員充分利用實時體驗。咱們本月將推出RTC支持咱們的移動web應用程序。其餘設備或媒介,將讓Zoosk應用程序一樣被實時鏈接。隨着咱們的成員鏈接到Zoosk應用程序的時間正在快速增長,咱們計劃提升咱們RTC的基礎功能,便於成員之間更容易互相發現和交流。

本文來自:High Scalability

相關文章
相關標籤/搜索