【问题标题】:Using Google Cloud ecosystem vs building your own microservice architecture使用 Google Cloud 生态系统与构建自己的微服务架构
【发布时间】:2018-05-11 02:16:12
【问题描述】:
在 Google Cloud 生态系统中构建确实非常强大。我非常喜欢您如何将文件提取到 Cloud Storage,然后 Data Flow 丰富、转换和聚合数据,然后最终存储在 BigQuery 或 Cloud SQL 中。
我有几个问题可以帮助我更好地理解。
如果您要使用 Google 服务构建大数据产品。
当前端 Web 应用程序(可能在 React 中构建)将文件提交到云存储时,可能需要一些时间才能完成处理。客户端可能想要查看管道中文件的状态。然后他们可能想对完成后的结果做一些事情。前端客户端如何知道文件何时完成处理并准备就绪?他们需要从某个地方轮询数据吗?
如果您当前有一个微服务架构,其中每个服务执行不同类型的处理。例如,一个可能解析文件,另一个可能处理消息。这些服务使用 Kafka 或 RabbitMQ 进行通信,并将数据存储在 Postgres 或 S3 中。
如果您采用 Google 服务生态系统,您能否将微服务架构替换为云存储、数据流、Cloud SQL/Store?
【问题讨论】:
标签:
google-bigquery
google-cloud-storage
microservices
google-cloud-dataflow
【解决方案1】:
你有没有看Cloud Pub/Sub(主题订阅/发布服务)。
Cloud Pub/Sub 将企业面向消息的中间件的可扩展性、灵活性和可靠性带到了云端。通过提供将发送者和接收者分离的多对多异步消息传递,它允许在独立编写的应用程序之间进行安全且高度可用的通信。
我相信 Pub/Sub 在您的情况下大部分可以替代 Kafka 或 RabitMQ。
前端客户端如何知道文件何时完成处理并准备就绪?他们需要从某个地方轮询数据吗?
例如,如果您使用 dataflow API 处理文件,Cloud dataflow 可以发布进度并将状态发送到 主题。您的前端(应用引擎)只需订阅该主题并接收更新。
【解决方案2】:
1)
Dataflow 不提供对中间结果的检查。如果前端希望在 Dataflow 管道中处理元素的更多进展,则需要将自定义进度报告内置到 Pipline 中。
一个想法是将进度更新写入接收表,并将分子输出到管道的各个部分。 IE。有一个 BigQuery 接收器,您可以在其中编写 ["element_idX", "PHASE-1 DONE"] 之类的行。然后前端可以查询这些结果。 (我会避免亲自覆盖旧行,但许多方法都可以工作)。
您可以通过在新接收器和管道的下一步中使用 PCollection 来做到这一点。
2)
您的微服务架构是否使用“管道和过滤器”管道样式方法? IE。每个服务从一个源(Kafka/RabbitMQ)读取数据并写出数据,然后下一个消费它?
可能是设置几个不同的 Dataflow 管道并使用 Pub/Sub 或 Kafka 接收器输出其结果并让下一个管道使用该 Pub/Sub 接收器的最佳方法。您可能还希望将它们下放到另一个位置,例如 BigQuery/GCS,以便您可以在需要时再次查询这些结果。
还有一个使用 Cloud Functions 代替 Dataflow 的选项,后者具有 Pub/Sub and GCS triggers。一个微服务系统可以设置多个云功能。