我对 Service Fabric 很陌生。
Service Fabric 是否建议仅使用可靠集合来存储应用程序的所有数据?
如果我使用 SQL DB 来持久化我的所有业务数据并使用 Reliable Collection 懒惰地持久化到 SQL DB 以实现集成,该怎么办?在 DDD 之后,如果我将聚合保存到 SQL DB 并在可靠集合中留下一个条目以与其他有界上下文通信。这种做法会不会有什么问题?
我对 Service Fabric 很陌生。
Service Fabric 是否建议仅使用可靠集合来存储应用程序的所有数据?
如果我使用 SQL DB 来持久化我的所有业务数据并使用 Reliable Collection 懒惰地持久化到 SQL DB 以实现集成,该怎么办?在 DDD 之后,如果我将聚合保存到 SQL DB 并在可靠集合中留下一个条目以与其他有界上下文通信。这种做法会不会有什么问题?
Service Fabric 不建议将所有数据存储在可靠集合中。这是你的选择。Service Fabric 在许多层面上为您提供了如何做事的自由。
您可以使用外部数据库(如 SQL DB 或 DocumentDB 或任何东西)并将有状态服务用作缓存。或者使用有状态服务作为主存储,根本不使用外部数据库。
尽管 Reliable Collection 在使用上有点限制(它是一个键/值存储,除了循环所有数据之外没有有效的查询接口)它具有内部存储的优势(性能)并且它具有良好的故障安全机制(定义次要实例,任意数量)。也不应该忘记分区功能。
我个人倾向于尽量减少外部依赖。外部数据库是依赖项。但是,如果您对应用程序的要求指定了广泛的查询功能,那就去做吧。
根据微软
将 Reliable Actors 视为事务系统。Service Fabric Reliable Actors 不是提供 ACID 的基于两阶段提交的系统。如果我们不实现可选的持久性,并且actor正在运行的机器死亡,它的当前状态将随之消失。演员将很快出现在另一个节点上,但除非我们实现了支持持久性,否则状态将消失。但是,在利用重试、重复过滤和/或幂等设计之间,您可以实现高水平的可靠性和一致性。