Multithreading 在ToDo列表上使用并行处理时防止重复
例如,我有一个todo列表,表示为数据库中带有“IsComplete”字段的行 在每小时结束时,我希望找到所有未标记为完成的待办事项,并向其各自的创建者发送提醒 每小时有数以百万计的待办事项,发送提醒是一个昂贵的过程 我有一个单独的工作者角色,它将愉快地每小时运行一次,以获取这些不完整的TODO,并将每个角色添加到服务总线队列中,由一组单独的工作者角色负责处理发送提醒的昂贵任务 这种情况下面临的问题是:Multithreading 在ToDo列表上使用并行处理时防止重复,multithreading,azure,parallel-processing,azure-sql-database,azure-worker-roles,Multithreading,Azure,Parallel Processing,Azure Sql Database,Azure Worker Roles,例如,我有一个todo列表,表示为数据库中带有“IsComplete”字段的行 在每小时结束时,我希望找到所有未标记为完成的待办事项,并向其各自的创建者发送提醒 每小时有数以百万计的待办事项,发送提醒是一个昂贵的过程 我有一个单独的工作者角色,它将愉快地每小时运行一次,以获取这些不完整的TODO,并将每个角色添加到服务总线队列中,由一组单独的工作者角色负责处理发送提醒的昂贵任务 这种情况下面临的问题是: 如果单个工作进程可能失败,导致没有TODO 已添加到队列以进行处理 运行worker角色的多
有哪些模式可以解决或避免这种并发问题?让多个角色扫描同一个表是否是一开始就运行多个角色所提供的保护的退步?您可以查看主/从模式 假设您有
x
个工作人员角色。在每小时开始时,来自x
worker角色的一个worker角色将成为master。这可以通过获得blob的租约来实现。所有实例都将尝试获取同一blob上的租约,只有一个实例将成功。成功的将被指定为Master
现在,Master
可以从数据库中获取数据并将消息推送到队列中。所有Slave
实例将轮询此队列,当消息开始到达队列时,Slave实例将获取一条或多条消息并对其进行处理。如果一个实例无法处理该消息,它将在一段时间后(可见性超时)重新出现在队列中,以便其他实例现在可以获取该消息并处理它