实时Socket.IO扩展问题 - python

时间:2011-09-27 14:44:13

标签: python real-time socket.io tornado

我正在尝试使用socket.io 0.6和tornadio来做像 Facebook 上的流一样的事情。

每个用户都有自己的彗星频道/群组。 我正在向所有朋友的墙上发送彗星信息(即使他们不在线)。

问题在于扩展:如果我有100万朋友怎么办?在所有的墙上写作都需要很长时间。

使用彗星是否有更高效的解决方案?

1 个答案:

答案 0 :(得分:2)

这是社交空间中的难题。两种方法之间存在权衡:

  • 推送:当用户生成事件(例如状态更新)时,您将该状态更新推送到每个用户的朋友的流中。当用户加载他或她的流时,您只需要从一个地方读取记录。
  • pull :当用户生成事件时,您甚至将其写入用户的数据记录。当用户加载他的流时,您轮询他的每个朋友的数据记录,即时汇总结果。

当加载流比用户更新更频繁且用户的“扇出”(例如,用户拥有的最大关注者数量)低时,推送方法是好的。当用户加载他的流很少,或者用户可以关注的用户数量很少时,拉方法很好。

我合着了paper如何有效地做到这一点。基本上,我们使用混合方法,根据用户统计信息确定何时推或拉。

为简单起见,我建议你实现拉模型。缓存聚合的结果,仅在缓存条目失效一段时间后刷新用户的订阅源。