如何以编程方式将 Play 2.4 模块的执行限制到单个主机?
How can I programmatically limit the execution of a Play 2.4 module to a single host?
为了提供一些背景知识,我有一个使用 Scala 2.11.8 的 Play 2.4 应用程序。
我使用具有 2 个可用实例 的 OpsWorks 将其部署到 AWS 堆栈。在应用程序中有一个模块,它使用 ActorSystem 调度程序定期执行一个方法来执行一些清理操作。当 运行 在本地运行应用程序的一个实例时,清理工作正常,但是一旦部署了应用程序,就没有必要在每个实例上 运行 进行清理。
我的问题并不特定于我正在使用的堆栈,而是一种以编程方式的高级方法,一旦应用程序已部署。出于这个问题的目的,假设我无权访问堆栈配置。
我在 S.O 上搜索过类似的问题。但似乎找不到这个特定问题。我也不想硬编码主机名,因为那不是可靠的解决方案。
这里有一个你可以做的建议:
使用 Docker
容器化您的应用程序
使用像 Kubernetes 或 Docker Swarm 这样的协调器
为您的应用程序服务器(在本例中为您的游戏应用程序)设置服务发现
在您的应用程序服务器前面设置一个负载均衡器
通过向您的服务器(您的负载均衡器)发送 HTTP 请求,可以保证该请求仅到达您的应用程序服务器的一个实例,然后该实例将执行所需的清理工作。
为了提供一些背景知识,我有一个使用 Scala 2.11.8 的 Play 2.4 应用程序。
我使用具有 2 个可用实例 的 OpsWorks 将其部署到 AWS 堆栈。在应用程序中有一个模块,它使用 ActorSystem 调度程序定期执行一个方法来执行一些清理操作。当 运行 在本地运行应用程序的一个实例时,清理工作正常,但是一旦部署了应用程序,就没有必要在每个实例上 运行 进行清理。
我的问题并不特定于我正在使用的堆栈,而是一种以编程方式的高级方法,一旦应用程序已部署。出于这个问题的目的,假设我无权访问堆栈配置。
我在 S.O 上搜索过类似的问题。但似乎找不到这个特定问题。我也不想硬编码主机名,因为那不是可靠的解决方案。
这里有一个你可以做的建议:
使用 Docker
容器化您的应用程序
使用像 Kubernetes 或 Docker Swarm 这样的协调器
为您的应用程序服务器(在本例中为您的游戏应用程序)设置服务发现
在您的应用程序服务器前面设置一个负载均衡器
通过向您的服务器(您的负载均衡器)发送 HTTP 请求,可以保证该请求仅到达您的应用程序服务器的一个实例,然后该实例将执行所需的清理工作。