Asp.net web api 服务结构服务是否完全是单线程的?

Asp.net web api 服务结构服务是否完全是单线程的?,asp.net-web-api,owin,azure-service-fabric,Asp.net Web Api,Owin,Azure Service Fabric,我正在努力掌握服务结构,我有点挣扎。一些问题: 所有服务结构服务实例都是单线程的吗?我创建了一个无状态web api,一个实例,使用一个执行Task.Delay的方法,然后返回一个字符串。对这项服务的两个请求是一个接一个地提供的,而不是同时提供的。那么,我认为可以服务的并发请求的数量纯粹是应用程序清单中服务实例计数的函数,对吗编辑考虑到这一点,这可能与OWIN Wep Api的设置有关。可能是它被会话阻塞了吗?我假设默认情况下没有会话 我需要在ServiceFabric中执行长时间运行的操作(

我正在努力掌握服务结构,我有点挣扎。一些问题:

  • 所有服务结构服务实例都是单线程的吗?我创建了一个无状态web api,一个实例,使用一个执行Task.Delay的方法,然后返回一个字符串。对这项服务的两个请求是一个接一个地提供的,而不是同时提供的。那么,我认为可以服务的并发请求的数量纯粹是应用程序清单中服务实例计数的函数,对吗编辑考虑到这一点,这可能与OWIN Wep Api的设置有关。可能是它被会话阻塞了吗?我假设默认情况下没有会话

  • 我需要在ServiceFabric中执行长时间运行的操作(可能需要几个小时)。是否有一种推荐的模式可用于此服务结构?这些当前使用触发webjob的存储队列进行处理。也许有可靠的队列和RunAsync循环


到第一点-这纯粹是客户的问题。Chrome认为我的请求是一致的,因此将第二个请求延迟到第一个得到响应。通过更改请求的参数,可以同时处理请求。

似乎您处理了第一部分,因此我将对第二部分进行评论:“长时间运行的操作”

我们可以看到,在服务结构出现之前,长时间运行的操作/工作流就已经得到了处理。出于这个原因,我们可以通过研究软件专家几十年来一直使用的设计模式,在巨人的肩膀上再接再厉。例如,著名的和包罗万象的。请注意,这种模式有时是过分的。如果是您的情况,只需查看《企业集成模式》一书中的其他相关模式(由Gregor Hohpe编写)

至于可靠集合的使用,在选择支持所选设计模式的数据结构时,这些是实现细节


我希望这对你的第二点有所帮助,这取决于你长期任务的性质

长时间运行的任务是否是在依赖于本地OS/VM级别资源的独立线程上运行的工作负载,并最终返回结果(a)?或者,它是一种长期运行的任务,通过一系列持久化的状态更改(B)经历各个阶段并建立结果模型

从我对ServiceFabric的理解来看,它并不是真正为运行长时间运行的工作负载(A)而设计的,而是为了编写水平可伸缩、高可用的系统

如果您非常喜欢使用ServiceFabric(您的工作负载更像是B而不是A),我肯定会找到一种方法来分解那些可以在集群中并行处理的长时间运行的任务。但即便如此,可能还有更合适的技术为此而设计,比如Azure Batch

另外,如果您打算在RunAsync方法中放置一个长时间运行的进程,那么您应该设计工作负载,使其可中断,并且其状态可以以一种可以从集群中的另一个节点恢复的方式持久化

在有状态服务中,只有主副本具有对的写访问权限 状态,因此通常是在服务执行实际操作时 工作有状态服务中的RunAsync方法仅在 有状态服务副本是主副本。RunAsync方法是 当主副本的角色从主副本更改为其他副本时取消,如 以及在关闭和中止事件期间


当试图编写可伸缩系统时,p.s.s.长时间运行的操作是魔鬼。现在就尝试解决这个问题,如果可能的话,避免将来的痛苦。

这些过程更像是B。但是,它们大多涉及IO,并提供非常令人满意的服务(SharePoint Online)。因此,我只能在多大程度上实现并行处理。这些任务也是由用户发起的,因此不是真正的批处理过程。