c# - 用于用户表示的 Service Fabric 服务与 Service Fabric Actors

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

在我的应用程序中,用户可以在 map 上发布事件。应用程序的入口点是无状态 Web API 服务。为了在内部代表用户,我想要提供用户服务。我什么时候应该使用 Reliable Stateful Actors 以及什么时候应该使用 Reliable Stateful Services 来存储每个用户的个人资料数据和发布的事件?

当客户端在前端创建新用户时,参与者或服务应在内部创建新用户。每次用户登录时,Web API 服务都应将所有用户交互转发给用户的内部表示(Actor 或 Service)。例如。用户发布新事件,Web API 服务找到该用户并将发布的事件转发给他。因为发布的事件是公开的,所以我也希望有一个可靠的有状态事件服务。将发布的事件存储在用户内部后,用户服务应将事件转发到事件服务。

例如:

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

当用户想要查看 map 上的所有公共(public)事件时,应该是这样的:

Client/User <-- WebApiService <-- EventService

因为事件有地理引用,所以我想根据地理编码或类似的东西对 EventService 进行分区。

对于这样的应用程序,我应该选择哪种编程模型(参与者和/或服务)?为什么?

最佳答案

无论哪种方式都适用于这种情况,但听起来您不需要此处的 Actor 模式功能,因此我建议从可靠服务开始并将用户存储在可靠字典中。请记住,Actor 是在 Reliable Services 之上实现的特定模式,因此在某些方面您将受到该模式的约束,如果不仔细规划,这可能会在以后出现问题。例如,对一组参与者运行查询效果不太好,因此,如果您稍后决定需要对用户群运行查询,那么如果您使用 Reliable ,情况会好得多方便查询的词典。

对于您的事件服务,您当然可以按地理坐标进行分区。我过去这样做的一种方法是将地理坐标转换为 quadkeys ,这是用一维键表示 2D 空间数据的便捷方法。但是,请记住,您可能会获得本地热点,这可能会导致分区中出现一些集群(您的大多数用户是否集中在主要城市?如果是这样,这些分区将比其他分区拥有更多的数据)。

关于c# - 用于用户表示的 Service Fabric 服务与 Service Fabric Actors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34973135/

相关文章:

c# - 如何将 'Convert' 类包装到通用函数中

security - OpenID Connect ID token : What's the purpose of audience [aud] field validation

java - 为 Consul、网关和微服务配置 HTTPS 会导致 ZuulException : Forwarding error

c# - 将屏幕截图捕获为图像然后使用 ffmpeg 将图像转换为视频文件的时间应该是什么?

c# - 通过 Ajax 和 JSON 调用 WCF REST 服务

c# - ValidationRule 的执行集-C# 类设计 - 更好的方法

c# - 将 TextBox.Text 绑定(bind)到 DataSet.DataSetName

c# - 搜索多个索引并返回正确的类型

spring-boot - 如何使用 Netflix Zuul 进行金丝雀发布和动态路由?

c# - 重要类的通用类型约束