【问题标题】:Google Cloud Platform design for a stateful application用于有状态应用程序的 Google Cloud Platform 设计
【发布时间】:2020-08-17 06:54:50
【问题描述】:

用例:我们的要求是每隔几分钟连续运行一次服务。此服务从数据存储中读取一个值,并使用数据存储中的该值(有状态)访问公共 url。此服务没有前端。没有人会公开访问这项服务。作为来自 url 的响应的结果,新值存储在数据存储中。只需要一台服务器即可运行。

我们需要为我们的用例决定以下其中一项。

  1. Compute Engine(IaaS -> 我们不想为这个简单的有状态应用程序维护基础设施)
  2. Kubernetes Engine(还是觉得有点矫枉过正)
  3. App Engine : PaaS-> App Engine 通常用于移动应用、游戏、网站。 App Engine 提供带有网址的 url。它是我们用例的正确选择吗?如果我们选择应用引擎,是否可以停止公共应用引擎 url?此外,由于一个实例会在应用引擎中持续运行,什么是经济高效的 - 标准的还是灵活的?
  4. Cloud Functions -> 事件驱动(看起来不适合我们的应用)
  5. Google Cloud Scheduler->我们认为我们可以使用云调度器+云功能。但是在中断期间,作业会排队。在我们的案例中,中断后,只有一台服务器/实例/作业可以启动并运行。

谢谢!

【问题讨论】:

  • 您的选择标准是什么(价格、复杂性、容错性)?列出的任何服务在大多数情况下都可以使用。您可以决定哪些内容符合您的目标,但您的问题中没有明确定义。

标签: google-cloud-platform stateful


【解决方案1】:

中断后,只有一个服务器/实例/作业可以启动并运行

限制 Cloud Function 并发就够了吗?如果是这样,您可以这样做:

gcloud functions deploy FUNCTION_NAME --max-instances 1 FLAGS...

https://cloud.google.com/functions/docs/max-instances

我还建议看看 Google Cloud Run,它是一个无服务器 docker 平台,它可以限制为最多 1 个实例同时响应最多 1 个请求。它也需要 Cloud Scheduler,定期向它发出 HTTP 请求。

将两个服务的最大并发配置为 1,只有一个服务器/实例/作业将启动并运行,但是,在中断之后,作业可能会在另一个完成后立即安排。如果这有问题,请在数据存储作业行上添加 lastRun 日期时间字段,如果它太新则不运行,或者禁用云调度程序的重试,如下所述:

Google Cloud Tasks HTTP trigger - how to disable retry

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2019-12-18
    • 2021-01-05
    • 1970-01-01
    • 2021-02-04
    • 2021-02-09
    相关资源
    最近更新 更多