3

我们有两个 azure worker 角色——A 和 B。

  • A 是一个 Quartz 调度器,它每分钟运行一次作业。
  • 它每分钟从“Redis 缓存”中读取一些 id 并为这些 id 执行作业。
  • “A”将其输出发布到由 Worker 角色“B”订阅的服务总线队列。
  • “B”工作者角色从队列中读取值并对它们执行更多操作。
  • 两个工作角色都必须在启动时构建缓存。

现在这里有一些关于 Azure 组件故障的问题:

  • 如果 Redis 缓存出现故障,我们该如何处理。我们需要停止执行,直到它再次启动,然后我们需要再次构建缓存。“B”工作者角色应该停止从服务总线拉消息,直到 Redis 再次出现。

  • 如何处理工作角色“B”中的服务总线故障?

4

2 回答 2

0

您不需要停止任何辅助角色。

Worker 角色 A 应该对 Redis 缓存中的问题具有弹性,这意味着您的代码应该通过重试或吞下异常来处理 Redis 抛出的任何异常(或网络异常)。

工作者角色 B 应该不断地从服务总线中提取消息。如果辅助角色 A 不发布数据,则辅助角色 B 应处理空结果。

在 Redis/Azure 故障上停止服务将需要您处理更复杂的场景- 例如:自动检测 Redis 是否再次启动并自动启动您的服务。

于 2016-07-06T14:46:39.117 回答
0

一种可能的解决方案是配置一个外部健康服务,您的工作人员在从服务总线或缓存中提取之前检查该服务。如果健康服务说缓存或服务总线出现故障,您的工作人员根本不尝试处理任何事情。

于 2016-07-06T16:44:42.767 回答