Azure工作者上的一次性作业



在Azure上完成一次性任务的最佳方式是什么?

假设我们想用双列扩展关联数据库中的一个表。所有的新条目在插入时都有这个值,但是必须有人处理表中已经存在的条目。我想到了两个选择:

  1. 工作线程只在数据库条目(比如"JobRun")被设置为true时调用的方法,并且该方法会将该条目翻转为false。
  2. 一个独立的应用程序,它可以完成这项工作,并且可以使用远程桌面手动下载和运行(我无法将本地应用程序连接到Azure SQL服务器)。

第一个选择是混乱的(我应该如何处理下一次部署的代码?删除它吗?评论吗?把它留在那里?另外,如果我将来有另一份工作怎么办?创建一个新的数据库条目"Job2Run"?)。第二个看起来像个廉价的黑客。我相信一定有更好的办法

如果您想运行一次作业,您需要考虑以下几点:

    并发性:当作业正在运行时,确保没有其他工作线程拿起作业并同时运行它(您可以为此使用租约)。
  • 作业完成后,您需要跟踪(在表存储、SQL Azure等中)作业是否成功完成。下一次工作人员试图拿起作业时,它将查看表存储/SQL Azure/…,它将看到作业完成并跳过该作业。
  • Failure:也许你的worker在工作期间崩溃了,这应该允许另一个worker在没有任何问题的情况下接起job。

在您的特定用例中,我还会考虑使用dup之类的工具来管理SQL脚本对模式和现有数据的更新。像这样的工具通过将脚本添加到数据库中的表中来跟踪已执行的脚本。

最新更新