2016-09-30 55 views
2

我正试图与服务结构握手,我正在努力一点点。一些问题:服务结构服务是完全单线程的吗?

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

  • 我有我需要的服务结构(即可能需要几个小时)来执行长时间运行的操作。有没有我可以用于服务面料的推荐图案?这些目前使用触发webjob的存储队列进行处理。也许有可靠的队列和RunAsync循环的东西?

回答

0

第一点 - 这纯粹是一个客户端问题。 Chrome浏览器将我的请求视为无效,因此延迟了第二次请求,直到第一次得到回复。改变请求的参数允许它们同时被服务。

1

看来你处理的第一部分,所以我会在第二部分评论:“长时间运行的操作”。

我们可以看到长期运行的操作/工作流程正在办理多远,服务织物来的。出于这个原因,我们可以通过查看软件专家几十年来一直使用的设计模式来建立在巨人的肩膀上。例如,着名的和全包的Process Manager。请注意,这种模式有时是一种矫枉过正的行为。如果是这种情况,只需查看企业集成模式书中的其他相关模式(Gregor Hohpe)。

至于使用的可靠的集合,这些都是实现细节选择的数据结构支撑所述选定的设计图案时。

我希望帮助

1

至于你的第二个问题 - 这真的取决于你的长期运行的任务的性质。

是您的长期运行的任务的那种工作量是在一个孤立的线程上运行依赖于本地OS/VM级别的资源,并最终回来了结果(A)?或者是一种长期运行的任务,通过阶段并通过一系列持久状态变化(B)建立结果模型?

据我了解服务织物,它是不是真的设计用于运行长期运行的工作负载(A),但更多的写作水平可扩展,高度可用的系统。

如果您非常热衷于使用服务结构(并且您的工作负载往往更像是B而不是A),我肯定会找到一种方法来打破可以在群集中并行处理的长时间运行任务。但即便如此,可能还有更适合这种设计的技术,例如Azure Batch?

P.s.如果你打算把一个长时间运行的进程在RunAsync方法,你应该设计的工作量,它是可中断的和其状态可以在可以从另一个节点的群集

在恢复在某种程度上是持久一个有状态的服务,只有主副本具有对 状态的写访问权限,因此一般当该服务正在执行实际的 工作时。有状态服务中的RunAsync方法仅在有状态服务副本是主要的 时执行。 RunAsync方法 当主副本的角色从主服务器改变为 以及关闭和中止事件时取消。

P.s.s尝试编写可伸缩系统时,长时间运行是恶魔。现在就尝试并解决这个问题,如果可能的话,为自己节约未来的痛苦。

+0

这些进程更像B,但是他们大多数都是通过一个非常节油的服务来参与IO(SharePoint Online)。所以我限制了多少可以使处理并发。这些任务也是用户启动的,所以不是真正的批处理。 –