【问题标题】:Google App Engine Barrier SynchronizationGoogle App Engine 屏障同步
【发布时间】:2011-03-06 01:09:49
【问题描述】:

我有 n 个并行任务正在运行。完成所有这些任务后,我想创建另一个任务。做这个的最好方式是什么 ?由于数据存储操作较慢,因此我使用了 memcache。每个任务完成后,我都会将计数器加 1。我一直在柜台上查看 n。由于 memcache 不可靠,因此有时会丢失计数器值。还有其他解决方案吗?

【问题讨论】:

  • “因为内存缓存不可靠” - 嗯?您是否认为实际上可能是您的代码有问题?
  • @Mitch:我认为 Sam 指的是 memcache 可以随时驱逐任何条目的事实 - 因此不适合存储您不能丢失的值(如在上述 Sam 的方案中)。
  • @大卫安德希尔:好的,好点。

标签: google-app-engine


【解决方案1】:

由于您无法承受丢失计数器的后果,因此您需要使用数据存储来确保您的计数器不会丢失(例如,由于意外的 memcache 驱逐)。但是,您可以将值存储在 memcache 中 - 这样您仍然可以从 memcache 中快速读取计数器(如果 memcache 条目已过期,则转到数据存储区获取计数)。

如果您有太多任务并行运行以至于增加数据存储计数器的速度太慢,那么请考虑使用sharded counter 来缓解这个瓶颈。

【讨论】:

  • 我同意大卫的观点,在 GAE 内存缓存中有针对这种情况的原子操作,此计数器 github.com/gregbayer/gae-livecount 使用 memcahe 和数据存储将值保存在单独的任务中,我使用它并且它确实有效好的。我要试试分片计数器。
【解决方案2】:

我建议使用appengine-pipeline

本质上,它使用模型实现了屏障。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多