Firestore 突然有一个巨大的触发延迟

Firestore suddenly has a huge trigger delay

我们是 运行 Firestore 上的一个应用程序,并且有一个简单的触发器,当创建或更新订单的详细信息时,它的一些信息应该在父订单集合中重写。

这个函数得到了以下代码

export const updateOrderDetails = functions
  .region(FUNCTION_REGION)
  .firestore.document("orders/{orderId}/details/pickupAndDropoff")
  .onWrite(async (change, context) => {
    return await admin
      .firestore()
      .collection("orders")
      .doc(context.params.orderId)
      .set({ pickupAndDropoff: change.after.data() }, { merge: true });
  });

它以前工作得很好,但现在随机大约三分之一的执行被延迟。有时几分钟。在 Cloud Function 日志中,我们看到正常执行时间 <200 毫秒,因此触发器似乎在一个巨大的暂停后运行。

更糟糕的是,我们的 change.after.data() 有时是未定义的,但我们从不删除任何东西 - 它只是更新和创建。

它工作正常,自上周以来我们没有做任何更改,但现在开始出现意外延迟。我们还检查了 firebase 状态,但 firebase 功能服务没有任何故障。这可能是什么原因造成的?

问题可能是由于此处传递的参数 orderId 单调递增所致:

...
.collection("orders")
  .doc(context.params.orderId)
...

如果你能检查一次这里传递的 orderId 是否随着每个请求单调递增?它会导致 hotspots,从而影响 latency

解释一下,我认为写入速率必须在不同的日期和时间发生变化 - 随着使用应用程序的用户流量或负载测试请求发生变化 - 这会产生意想不到的结果种行为。在 低写入率 下,请求大部分时间都按预期工作。在 高写入率 下,请求正面临 firestore 文档中提到的 firestore 热点情况,导致延迟(延迟问题)。

Here 与 Firestore 最佳实践文档相关link。

感谢 Frank van Puffelen 的建议,我们已将此问题直接发送给 Firebase 支持部门,经过他们的内部调查,我们从工程团队那里得到了答复,称这实际上是基础设施故障。

我从他们那里得到的回复是:

I escalated the issue to recover more information. So far it appears that there was an issue with pub/sub delivering and creating the event. The Firestore team is also communicating with the pub/sub team to investigate the issue and prevent future incidents.

似乎处理此类问题的最佳方法是快速直接写信给 Firebase 支持团队,因为正如他们在我发送支持票后收到的自动回复中提到的那样:

For Firebase outages not listed on the status dashboard, we'll respond within 4 hours.

这似乎是最好的选择。