如何以编程方式将 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 上搜索过类似的问题。但似乎找不到这个特定问题。我也不想硬编码主机名,因为那不是可靠的解决方案。

这里有一个你可以做的建议:

  1. 使用 Docker

  2. 容器化您的应用程序
  3. 使用像 Kubernetes 或 Docker Swarm 这样的协调器

  4. 为您的应用程序服务器(在本例中为您的游戏应用程序)设置服务发现

  5. 在您的应用程序服务器前面设置一个负载均衡器

  6. 通过向您的服务器(您的负载均衡器)发送 HTTP 请求,可以保证该请求仅到达您的应用程序服务器的一个实例,然后该实例将执行所需的清理工作。