面向用户表示的Service Fabric Service与Service Fabric Actors

时间:2016-01-24 07:06:53

标签: c# .net microservices azure-service-fabric

在我的应用程序中,用户可以在地图上发布活动。该应用程序的入口点是无状态Web api服务。为了在内部表示用户,我想拥有一个用户服务。什么时候我应该使用可靠的有状态演员和可靠的有状态服务来存储配置文件数据和每个用户的发布事件?

当客户端在前端创建新用户时,actor或服务应在内部创建新用户。每次用户登录时,web api服务都应将所有用户交互转发给用户的内部表示(Actor或Service)。例如。用户发布新事件,web api服务找到用户并将发布的事件转发给他。由于发布的事件是公开的,我还希望拥有可靠的有状态事件服务。在将已发布的事件存储在用户内部之后,用户服务应该将事件转发到事件服务。

例如:

Client/User --> WebApiService --> UserService/UserActor --> EventService

当用户想要查看地图上的所有公共事件时,应该是这样的:

Client/User <-- WebApiService <-- EventService

因为事件具有地理参考,我想基于地理编码或类似的东西对EventService进行分区。

我应该选择哪种编程模型(演员和/或服务)以及为什么?

1 个答案:

答案 0 :(得分:2)

无论哪种方式都适用于这种情况,但它听起来并不像你需要这里的Actor模式的功能,所以我建议从可靠服务开始并将用户存储在可靠字典中。请记住,Actors是在可靠服务之上实现的特定模式,因此在某些方面,您将受限于该模式的约束,如果不仔细计划,这可能是以后的问题。例如,对一组演员运行查询并不能很好地工作,因此,如果您稍后决定需要对用户群进行查询,那么如果您在某个角色上运行查询,那么您将获得更好的效果。你使用可靠的字典,它很容易进行查询。

对于您的活动服务,是的,您当然可以按地理坐标进行分区。我过去做过这种方法的一种方法是将地理坐标转换为quadkeys,这是在一维密钥中表示2D空间数据的便捷方式。但是,请记住,您可能会遇到可能导致分区中某些群集的本地热点(大部分用户都集中在主要城市?如果是这样,那些分区的数据会比其他城市多)。