我有一个.NET服务,它需要向它的客户提供实时的金融数据。这个提要的输出速率可能会变得非常高,我正在寻找实现这种低延迟和高性能服务的最佳架构。
我正在考虑使用某种流数据提供者,用于音频或视频,但发送提要更新。
会感谢你对这个问题的任何思考,或者任何现实世界的例子。
更新:
我不需要使用WCF,这只是我的第一种方法,因为这是目前的技术。欢迎C#中的任何其他实现。
发布于 2011-05-03 07:57:22
完全披露:我在Informatica (以前的29West)工作,现在在负责他们的通讯产品的工程团队工作。我有偏见。不过,我对金融市场的低延迟信息有相当好的把握.
如果您的消息速率约为60条消息/秒。(正如威尔·迪恩回答的评论中所述),他们正被送到一个GUI上,一个人坐在它前面,以人类的速度对市场做出反应,老实说,从延迟的角度来看,你使用的软件并不重要。您甚至可以不使用WCF (尽管我仍然建议不要使用它;我们考虑过支持它一次,并为它原型化了一个适配器,它使延迟增加了一个数量级--我们当时决定不去理会它)。
现在,Informatica的消息传递软件可以在一微秒内在同一台机器上的进程之间传递消息,如果您想购买一些带有内核旁路或InfiniBand设备的10 gear,您可以在具有单位数字微秒延迟的机器之间每秒传递数百万条消息。我们还将很快发布一个新的数据序列化库,它在C/C++、Java和.NET中得到支持,作为消息传递产品的一部分,在某些情况下,它实际上比协议缓冲区更快(尽管协议缓冲区被广泛使用,也是一个非常好的选择)。我们的.NET和Java都有一个名为"ZOD“的特性,用于”零对象传递“,这是一种表示在消息传递期间不生成新对象的有趣方法,这意味着没有垃圾收集暂停&相关的延迟峰值/异常值。我们有另一个叫做UMDS的产品,它专门设计用来在不减慢主干网或其他客户端的情况下,将高速主干网流量输送到速度较慢的桌面应用程序。
我可以继续谈论Informatica的消息传递软件有多棒,我确实认为它值得一看,但这看起来已经像一个直截了当的广告,我是一个工程师,而不是一个销售人员。以下是一些更一般性的建议:
如果你有更多的具体问题或需要更详细的任何我的建议,就让我知道!
发布于 2011-04-22 17:18:24
“低延迟”有多低,“强”有多忙?你需要知道你的目标是什么,选择正确的方法。
我可以为您提供一些硬件,可以100%地响应所有请求,例如,20 use,直到您的网络硬件的全部容量,但它不会使用WCF太多。
粗略地说,我认为像WCF这样的东西是非常高水平的,并且相对于性能(延迟/吞吐量)来说,它是非常容易使用和抽象的。对于你的应用程序,他们是否把它换得太多,都需要真实的数字。
广泛使用的最低延迟、最低开销的基于IP的协议是UDP --这就是为什么它被用于DNS和NTP之类的东西。它在服务器上是非常可伸缩的,因为服务器不需要保持任何状态,而且在几乎任何平台上实现都非常简单。但是,您确实需要从网络数据包而不是.NET对象的角度来思考。你也能提供客户端软件吗?
发布于 2011-04-27 11:09:02
实时金融数据?千万不要依赖WCF。相反,选择其他行业所使用的。也就是说,纳斯达克使用实时创新-数据分发服务向用户提供实时股票报价。他们为他们的通信库提供了C/C++/C# api,这非常容易设置和使用(与WCF相比)。
通常,这种实时数据提要使用发布/订阅范式,这有助于确保通信以最小的开销进行。这种方法是面向消息的中间件的主要思想,也正是金融服务对实时信息的使用。
在侧节点上,您可以使用RTI库提供实时音频视频数据包,据我所知,像MQ-9这样的无人驾驶飞行器再次使用这个库向地面控制站传送实时视频和地理位置信息。
还有免费的数据分发服务库,但我对它们没有经验。你只要用谷歌搜索就行了。
编辑:我目前正在开发一些人机界面软件,该软件使用上述RTI库以及其他两个具有这样面向消息的体系结构的库,到目前为止,这些库确实为我的所有实时通信需求提供了一个线程。这里有一个演示:http://epics.codeplex.com/ (它将用于远程控制我们全新的核研究设施中的设备)
https://stackoverflow.com/questions/5757886
复制相似问题