跟踪多区域应用程序中每个 API 键的使用情况

Tracking Usage per API key in a multi region application

我在 5 个区域部署了一个应用程序。

区域之间的延迟从 150 毫秒到 300 毫秒不等

目前,我们使用本文概述的方法(使用跟踪部分): http://highscalability.com/blog/2018/4/2/how-ipdata-serves-25m-api-calls-from-10-infinitely-scalable.html

但是我们将日志从 Stackdriver 导出到 Cloud Pub/Sub。然后我们使用 Cloud Dataflow 计算每个 API 键消耗的请求数,并在 Mongo Atlas 数据库中更新它,该数据库在 5 个区域进行地理复制。

在我们的应用中,我们只从最近的 Mongo 副本读取使用信息以实现低延迟。应用程序永远不会直接在 Mongo 中更新任何使用数据,因为它可能会产生延迟成本,因为数据必须在可能位于另一个区域的 Master 中更新。

直接从 Mongo 中的应用程序更新 API 密钥使用计数器似乎不可行,因为我们的流量以 10,000 RPS 的速度进入,并且由于区域之间的延迟,我认为它将 运行 转化为其他问题。这只是一种预感,到目前为止我还没有测试过。我根据对 https://www.mongodb.com/blog/post/active-active-application-architectures-with-mongodb

的阅读得出了这个结论

一个问题是我们最终要为云 pub/sub 和 Dataflow 付费。有避免这种情况的策略吗?

我研究了 Google,但没有发现其他多区域应用程序如何实时跟踪每个 API 密钥的使用情况。我并不感到惊讶,根据我的理解,大多数应用程序为了简单起见都在一个区域运行,直到现在,在没有大量开销的情况下在多个区域部署一个应用程序是不可行的。

如果您想要实时,那么最好的选择是使用数据流。您可以更改数据到达 Dataflow 的方式,例如使用 Stackdriver → Cloud Storage → Dataflow,但您不会通过 pub/sub,而是通过 Storage,因此它更像是一种方便的选择和比较每种产品成本的价格在你的用例上。 Here’s Cloud Storage 的示例。