使用服务结构的服务架构

Service architecture using service fabric

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

发送电子邮件

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

leader election (that you can use) inside SF. You could use a blob lease 没有内置机制。 领导者将是获得租约的人,并且需要在 'alive' 时刷新租约。如果它崩溃了,它将失去租约,另一个实例可以得到它。 这确实引入了外部依赖性,降低了系统的整体可用性百分比。

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

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

  • 您只需要一个 "primary" 来处理电子邮件。
  • 你想要一个 backup/replica 以防主节点出现故障。这是默认的 有状态服务
  • 无状态的多个实例很难 服务。当您拥有由多个处理的信息流时 实例。如果发送电子邮件的条件没有发生怎么办 "primary" 节点。然后你必须有一个单独的机制来转移 data/state 到 "primary" 节点。

另一个选择是有一个无状态工作池来处理你的数据流,然后每当它想发送电子邮件时,它会通知另一个服务(通过 ServiceRemoting/Rest/ServiceBus/other 通信渠道)和这个服务将处理电子邮件的实际发送。

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