【发布时间】:2011-12-30 03:20:35
【问题描述】:
似乎使 GAE Channel API 在财务上可行的唯一方法是实施某种池机制(一位高级应用引擎产品经理甚至在我向他们发送有关高昂价格的电子邮件时告诉我这一点)以重用渠道还没有过期。
我一直在思考实现频道池的方法(地点),但我想到的每种方法都有一些非常严重的缺点。
Servlet 的静态内存 -- 很好,但是当新的 VM 实例打开和/或客户端从一个 VM 传递到另一个 VM 时,会丢弃相当多的开放通道。
Memcache -- 至少内存可以从所有 VM 全局访问,但现在由于不活动和内存压力,丢弃非常可行的通道的可能性可能更大。
后端实例 -- 就可靠性而言,这可能是最好的选择,但现在运行后端的费用将首先耗尽实施池的所有节省!
是否有更好的地方/方式来跨我缺少的虚拟机实施通道池,或者我是否在此处不必要地挂断了我的选项的缺点?我真的希望有,或者看起来我的应用将不得不恢复轮询(在我的初步指标中看起来稍微便宜一些)。
【问题讨论】:
-
您可以将它们存储在带有时间戳的数据存储中,然后运行 cron 来删除过期的吗?虽然读/写操作也会花费您...
-
@Jonathan Newmuis 是的,这与 Memcache 解决方案相得益彰,但就像您提到的那样,这当然不是没有成本的。也许他们两个一起工作是最可行的选择......有人有任何指标或经验吗?
-
您能补充一些关于您的软件功能的信息吗?
-
@alfa64 我的应用程序是一款大型多人社交游戏,可将关键游戏状态更新实时动态推送到特定客户端。问题是,一个通常的用例涉及一个球员在签字前登录几分钟,最多可能是 15 分钟。这实际上浪费了应用引擎上至少 85% 的(目前)最昂贵的资源,尽管它具有出色的功能,但它完全不可行。
-
现在频道创建似乎是免费的,所以如果只关心财务可行性,这应该不再是问题。
标签: google-app-engine channel pooling channel-api