用于用户表示的 Service Fabric Service 与 Service Fabric Actors
Service Fabric Service vs. Service Fabric Actors for user representation
在我的应用程序中,用户可以在地图上 post 事件。应用程序的入口点是无状态 Web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Actors 以及何时使用 Reliable Stateful Services 来存储每个用户的配置文件数据和 posted 事件?
当客户端在前端创建新用户时,参与者或服务应在内部创建新用户。每次用户登录时,网络 api 服务应将所有用户交互转发给用户的内部表示(Actor 或服务)。例如。用户 post 一个新事件,网络 api 服务找到用户并将 posted 事件转发给他。因为posted事件是public,我也想有一个可靠的有状态事件服务。在用户内部存储 posted 事件后,用户服务应将事件转发给事件服务。
例如:
Client/User --> WebApiService --> UserService/UserActor --> EventService
当用户想要在地图上查看所有 public 事件时,应该是这样的:
Client/User <-- WebApiService <-- EventService
因为事件有地理参考,所以我想根据地理编码或类似的东西对 EventService 进行分区。
我应该为这样的应用程序选择哪种编程模型(参与者 and/or 服务),为什么?
这两种方法都适用于这种情况,但听起来您不需要这里的 Actor 模式的功能,因此我建议从 Reliable Service 开始并将用户存储在 Reliable Dictionary 中。请记住,Actor 是在 Reliable Services 之上实现的特定模式,因此在某些方面您将受限于该模式的约束,如果没有仔细规划,这可能会在以后出现问题。例如,运行查询一组参与者的效果不是很好,因此如果您稍后决定需要 运行 查询您的用户群,您将如果您使用易于查询的 Reliable Dictionary,情况会好得多。
对于您的活动服务,是的,您当然可以按 geo-coordinate 进行分区。我过去这样做的一种方法是将 geo-coordinate 转换为 quadkeys,这是一种在 one-dimensional 键中表示 2D 空间数据的便捷方法。但是,请记住,您可能会遇到局部热点,这可能会导致您的分区出现一些集群(您的大部分用户都集中在大城市周围吗?如果是这样,这些分区将比其他分区拥有更多数据)。
在我的应用程序中,用户可以在地图上 post 事件。应用程序的入口点是无状态 Web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Actors 以及何时使用 Reliable Stateful Services 来存储每个用户的配置文件数据和 posted 事件?
当客户端在前端创建新用户时,参与者或服务应在内部创建新用户。每次用户登录时,网络 api 服务应将所有用户交互转发给用户的内部表示(Actor 或服务)。例如。用户 post 一个新事件,网络 api 服务找到用户并将 posted 事件转发给他。因为posted事件是public,我也想有一个可靠的有状态事件服务。在用户内部存储 posted 事件后,用户服务应将事件转发给事件服务。
例如:
Client/User --> WebApiService --> UserService/UserActor --> EventService
当用户想要在地图上查看所有 public 事件时,应该是这样的:
Client/User <-- WebApiService <-- EventService
因为事件有地理参考,所以我想根据地理编码或类似的东西对 EventService 进行分区。
我应该为这样的应用程序选择哪种编程模型(参与者 and/or 服务),为什么?
这两种方法都适用于这种情况,但听起来您不需要这里的 Actor 模式的功能,因此我建议从 Reliable Service 开始并将用户存储在 Reliable Dictionary 中。请记住,Actor 是在 Reliable Services 之上实现的特定模式,因此在某些方面您将受限于该模式的约束,如果没有仔细规划,这可能会在以后出现问题。例如,运行查询一组参与者的效果不是很好,因此如果您稍后决定需要 运行 查询您的用户群,您将如果您使用易于查询的 Reliable Dictionary,情况会好得多。
对于您的活动服务,是的,您当然可以按 geo-coordinate 进行分区。我过去这样做的一种方法是将 geo-coordinate 转换为 quadkeys,这是一种在 one-dimensional 键中表示 2D 空间数据的便捷方法。但是,请记住,您可能会遇到局部热点,这可能会导致您的分区出现一些集群(您的大部分用户都集中在大城市周围吗?如果是这样,这些分区将比其他分区拥有更多数据)。