1

我正在设计一个无状态服务,它基本上处理信息流,然后根据条件发送电子邮件。我想在服务结构中托管它,在发生故障时有多个活动,但是我如何限制仅从“主要”发送电子邮件。

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

4

3 回答 3

2

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

您还可以创建一个执行类似操作的有状态服务。

于 2017-10-17T18:36:22.343 回答
0

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

  • 您只需要一个“主要”来处理电子邮件。
  • 您需要一个备份/副本,以防主服务器出现故障。这是有状态服务的默认设置
  • 多个无状态服务实例很难。当您拥有由多个实例处理的信息流时。如果“主”节点上没有发生发送电子邮件的条件怎么办。然后,您必须使用单独的机制将该数据/状态传输到“主”节点。
于 2017-10-18T09:14:42.413 回答
0

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

如果此电子邮件发送服务是有状态的,那么它可以处理重复的邮件(如果这是您所关心的一个问题)。

于 2017-11-01T11:51:58.503 回答