2
我正在嘗試做一些像Facebook,與socket.io 0.6和tornadio流。實時Socket.IO縮放問題 - python
每個用戶在他的牆上都有自己的彗星通道/組。 我向所有朋友的牆上發送彗星消息(即使他們不在線)。
問題是關於縮放:如果我有100萬個朋友呢?在所有的牆壁上寫字需要很長的時間。
有沒有解決方案更有效地使用彗星做到這一點?
我正在嘗試做一些像Facebook,與socket.io 0.6和tornadio流。實時Socket.IO縮放問題 - python
每個用戶在他的牆上都有自己的彗星通道/組。 我向所有朋友的牆上發送彗星消息(即使他們不在線)。
問題是關於縮放:如果我有100萬個朋友呢?在所有的牆壁上寫字需要很長的時間。
有沒有解決方案更有效地使用彗星做到這一點?
這是社會空間中的一個難題。有兩種方法之間的權衡:
當用戶更新和用戶的「扇出」(例如,用戶擁有的最大關注者數量)較低時,加載流時推送方法很好。當用戶加載他的流很少,或者用戶可以遵循的用戶數量很少時,拉動方法是很好的。
我與人合着了paper關於如何有效地做到這一點。基本上,我們使用混合方法,根據用戶統計信息確定何時推送或拉取。
爲了簡單起見,我建議您實施拉模型。緩存聚合結果並僅在緩存條目陳舊一段時間後刷新用戶的提要。
我們已經開發了用於第一次進入該頁面時的情況。我們需要對實時更新進行有效推送(這樣用戶不需要刷新頁面)。 –
你只推送給當前登錄並激活的用戶嗎?如果您只推送給這些用戶,您是否仍然存在可擴展性問題? – jterrace
事實上,這不是一種選擇,因爲寫給我所有的朋友需要很長時間,如果我必須驗證我的100萬朋友是否已登錄並激活,則需要很長時間。 –