首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WCF实现低延迟实时财务数据输入的最佳实践?

问使用WCF实现低延迟实时财务数据输入的最佳实践?
EN

Stack Overflow用户
提问于 2011-04-22 17:02:09
回答 7查看 20.4K关注 0票数 36

我有一个.NET服务,它需要向它的客户提供实时的金融数据。这个提要的输出速率可能会变得非常高,我正在寻找实现这种低延迟和高性能服务的最佳架构。

我正在考虑使用某种流数据提供者,用于音频或视频,但发送提要更新。

会感谢你对这个问题的任何思考,或者任何现实世界的例子。

更新:

我不需要使用WCF,这只是我的第一种方法,因为这是目前的技术。欢迎C#中的任何其他实现。

EN

回答 7

Stack Overflow用户

发布于 2011-05-03 07:57:22

完全披露:我在Informatica (以前的29West)工作,现在在负责他们的通讯产品的工程团队工作。我有偏见。不过,我对金融市场的低延迟信息有相当好的把握.

如果您的消息速率约为60条消息/秒。(正如威尔·迪恩回答的评论中所述),他们正被送到一个GUI上,一个人坐在它前面,以人类的速度对市场做出反应,老实说,从延迟的角度来看,你使用的软件并不重要。您甚至可以不使用WCF (尽管我仍然建议不要使用它;我们考虑过支持它一次,并为它原型化了一个适配器,它使延迟增加了一个数量级--我们当时决定不去理会它)。

现在,Informatica的消息传递软件可以在一微秒内在同一台机器上的进程之间传递消息,如果您想购买一些带有内核旁路或InfiniBand设备的10 gear,您可以在具有单位数字微秒延迟的机器之间每秒传递数百万条消息。我们还将很快发布一个新的数据序列化库,它在C/C++、Java和.NET中得到支持,作为消息传递产品的一部分,在某些情况下,它实际上比协议缓冲区更快(尽管协议缓冲区被广泛使用,也是一个非常好的选择)。我们的.NET和Java都有一个名为"ZOD“的特性,用于”零对象传递“,这是一种表示在消息传递期间不生成新对象的有趣方法,这意味着没有垃圾收集暂停&相关的延迟峰值/异常值。我们有另一个叫做UMDS的产品,它专门设计用来在不减慢主干网或其他客户端的情况下,将高速主干网流量输送到速度较慢的桌面应用程序。

我可以继续谈论Informatica的消息传递软件有多棒,我确实认为它值得一看,但这看起来已经像一个直截了当的广告,我是一个工程师,而不是一个销售人员。以下是一些更一般性的建议:

  • 如果您有很多客户端接收相同的数据,您将需要一些UDP组播的味道。您通常需要某种类型的可靠多播传输-众所周知(并且免费)可靠的多播协议是PGM。Windows包括一个在C#中可用的PGM实现;如果您想试用它,请参阅Mike的优秀博客帖子。(我碰巧认识迈克--他是个聪明人。)协议选择是您获得所需费用的一个领域;Informatica的消息传递包括一个可靠的多播协议,该协议松散地基于PGM (我们的架构师在很长一段时间前共同设计了PGM RFC ),但有许多重大改进。不过,简单的PGM可以满足你的需要。
  • 您想要使用无代理/无服务器的体系结构。让应用程序用中间的任何东西进行点对点的交流。避免消息路径中的额外跳转(这通常意味着避免大多数JMS实现,避免任何名称中包含"queue“的东西,等等)。
  • 当单个客户端行为不当时,请注意系统的行为。一个缓慢的消费者能让其他人慢下来吗?
  • 有许多操作系统调优和BIOS调优选项可以使任何类型的低延迟消息传递、本地消息传递或购买--比如中断合并、将NIC中断绑定到特定的CPU核心、接收端扩展(在Windows上与UDP一起使用时一直很糟糕,但在将来应该会变得更好)、禁用某些CPU电源状态等方面都有好处。
  • 抵制使用.NET中内置的对象序列化通过线路发送整个对象的诱惑--它比使用简单的二进制格式(如协议缓冲区、Informatica序列化库或您自己的二进制格式等)慢几个数量级。

如果你有更多的具体问题或需要更详细的任何我的建议,就让我知道!

票数 38
EN

Stack Overflow用户

发布于 2011-04-22 17:18:24

“低延迟”有多低,“强”有多忙?你需要知道你的目标是什么,选择正确的方法。

我可以为您提供一些硬件,可以100%地响应所有请求,例如,20 use,直到您的网络硬件的全部容量,但它不会使用WCF太多。

粗略地说,我认为像WCF这样的东西是非常高水平的,并且相对于性能(延迟/吞吐量)来说,它是非常容易使用和抽象的。对于你的应用程序,他们是否把它换得太多,都需要真实的数字。

广泛使用的最低延迟、最低开销的基于IP的协议是UDP --这就是为什么它被用于DNS和NTP之类的东西。它在服务器上是非常可伸缩的,因为服务器不需要保持任何状态,而且在几乎任何平台上实现都非常简单。但是,您确实需要从网络数据包而不是.NET对象的角度来思考。你也能提供客户端软件吗?

票数 6
EN

Stack Overflow用户

发布于 2011-04-27 11:09:02

实时金融数据?千万不要依赖WCF。相反,选择其他行业所使用的。也就是说,纳斯达克使用实时创新-数据分发服务向用户提供实时股票报价。他们为他们的通信库提供了C/C++/C# api,这非常容易设置和使用(与WCF相比)。

通常,这种实时数据提要使用发布/订阅范式,这有助于确保通信以最小的开销进行。这种方法是面向消息的中间件的主要思想,也正是金融服务对实时信息的使用。

在侧节点上,您可以使用RTI库提供实时音频视频数据包,据我所知,像MQ-9这样的无人驾驶飞行器再次使用这个库向地面控制站传送实时视频和地理位置信息。

还有免费的数据分发服务库,但我对它们没有经验。你只要用谷歌搜索就行了。

编辑:我目前正在开发一些人机界面软件,该软件使用上述RTI库以及其他两个具有这样面向消息的体系结构的库,到目前为止,这些库确实为我的所有实时通信需求提供了一个线程。这里有一个演示:http://epics.codeplex.com/ (它将用于远程控制我们全新的核研究设施中的设备)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5757886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档