我在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付费。有策略可以避免这种情况吗?
我在谷歌上进行了研究,但没有发现其他多地区应用如何实时跟踪每个API密钥的使用情况。我并不感到惊讶,根据我的理解,为简单起见,大多数应用程序都在一个区域内运行,直到现在,在没有大量开销的情况下在多个区域部署应用程序是不可行的。
答案 0 :(得分:0)
如果您想要实时,那么最好的选择就是使用Dataflow。您可以更改数据到达Dataflow的方式,例如使用Stackdriver → Cloud Storage → Dataflow
,但不是通过pub / sub进行存储,因此更多的是方便选择并比较每个产品的价格用例。 Here’s云存储的示例。