C# 混合异步/同步体系结构

C# 混合异步/同步体系结构,c#,.net,C#,.net,这个问题困扰了我好几个星期,但我太匆忙了,没有理智地事后处理它。最后,我给这位急不可耐的顾客提供了一个快速而肮脏的解决方案,以缓解他脆弱的神经(结果也是我的神经)。我现在终于花时间以一种自由的心态来审视这一点 基本上,我面临着尽可能快地处理同步数据(时序序列)的挑战(听起来你在寻找一个。在你的图表中,那将是数据中心。Microsoft提供了一个名为的服务,可以用于类似的事情,我喜欢使用一个名为的库来简化事情。如果你说的是一台机器,其中需要将订购的系列分发给计算机上的所有处理器在同一台机器上,我将

这个问题困扰了我好几个星期,但我太匆忙了,没有理智地事后处理它。最后,我给这位急不可耐的顾客提供了一个快速而肮脏的解决方案,以缓解他脆弱的神经(结果也是我的神经)。我现在终于花时间以一种自由的心态来审视这一点


基本上,我面临着尽可能快地处理同步数据(时序序列)的挑战(听起来你在寻找一个。在你的图表中,那将是数据中心。Microsoft提供了一个名为的服务,可以用于类似的事情,我喜欢使用一个名为的库来简化事情。

如果你说的是一台机器,其中需要将订购的系列分发给计算机上的所有处理器在同一台机器上,我将使用Data Hub,继续您的单线程想法,将串行地排到N个私有队列(相对较快,因此我不担心阻塞,并且您可以从知道项目已排到所有队列中得到好处)

这些专用队列中的每一个都只允许从一个且唯一的处理器出列。可能较慢的“Data Hub-->处理器”将被并行调用,但不会像您所说的那样占用整个链,因为

然后,您可以配置1个处理器/队列/线程(易于管理)或1个队列/N个队列/类似的无状态处理器(这将需要额外的下游工作来重新排序)


在更分布式的系统(例如多机)中,您通常会有类似Data Hub的功能,将消息发送到消息“主题”,然后让消息基础结构发送给所有使用者。

不确定是否最适合,但在这里可能适合您。您可以拥有全部在内存中的队列(fast),您可以将消息扇出,然后将其压缩到多个配置中(我认为它可以处理顺序等)

我没有在项目中使用zeromq的经验,但是,它确实有一些引人注目的特性,并且似乎得到了很好的支持(包括许多客户端语言)


有一个很好的介绍视频,展示了该工具可以实现的功能。

我喜欢你的“并行工作队列”想法。特别是,它允许数据在等待处理时排队。处理器是否位于单个(多核)上系统或它们是分布式计算机吗?前置处理器或后置处理器或两者都需要哪个顺序?您的.NET版本是什么?您的问题中的“顺序”是由什么构成的?@Kit:如上所述,它是时间顺序序列,(日期时间以毫秒计)@RobertHarvey是的,的确如此,但是我们再次引入了相当大的延迟,这在这种情况下是不可接受的。队列应该很小,但由于实时数据流,我们通常会有很大的缓冲区。我认为OP很难实现。忽略了这一部分。不过,架构仍然可以应用。@SteveCzetty:不要接受它很糟糕,但几年前我在一家大型金融公司担任MSMQ支持团队的负责人时,我几乎陷入了抑郁症。这并不是我一生中最好的纪念品:-)这项技术是一种可以杀死苍蝇的技术。但我的观点是100%有偏见的indeed@MikaJacobi哈哈,我同意,这就是为什么我使用像NServiceBus这样的库。(除了MSMQ还有其他选项):)