【问题标题】:Datastore write limit tests - trying to break app engine, but it won´t break ;)数据存储写入限制测试 - 试图破坏应用引擎,但它不会破坏;)
【发布时间】:2013-06-27 09:24:03
【问题描述】:

我们正在尝试测试提到的写入限制异常约为 1 次写入/秒,以准备我们的代码(https://developers.google.com/appengine/docs/python/datastore/exceptions -> 超时)

所以我正在创建一个项目并使用循环计数更新它 10k 次通过任务和 10k 次通过循环...它似乎不会触发异常虽然每秒写入应该足够高(我请记住,每秒写入一次以上会很关键)。

始终如一:事情不会在你想要的时候破坏;)。

class Message(ndb.Model):
    text = ndb.StringProperty()
    count = ndb.IntegerProperty()

#defined in seperate file
class DeferredClass(object):
    def put(self, id, x):
        msg = Message.get_by_id(id)
        msg.count = x
        try:
            msg.put()
        except:
            logging.error("error putting the Message")
            logging.error(sys.exc_info()[0])


msg = Message(text="TestGreeting", count=0)
key = msg.put()
id = key.id()
test = DeferredClass()

for x in range(10000):
    deferred.defer(test.put, id, x)
for x in range(10000):
    msg.count = x
    try:
        msg.put()
    except:
        logging.error("error putting the Message")
        logging.error(sys.exc_info()[0])

self.response.out.write("done")

PS:我们知道文档是针对 db 的,代码是 ndb...基本限制应该仍然存在...另外:有关 ndb 异常的文档会很棒!有人吗?

【问题讨论】:

  • 那么问题是什么?!
  • 检查 appstats 幕后发生的事情...另外,我认为每个实体组的写入速度接近每秒 8 次(尽管“支持”每秒 1 次)。
  • 问题是如何让数据存储区抛出其中一个超时异常(发生在许多并行写入上),以便查看应用程序满负荷时发生的情况开始乱了?
  • 我认为 ~1/秒的限制只适用于交易。我不记得他们会为一个实体的更新率命名任何硬性限制。延迟调用在默认队列上运行,每个默认队列的速率为 5 个任务/秒。您可以尝试提高该比率。

标签: google-app-engine


【解决方案1】:

使用非默认任务队列,将速率限制提高到 350 个/任务/秒,导致 20 个实例被启动并出现大量超时异常...感谢 Steinrücken 先生!

例外是 google.appengine.api.datastore_errors.Timeout,这与 db 包记录的相同 - 所以那里没有 ndb 额外内容。

PS:我们的想法是在我们的缓存处理类中捕获异常作为数据存储过载的标志,并自动为该项目设置阴影...监视任务一分钟并在不需要时再次禁用阴影...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 2012-05-14
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多