2

我正处于设计将是事件驱动架构(基本发布/订阅)的系统的开始阶段。尚未选择实际的工具和框架,因此这个问题比技术特定更概念化(尽管它将在 .Net 中完成)。

这种情况的一个近乎完美的类比是金融交易系统。想象一个服务器不断接收市场数据(实时或间隔——没关系)。服务器将发布特定证券的定价更新。就这个问题而言,假设有 1000 种证券被服务器“观察”并发布。

有 100 个客户端应用程序是此服务的订阅者。每个客户只会对正在发布的证券的一小部分感兴趣。

如果客户端收到所有 1000 种证券的消息,则必须对其进行解析,这显然会产生更多的网络流量和客户端的更多负载。

另一方面,必须在服务器端解析消息内容似乎会在发布/路由时增加负载。

在这种类型的架构中,这通常是如何处理的?

4

4 回答 4

2

看看 RabbitMQ 提供的一些教程

关联

请特别注意,您可以使用路由和主题将消息传递给适用的客户端。这里的“服务器”“可以简单地将消息放到队列中,客户端可以简单地根据他们订阅的路由/主题监听某些消息。可能还有很多其他选项,但这似乎是一个好方法。RabbitMQ 有一些可用的 .Net 客户端,我对他们的产品非常满意。

我也使用过 IBM MQ 和 MSMQ,但我更喜欢 Rabbit。主要是因为它基于 AMQP,它是一个开放协议,让我可以使用 .Net、Python、Java 等进行连接,而不是专有驱动程序或尝试将所有内容包装在 JMS 中。绝不是专家,所以也许其他人对您的问题有更好的了解。

祝你好运。

于 2012-08-03T21:34:12.807 回答
2

通常,服务器是能够执行繁重任务的更强大的机器。由于客户端只需要信息的子集,我认为服务器应该解析信息并只向客户端发送他们需要的信息。

于 2012-08-03T21:36:32.033 回答
1

分发股票报价正是导致发布/订阅地址申请专利的用例,我们现在知道并喜欢 JMS 和其他消息传递技术中的“主题”(专利 EP0412232)。

在这种情况下,服务器将发布包含股票代码的主题的股票报价(“ticks”)......通常您会使用一个主题名称空间,该名称空间提供有关该代码的一些分层信息 - 例如 NASDAQ.TECHNOLOGY.HARDWARE.AAPL。

客户将使用主题通配符订阅一个符号或一组符号。发布/订阅机制将确保仅分发给正确的订阅者。使用多播网络可以使这非常有效。

因此,为了回答您的问题,在这种情况下,发布者(服务器)正在执行对消息进行分类所需的任何逻辑,然后在相关主题上发布。订阅者无需做太多工作即可获取相关消息。

于 2012-08-05T23:44:59.493 回答
0

From the short description you give, your scenario looks like a good fit for an OMG DDS (Data Distribution Service) implementation. This is a language neutral specification, and there are several products available that offer a C# API.

See this Wikipedia entry for a very brief introduction and a list of references.

DDS supports many advanced data management features like a strong-typed and content aware databus, distributed state management and historical data access. Its rich set of Quality of Service settings allows to off-load a lot of the complexity from your applications to the middleware.

In particular, the content filtering requirement that you describe is an important feature. Some of the available products have implemented sophisticated filtering mechanisms that scale well and have smart trade-offs between the amount of traffic on the network versus the CPU load required to evaluate the filters. Those filters are expressed in SQL syntax, like the WHERE clause of a SELECT.

DDS implementations typically are highly scalable and decentralized in nature. Components participating in a DDS infrastructure are decoupled, both in space and in time. Some DDS products are deployed in numerous mission- and business-critical systems.

If you are interested, then I can give you much more information. I have specialized in DDS for more than 10 years, I still like it and I think it is one of the most useful technologies around.

于 2012-08-03T23:49:49.640 回答