Play 框架的一大优点是它是完全无状态的,并且只面向请求/响应。这真的很好,因为它允许我将我的应用程序部署到云并扩展负载均衡器后面的播放实例的数量,而不必担心状态(会话)复制......
然而,最近,我需要在 HTTP 请求之外执行一些应用程序逻辑,并发现 Play 可以定义完全由框架管理的作业。听起来很棒,但它提出了一个问题:这些工作如何适应 Play 使用的无状态模型?
假设我有一个需要每小时运行的维护任务,我为此定义了一个计划作业。如果我随后在负载均衡器后面部署多个 Play 实例,该作业是否会在每个实例上同时启动?如果是这样,处理需要“独占”运行的作业的好方法是什么?
我正在考虑在非集群服务器上创建一个新的播放实例,重新使用现有(集群)实例的 JPA 模型(从而连接到同一个数据库)。这个新实例将仅包含维护作业,并且由于它托管在非集群服务器上,因此不存在同时运行作业的风险。同时,这将使我能够保持现有的集群实例完全无状态并且易于托管/负载平衡。这是一个好方法吗?