代码之家  ›  专栏  ›  技术社区  ›  Alex Bender

Google App Engine请求日志重复,时间差很小

  •  0
  • Alex Bender  · 技术社区  · 9 年前

    通过查看一个Python项目的GAE日志,我发现了一些重复的甚至是三重的条目,它们的时间戳差别很小。

    这些请求是由iPhone设备触发的,它只发送唯一的数据,所以看起来 极不可能 这种复制来自手机。特别是如果考虑到请求之间的时间差异。

    00:53:32.139 POST 200 93B 1.6 s  APPNAME/1.2 CFNetwork/758.4.3 Darwin/15.5.0 /logData
    00:53:32.142 POST 200 93B 930 ms APPNAME/1.2 CFNetwork/758.4.3 Darwin/15.5.0 /logData
    00:53:32.279 POST 200 93B 835 ms APPNAME/1.2 CFNetwork/758.4.3 Darwin/15.5.0 /logData
    

    请求与内部数据相同(源ip、头等):

    {u'version': 1.2, u'data': u'some data', u'user': u'0a9b....0a57'}
    

    实际问题是 “这怎么可能?” ?

    是否可以解释重复日志之间如此短的间隔?

    2 回复  |  直到 9 年前
        1
  •  0
  •   Alex Bender    9 年前

    发生这种情况的原因是异步任务:当iPhone从其位置管理器获取位置时,当操作系统有空闲时间运行我们的代码时,应用程序向 /logData 端点。同时,用户活动会导致另一个HTTP请求。只有在确认收到数据(HTTP响应200)后,才会删除本地变量中的数据。因此,由于它们几乎同时被触发,它们都进入了数据库和GAE日志。

        2
  •  -2
  •   Brent Washburne Jaz13    9 年前

    谷歌存储的所有数据都是三份的,所以即使其中一个节点宕机,也会有备份。

    这是一个很大的因素,因为随着数据的增长 数据丢失变得非常真实。大多数公司通过以下方式处理此问题 在中的不同数据中心制作数据的多个副本 不同的位置。谷歌也很明显地复制了重要的 正如GFS论文所建议的,数据至少为3倍。

    -- https://www.quora.com/How-does-Google-store-their-data

    因此,日志被三次复制到不同的服务器上也就不足为奇了。正如您所观察到的,这些服务器的时间戳可能略有不同。对我来说,问题是为什么你得到了日志条目的所有三份副本。