每秒处理35万次请求并将数据保存到Google云存储 [英] Process 350k requests per seconds and save data to Google Cloud Storage
问题描述
我需要实现微服务,它在逻辑和架构上相当简单,但需要处理每秒305k左右的请求。
它要做的就是接收JSON数据,根据简单的规则进行验证,然后作为JSON文件记录到Google Cloud Storage中。有很多Google Cloud服务和API可用,但我很难选择合适的堆栈和管道,因为我没有太多使用它们和HighLoad的经验。
下面是我看到的一个例子 https://cloud.google.com/pubsub/docs/pubsub-dataflow流程如下:
PubSub > Dataflow > Cloud Storage
它做的正是我需要的(除了日期验证),但看起来数据流仅限于Java和Python,而我更愿意使用PHP。
另一个相关的例子是 https://medium.com/google-cloud/cloud-run-using-pubsub-triggers-2db74fc4ac6d使用Cloud Run,支持PHP,PubSub触发Cloud Run工作负载。所以它是这样的:
PubSub > Cloud Run
在运行中使用云硬盘看起来非常简单。
我走的路对吗?像上面提到的这样的东西对我来说可以吗?还是我需要一些不同的东西?
推荐答案
当我看到每秒35万个请求和PubSub时,我的第一个直觉是这个模式:
Pubsub > Dataflow > BigTable
我的问题验证了BigTable的选择,因为you can query BigTable table from BigQuery用于以后的分析。
当然,它很贵,但这里有一个可伸缩的系统。
如果您的process fits the BigQuery streaming quotas, is to stream directly into BigQuery instead of BigTable。
Pubsub > Dataflow > BigQuery
Cloud Run或App Engine的解决方案的问题是,您将需要在外部运行一个进程(例如使用Cloud Scheduler),在此过程中,您将执行一个循环,从PubSub订阅拉取消息。您将应对几个困难
- PubSub至少执行1次传递和重复消息可能是一个问题。数据流自动管理
- App Engine和Cloud Run的内存限制可能是个问题,尤其是当您的语言内存效率不高时。
- 拉动速度可能是一个问题,而并行性可能是一个挑战。
- 拉取时长限制为几分钟(由于云运行和App Engine上的最长请求时长),您必须优雅退出并等待下一次Cloud Scheduler触发再次启动PubSub拉取。
编辑
我忘了您不想用Java或Python编写代码。如果您的流程非常简单,我可以向您推荐两个替代方案:
- 使用Google provided Dataflow template,特别是在流中,您可以直接流到BigQuery中,而不需要转换。如果要执行转换,可以使用the source code as base and just add your transform step in it.
- 您可以process your PubSub messages as a simple SQL query。设置起来相当乏味,但您只需用SQL语言定义转换,数据流就会为您构建。
个人观点:编码语言无关紧要,为正确的工作使用正确的工具。与学习如何编写10行Java代码相比,使用Cloud Run或App Engine将创建一个更不稳定、更难维护的系统
这篇关于每秒处理35万次请求并将数据保存到Google云存储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!