使用服务结构的服务架构

时间:2017-10-17 17:24:24

标签: azure-service-fabric failover service-fabric-stateless

我正在设计一种无状态服务,它基本上处理信息流,然后根据条件发送电子邮件。我希望在服务结构中托管此功能,如果发生故障,可以使用多个活动结构,但是如何限制仅从“主要”发送的电子邮件。

主动/主动仅对分区的有状态服务有效吗? 如果服务必须是主动/被动的,那么服务如何知道它现在是活动的?

3 个答案:

答案 0 :(得分:2)

SF内部没有leader election(你可以使用)的内置机制。您可以使用blob lease。 领导者将是获得租约的人,并且需要在其活着的同时刷新它。如果它崩溃了,它将失去租约而另一个实例可以获得它。 这确实会引入外部依赖性,从而降低系统的总体可用性百分比。

您还可以创建一个类似的状态服务。

答案 1 :(得分:0)

由于几个原因,我将使用有状态服务:

  • 你只想要一个" primary"处理电子邮件。
  • 你想要一个 备份/副本,以防主要发生故障。这是默认的 有状态的服务
  • 对无状态的多个实例很困难 服务。当您拥有由多个处理的信息流时 实例。如果没有发送电子邮件的条件怎么办? "主"节点。然后你必须有一个单独的机制来转移 该数据/状态为" primary"节点

答案 2 :(得分:0)

另一种选择是拥有一个处理数据流的无状态工作者池,然后无论何时想要发送电子邮件,它都会通知另一个服务(通过ServiceRemoting / Rest / ServiceBus /其他通信渠道)和此服务将处理实际发送的电子邮件。

如果此电子邮件发送服务是有状态的,则可以处理重复项,如果您有一个问题。