我花了我的晚上评估Azure服务结构作为我们当前的WebApps / CloudServices堆栈的替代品,并且对于如何确定服务/具有状态的angular色何时应该是有状态的angular色以及何时应该是无状态的angular色外部持久状态(Azure SQL,Azure存储和DocumentDB)。 我知道这是一个相当新的产品(至less对于普通大众),所以关于这方面可能还没有很多最佳实践,但是我已经阅读了Microsoft提供的大多数文档 ,但没有find明确的为此回答。 目前我接近的问题领域是我们的活动商店; 部分应用程序基于事件采购和CQRS,我正在评估如何将此事件存储转移到Service Fabric平台。 事件存储将包含大量的时间序列数据,因为它是我们保存数据的唯一真实来源,因此它必须一致,复制并存储到某种forms的持久存储中。 我曾经考虑过这样做的一种方式是使用有状态的“EventStream”actor。 使用事件采购的每个聚合实例将其事件存储在隔离的stream中。 这意味着有状态的演员可以跟踪所有事件的自己的stream,我已经满足了我的要求,如何存储数据(交易,复制和持久)。 然而,有些stream可能会变得非常大(数十万,如果不是数百万的话),这就是我开始不确定的地方。 有一个具有大量状态的angular色,我想可能会影响系统的性能,当这些大型数据模型需要从磁盘序列化或反序列化时。 另一个select是让这些actor无状态,让他们只从Azure SQL等外部存储中读取数据,或者只是使用无状态服务而不是actor。 基本上,演员/服务的状态数量是多less,你应该开始考虑处理状态的其他方式? 此外, 服务结构演员devise模式中的这一部分:一些反模式文档让我有点困惑: 将Azure服务结构参与者视为交易系统。 Azure服务结构参与者不是基于提交ACID的两阶段提交系统。 如果我们没有实现可选的持久化,而且这个actor正在运行的机器就不存在了,它的当前状态就会随之而来。 这个angular色会很快到达另一个节点,但是除非我们已经实现了支持持久性,否则状态将会消失。 但是,在利用重试,重复过滤和/或幂等devise之间,可以实现高度的可靠性和一致性。 “如果我们不执行可选的持久性”在这里表示什么? 我的印象是,只要修改状态的事务成功,您的数据就会持久化存储并复制到副本的至less一个子集。 这段话让我想知道是否有情况,我的演员/服务中的状态会丢失,如果这是我需要处理自己的事情。 我在文档的其他部分从有状态模型得到的印象似乎抵消了这种说法。