Dam*_*ien 9 google-app-engine real-time multi-user channel-api
我正在使用Google App Engine(Python)构建一个多用户实时应用程序,它看起来像Facebook livestream插件:https://developers.facebook.com/docs/reference/plugins/live-stream/
这意味着:同一网页上的1到1 000 000个用户可以执行立即通知其他人的操作.这就像群聊,但有很多人......
我的问题:
- App Engine 能够扩展到那种数字吗?
- 如果是的话,你会如何设计它?
- 如果不是,你的建议是什么?
现在,这是我的设计:
- 我正在使用App Engine Channel API
- 我将每个连接在memcache中的用户存储起来
- 每次执行操作时,都会向任务队列添加一个通知任务
- 任务包括检索所有用户来自memcache并向他们发送通知.
我知道我的瓶颈在于任务.通过相同的任务/请求通知每个人.目前,对于连接的30个用户,它持续约1秒,因此对于10万用户,您可以想象可以花多长时间.
你怎么纠正这个?
非常感谢
Moi*_*vin 11
每个用户每秒有多少次更新?如果每个用户每小时更新一次,您将每小时发送10 ^ 12条消息 - 每封发送的消息会导致1,000,000多封发送.这是每秒2.77 亿条消息.换句话说,如果每个用户每小时发送一条消息,则每秒发送277条消息,或277万条外发消息.
所以我认为你的基本设计是有缺陷的.但基本问题:"我如何向大量用户广播相同的消息"仍然有效,我将解决它.
正如您所发现的那样,Channel API在广播时效果不佳,因为每次调用大约需要50ms.您可以通过并行执行多个任务来解决此问题.
对于这样的情况 - 许多客户需要完全相同的无状态数据,我鼓励您使用轮询而不是Channel API,因为每个客户端都将收到完全相同的信息 - 无需发送个性化消息给每个客户.确定可接受的平均等待时间(例如,1秒)并以该速率的两倍(例如2秒)进行轮询.编写一个非常轻量级的memcache支持的servlet来获取最新的数据块并让客户端重复数据删除.
归档时间: |
|
查看次数: |
2548 次 |
最近记录: |