【问题标题】:Force application to run only in one instance in PCF强制应用程序仅在 PCF 中的一个实例中运行
【发布时间】:2020-02-06 14:02:46
【问题描述】:

我有一个调度程序应用程序只能在 PCF 云环境中的一个实例中运行。有什么办法可以在云环境中做到吗?

我通过在 manifest.yml 中创建 instance:1 来强制它仅在一个实例中运行而不是自动缩放。

但在 PCF 中寻找更好的方法。

【问题讨论】:

    标签: cloud cloud-foundry


    【解决方案1】:

    这将支持 cf v7。 或者您可以使用 cf 任务选项来安排它。

    而且如上图,你可以通过cf7创建各种任务。

    https://v3-apidocs.cloudfoundry.org/version/3.81.0/index.html#the-process-object

    这可以分为几个过程,如下所示。

    applications:
    name: cf-env
      buildpacks:
      ruby_buildpack
      processes:
      type: web
        instances: 1
        memory: 256M
      routes:
      route: all-new-route.cfapps.io
    

    【讨论】:

      【解决方案2】:

      我在这里看到的是让您的应用查看环境变量CF_INSTANCE_INDEX。这是从零开始的索引,显示您的应用程序的实例编号。所以 0 是第一个实例,1 是第二个实例,2 是第三个实例,等等......

      让您的应用查看此环境变量,如果该值不为 0,则让它退出或不执行任何操作或任何有意义的操作。通过这样做,只有您的第一个应用程序实例会导致这段代码运行。其余的将跳过或不执行任何操作。

      另一个较新的选项是在您的应用程序中使用多个进程。这将允许您拥有一个 Web 进程和一个单独的工作程序/调度程序进程(无论您想怎么称呼它)。然后,您可以独立扩展它们,这样您的 Web 进程就可以根据需要提高,但您的其他进程可以设置为一个。

      您可以通过以下方式创建Procfile 来实现此目的:

      web: bundle exec rackup config.ru -p $PORT
      worker: bundle exec rake worker:start
      

      并使用cf7 push myappcf v3-push myapp

      完整的说明在这里:

      https://docs.cloudfoundry.org/devguide/multiple-processes.html

      我会重申这是更新的,如果您使用一些自动缩放技术,您需要确保它与这种部署应用程序的新方法兼容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多