我有一个调度程序应用程序,只能在PCF云环境中的一个实例中运行。在云环境中有什么方法可以做到这一点?
[我在manifest.yml中通过使instances:1尝试的一些事情,迫使它只能在一个实例中运行,而不能自动缩放。
但是正在PCF中寻找更好的方法。
我在这里看到的是让您的应用查看环境变量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 myapp
或cf v3-push myapp
。
完整说明在这里:
https://docs.cloudfoundry.org/devguide/multiple-processes.html
我会再说一遍,这是较新的,如果您使用某种自动缩放技术,则要确保它与这种新的应用程序部署方法兼容。