检查Azure上的不活动的策略

时间:2011-10-17 21:00:03

标签: azure scheduled-tasks azure-table-storage

我在Azure表存储中有一个表,其中的行由各种进程定期更新。我希望有效监控在特定时间段内没有更新的行,并在发生这种情况时生成警报。

我见过Azure功能的大多数任务调度程序实现,确保一次只有一个工作程序执行给定的作业。但是,设置等待 n 分钟的计划任务,然后查询最新的时间戳以确定是否应采取措施,似乎效率低下,因为工作不会分散在工作人员之间。必须对这么多记录进行轮询似乎效率低下。

使用此示例的一个示例是向过去30天内未登录网站的用户发送电子邮件。为了产生有效的算法,假设用户数量是“大数”。

是否有人对可用于检查最近活动的策略有任何建议,而不强迫只有一名工人完成这项工作?

1 个答案:

答案 0 :(得分:3)

使用时间戳作为rowkey(DateTime.UtcNow.Ticks.ToString("d19"))保留LastActive表。通过执行删除旧行并插入新行的批处理事务来更新它。

现在,对非活动用户的查询就像from user in LastActive where user.PartitionKey == string.Empty && user.RowKey < (DateTime.UtcNow - TimeSpan.FromDays(30)).Ticks.ToString("d19") select user一样。这对于任何大小的表都非常有效。

根据您要对该信息执行的操作,您可能希望然后将消息放入队列,然后删除该行(因此下次检查时不会再次注意到该行)。现在,多个工作人员可以提取这些队列消息并采取措施。

我对你想要在多个工作者实例上执行此操作感到困惑...你可能只想对非活动用户执行一次操作,因此您只需要一个实例进行检查。 (发送电子邮件或其他任何你正在做的工作然后可以通过使用队列来传播,但是初始检查应该只通过一个实例来完成。)