如何确认同一任务是否在多个服务器实例上完成



我有调度程序作业,每X分钟检查一次sftp服务器上是否有某个文件,下载它,解析并上传状态文件,该文件已成功下载。如果文件未成功下载和解析,则不会上传状态文件。

状态文件由第三方应用程序使用,如果状态文件存在于SFTP服务器上,它将开始执行其他工作。如果没有状态文件,则不会启动作业。

问题始于运行相同调度程序作业的多个服务器实例。我想不出最好的方法如何确保所有服务器都成功下载文件并告诉带有状态文件的第三方应用程序它可以启动他的工作?

我与此第三方应用程序通信的唯一方法是通过状态文件。

一些解决方案:

  1. 以前我们只在一台服务器上运行调度程序作业,并且在它们之间共享磁盘以使用此文件。这不再是一种选择

  2. 我正在考虑使用一些服务器 ID 以错误的格式上传状态文件(以便第三方应用程序不会启动他的工作),这将确认该服务器已下载该文件。所有其他服务器也会将其 ID 放在同一个文件中。然后,第一个服务器会发现至少有 3 次提到相同的服务器 ID(3x server1、3x server2、3x server3),它将以正确的格式更改状态文件,然后第三方可以开始他的工作。理论上,如果在文件中提到 server1 和 server2 的 3 倍,但根本没有提到 server3,则可能会出现问题(所有服务器都具有相同的相同 cron 表达式,例如每 2 分钟一次)

  3. 使用一些配置,其中将定义需要下载文件的服务器数量,并且根据该配置,我可以检查它们是否都将其 ID 写入了虚假状态文件。问题是如果我添加新服务器,我需要更新配置文件。

我想这是常见问题,有一些模式或算法?

如果我是你,我会尝试在第三方应用程序和 sftp 服务器之间创建一个"界面文件"。"接口文件"将定期(每 X 分钟)更新。如果状态文件已就绪(所有),则只有"接口文件"将被标记为"就绪"。然后将此"界面文件"发送到第三方应用程序。

希望它对您的问题有所帮助

编辑:语法

最新更新