代码之家  ›  专栏  ›  技术社区  ›  x97Core

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

  •  2
  • x97Core  · 技术社区  · 6 年前

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

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

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

    但我们将日志从Stackdriver导出到云发布/订阅。然后,我们使用云数据流计算每个API密钥消耗的请求数,并将其更新到Mongo Atlas数据库中,该数据库在5个地区进行地理复制。

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

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

    一个问题是,我们最终为云发布/订阅和数据流付费。有没有避免这种情况的策略?

    我在谷歌上进行了研究,但没有发现其他多地区应用程序如何实时跟踪每个API密钥的使用情况。据我所知,为了简单起见,大多数应用程序都在一个地区运行,因此我并不感到惊讶,直到现在,在多个地区部署一个应用程序并没有显著的开销是不可行的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Federico Panunzio    6 年前

    如果您想要实时,那么最好的选择是使用数据流。您可以更改数据到达数据流的方式,例如使用 Stackdriver → Cloud Storage → Dataflow ,而不是通过发布/订阅,而是通过存储,因此它更多的是一种方便的选择,并根据您的用例比较每个产品的成本。 Here’s 云存储的一个示例。