代码之家  ›  专栏  ›  技术社区  ›  Sudhanshu Gaur

为什么在googleappengine中,只有第一个请求才会有11秒的延迟?

  •  8
  • Sudhanshu Gaur  · 技术社区  · 6 年前

    我正在部署我的 Nodejs Google App Engine Flexible appspot.com 要达到我的API,需要大约11秒才能从我的API发送响应 mobile data ,但其他API正在以毫秒格式发送响应。

    而且,时间延迟只发生在我打开android应用程序并向服务器发送请求时,在所有请求都占用正常时间之后,时间延迟才会再次发生在我再次打开应用程序并向服务器发送请求时。

    -我发现了

    当应用程序仍在启动或预热实例以服务于请求时,这可能是一个原因,可以称为加载延迟。为了避免这种情况,您可以实现像就绪检查这样的健康检查处理程序,以便您的应用程序只在就绪时接收流量

    所以我查了我的日志 readiness 1 sec 有时在周围 200 ms

    enter image description here

    有谁能告诉我在预热我的实例时有什么问题吗?因为我不认为冷启动时间导致了这个问题。

    编辑2

    我也试着 min_num_instances: 2 因此,一旦加载至少我的2个实例将再次无法启动,但事情是延迟是一样的。

    runtime: nodejs
    #vm: true
    env: flex
    
    automatic_scaling:
      min_num_instances: 2
      max_num_instances: 3
    

    我注意到一个奇怪的行为,当我使用这个应用程序 Packet Capture 为了捕获流量,所有https请求(如果我没有启用SSL代理)和所有Http请求都将以毫秒为单位执行,而如果不使用此应用程序,所有Http/https请求将延迟11-16秒。

    编辑5

    下面我附上了网络档案,其中延迟是15秒来

    enter image description here

    请帮忙

    3 回复  |  直到 6 年前
        1
  •  4
  •   Ying Li    6 年前

    您能在日志中找到加载请求或任何相应的慢速请求吗?如果没有,那么很可能是应用程序的问题。如果可能的话,不要在你的应用程序上调用这个API,而是从两个应用程序(一个已经打开,一个没有打开)中调用它。所以你从两个应用程序中都打电话,如果你注意到一个已经打开的应用程序得到的响应比另一个快,那就意味着这是应用程序本身的问题。应用程序引擎无法确定你的应用程序是否已预打开,因此任何差异都将由客户端决定。

    ===附加信息===

    在你的日志里,没有任何延迟。请求进入Google,并在几毫秒内被处理。我肯定在应用方面有些东西。也许你的应用程序正在从其他来源构建请求URL(第一个请求),这会导致延迟?appengine不知道你的应用程序是否被打开,也不知道它是否在打开后发送了第一个请求,因此它不能根据它采取不同的行动。只要你的appengine实例准备就绪并且可用,它就会以相同的方式处理你的请求,不管它是否是你在应用程序打开后的第一个请求。

        2
  •  1
  •   Sudhanshu Gaur    6 年前

    8.8.8.8 这个问题完全解决了。也许这是Airtel与Google云的兼容性问题。

        3
  •  0
  •   Alejandro Vales user1768079    6 年前

    上次我检查的时候,我记得我必须放一个 预热请求处理程序 yaml 文件。(这不是第一次有人忘记了)

    https://cloud.google.com/appengine/docs/standard/python/configuring-warmup-requests 这是特定于python的,但是您也可以在文档中检查其他语言,如Go、Java等。

    如果问题依赖于客户端(每次新客户端生成并进行调用时,它都会获得延迟),那么很可能是客户端应用程序本身或初始化、注册或DNS解析出现问题。

    您还可以尝试使用CURL或类似的方法来复制请求,并查看是否也可以使用那些您看到的延迟的请求。