强制应用程序仅在PCF中的一个实例中运行

问题描述 投票:0回答:1

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

[我在manifest.yml中通过使instances:1尝试的一些事情,迫使它只能在一个实例中运行,而不能自动缩放。

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

cloud cloudfoundry pivotal-cloud-foundry
1个回答
0
投票

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

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

另一个选择是较新的选择,是在您的应用程序中使用多个进程。这将使您拥有一个Web进程和一个单独的worker / scheduler进程(无论您要调用什么)。然后,您可以独立缩放它们,因此您的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

我会再说一遍,这是较新的,如果您使用某种自动缩放技术,则要确保它与这种新的应用程序部署方法兼容。

© www.soinside.com 2019 - 2024. All rights reserved.