应用引擎上的Web应用程序设计策略

时间:2013-01-23 20:39:43

标签: google-app-engine

我正在尝试开发一个游戏网站。用户可以将其他用户添加为他们的朋友。用户将在完成各种游戏关卡时获得积分。现在我需要显示已经在其页面上玩过游戏的所有用户朋友的平均分数(例如:当用户玩游戏A时,他的朋友所获得的积分的平均值将显示在游戏A页面上。同样的游戏当他玩游戏B)时,他的朋友的B平均分将被显示。

我的方法:

  • 将用户的好友列表(Max 1000)存储为数据存储区中的多值属性并加载到其中 用户登录网站时的GAE内存缓存。
  • 使用常驻后端缓存所有用户的游戏数据(获得的积分) 每个特定的游戏)。 cron作业每小时更新一次后端缓存。 当用户第一次请求游戏页面(例如:游戏A)时,请求处理程序联系后端以通过URL-Fetch服务计算朋友点数的平均值。
  • 现在后端从memcache获取用户的friends-list(Max 1000),从内存缓存(后端缓存)中获取游戏A点朋友并返回计算出的平均值。 获得平均值后的请求处理程序,将其保留在数据存储区中并将其存储在memcache中,以便后续对游戏A页面的请求从memcache / datastore获取数据,而不会在后端计算开销。该平均值有效1小时,并在下次请求游戏A页面后再次重新计算。

我的问题

  • 上述方法是否是解决此问题的正确方法?
  • 如何使用后端实例(python-2.7)高效可靠地实现内存缓存?
  • 如何仅为此作业估算后端所需的内存和CPU? (假设必须存储10万个键值对,“userid / gamename”作为键,用户点作为值。用户朋友列表最大值为1000.)
  • 如果我在负载增加时必须使用多个后端实例,那么如何对它们进行负载均衡?

提前致谢。

1 个答案:

答案 0 :(得分:0)

查看Nick Johnson撰写的关于计数器的博客文章:http://blog.notdot.net/2010/04/High-concurrency-counters-without-sharding

使用NDB数据存储区: - 自动缓存,而不是你自己的memcache - NDB有一些新的有趣属性,如:带压缩的json属性,重复的属性,就像Python列表一样

并查看mapreduce以进行有效更新。