【发布时间】:2020-02-06 14:02:46
【问题描述】:
我有一个调度程序应用程序只能在 PCF 云环境中的一个实例中运行。有什么办法可以在云环境中做到吗?
我通过在 manifest.yml 中创建 instance:1 来强制它仅在一个实例中运行而不是自动缩放。
但在 PCF 中寻找更好的方法。
【问题讨论】:
标签: cloud cloud-foundry
我有一个调度程序应用程序只能在 PCF 云环境中的一个实例中运行。有什么办法可以在云环境中做到吗?
我通过在 manifest.yml 中创建 instance:1 来强制它仅在一个实例中运行而不是自动缩放。
但在 PCF 中寻找更好的方法。
【问题讨论】:
标签: cloud cloud-foundry
这将支持 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
【讨论】:
我在这里看到的是让您的应用查看环境变量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 myapp 或cf v3-push myapp。
完整的说明在这里:
https://docs.cloudfoundry.org/devguide/multiple-processes.html
我会重申这是更新的,如果您使用一些自动缩放技术,您需要确保它与这种部署应用程序的新方法兼容。
【讨论】: