天天看點

詳解Zoosk千萬使用者實時通信背後的開源技術 詳解Zoosk千萬使用者實時通信背後的開源技術

詳解Zoosk千萬使用者實時通信背後的開源技術

發表于 22小時前|  174次閱讀| 來源 High Scalability|  0 條評論| 作者 Peter Offringa

RTC Tigase 實時通訊 Zoosk PeterOffringa 摘要:Zoosk是一個具有5000萬會員的浪漫的社交約會網站,為了更好的讓使用者體驗實時通信,讓他們獲得更有價值的消息,公司對實時通信背後的技術進行了深入開發。本文就是其開發工程副總裁Peter Offringa所寫,主要講述了Zoosk背後的實時通信技術。

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

當我們的會員從Zoosk獲得的最有價值的消息時,他們可以實時進行互動。畢竟,每個使用者其連接配接的另一端都可能在未來産生關系。這種情況的興奮和豐富才能充分實作實時。該套件的Zoosk服務促進這些互動一般被描述為實時通信(RTC)。這些通信傳遞使用XMPP協定,其他流行的即時通信産品也使用該協定。Zoosk的會員在三個不同的互相作用中體驗實時通信:

  • 存在。當一個成員正在積極地連接配接到 Zoosk RTC的基礎設施時,其公共的狀态将顯示為“可用”。如果他們一段時間内均處于空閑狀态,它們的狀态過渡到“離開”。他們關閉或斷開連接配接的用戶端應用程式時,他們的存在将自動更改為“離線”。會員還可以選擇顯示“隐身”的狀态呈現給其他使用者。這個選項讓他們繼續使用Zoosk服務并看到其他線上成員,但其自身不會出現在其他使用者的好友清單裡。
  • 通知。重要的互相互動是在視覺上進行包裝,就像有短信時有“提醒”。提醒指導使用者完成如接受一個邀請、檢視他們的個人資料或與其他使用者相比對等一系列事件。作為一個彈窗給使用者接收,在他們的個人資料,或被視為與另一個使用者。Zoosk服務利用這些通知包,告訴用戶端應用程式來更新使用者界面的相關标記,如其他使用者發來的未讀消息的數量。
  • 資訊傳送。如果兩個使用者同時線上,他們可以在一個熟悉的“即時消息”聊天版本裡互相發送消息。這些消息通過RTC基礎設施來實時傳送。如果使用者未來使用不同的用戶端應用程式來重新連接配接,那麼消息内容将儲存到一個提供未來消息曆史檢索的資料庫中。

這些通信目前通過所有主要的Zoosk産品向使用者提供。

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套接字連接配接。

詳解Zoosk千萬使用者實時通信背後的開源技術 詳解Zoosk千萬使用者實時通信背後的開源技術

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千萬使用者實時通信背後的開源技術 詳解Zoosk千萬使用者實時通信背後的開源技術

下一步是什麼

展望未來,我們将繼續積極探索新的方法來讓Zoosk成員充分利用實時體驗。我們本月将推出RTC支援我們的移動web應用程式。其他裝置或媒介,将讓Zoosk應用程式同樣被實時連接配接。随着我們的成員連接配接到Zoosk應用程式的時間正在快速增加,我們計劃提高我們RTC的基礎功能,便于成員之間更容易互相發現和交流。

本文來自:High Scalability