为WPF应用程序设计大批量市场数据服务

时间:2012-08-16 18:16:09

标签: c# .net wpf wcf

我想用WPF应用程序使用虚构的大量数据(选项交易)创建我自己的迷你项目,以更好地理解设计实时系统所需的设计概念和注意事项。了解使用何种技术和方法。请不要提及像Tibco这样的第三方解决方案 - 这是出于学习目的。我的目的是WPF应用程序每5秒刷新一次UI

在设计虚构的市场数据服务器时,考虑到高容量性能是一个标准,我会想到一些快速的想法 - 多播UDP(这是太低级别/坏方向吗?),使用队列的消息传递架构例如,MSMQ或RabbitMQ,一个远程服务主机,客户端应用程序例如通过WCF TCP绑定或Web服务发起请求。

我有一个想法是客户端维护自己的本地队列并订阅定价服务器使用消息传递解决方案广播的主题?或者服务器可能会平等地向所有客户端广播数据并将其留给客户端以在本地过滤和整理数据?在人们的经历中,每种方法的优缺点是什么?我在这里错过了其他方法吗?我想这归结为 - 如果客户端正在提取数据,或者服务器是否应该将数据推送给他们?

另一个问题是 - 这些消息的线格式会是什么?我主要习惯于使用丰富的业务对象类,分为存储库层,域模型(带有验证方法和工作流逻辑)和简单的服务层。我是否仍然可以利用这种方法并仍然保持我的性能目标,还是需要创建更轻量级的数据有效载荷格式?

1 个答案:

答案 0 :(得分:2)

在开始进行网络级优化之前,我会从更高层开始设计这样的系统。

RabbitMQ为路由消息提供不同类型的交换。在RabbitMQ服务器端将所有消息广播到每个客户端(扇出交换)的方法速度非常快,但这只能用于低容量消息,并且只要客户端通过高速链路(例如本地千兆位以太网)连接。相反,使用直接或主题交换可能会显着降低您的网络延迟。您可以在RabbitMQ网站上阅读有关交换类型的更多信息。

你的最后一个问题是关于线格式的。从理论上讲,RabbitMQ允许任何字符串(甚至二进制)有效载荷,所以它试图将更多信息压缩到更少的字节。根据我的经验,只要您的消息不是通过网络数据包MTU,压缩或选择一个聪明的编码方案的收益是微不足道的。

一般而言,请考虑每次优化花费的时间,以及预期的投资回报率。 IMO的一些优化比其他更有用。如果我是你,我会仔细看看RabbitMQ配置参数。例如,查看是否可以使用每进程消息队列设置Rabbit MQ服务器。

相关问题