每秒处理35万次请求并将数据保存到Google云存储 [英] Process 350k requests per seconds and save data to Google Cloud Storage

本文介绍了每秒处理35万次请求并将数据保存到Google云存储的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要实现微服务,它在逻辑和架构上相当简单,但需要处理每秒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编写代码。如果您的流程非常简单,我可以向您推荐两个替代方案:

个人观点:编码语言无关紧要,为正确的工作使用正确的工具。与学习如何编写10行Java代码相比,使用Cloud Run或App Engine将创建一个更不稳定、更难维护的系统

这篇关于每秒处理35万次请求并将数据保存到Google云存储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆