3

我正处于我们新网站的规划阶段——它是我们构建的一些移动应用程序的扩展。我们希望为我们的用户提供一个交流的中心点,并为不想/不能使用移动应用程序的用户提供功能。我们正在考虑添加的功能之一是本质上类似于 SO 徽章系统的声誉系统。我们正在设计系统以使用 SOA。

我不想将所有这些逻辑编码到主应用程序中作为谨慎的块。我正在考虑创建一种方法来实现这一点,这将使我们能够定义新的阈值和规则来获得声誉并将它们注入某些服务中。到目前为止,我想到的两种方法是:

  1. 要查找用户操作中的某些特征并做出响应,这意味着运行的服务可以通过“插入式”奖励定义运行并检查已达到的阈值并做出适当的响应。
  2. 在用户执行操作时触发事件 - 监听这些事件并做出适当的响应。因为将执行这些操作的服务可能在不同的服务器上运行在不同的应用程序域中,所以我可以看到有一个中央消息总线来监听和响应这些事件的唯一方法是使用 MassTransit、nServiceBus 或 Rhino.Esb .

我知道使用服务总线很容易被不恰当地设计成根本不需要它的应用程序,而且大多数时候——除非你正在集成不同的异构系统——在设计新系统时你很可能不需要它但我有点迷失了最佳方式的选择。我不喜欢让服务一直在后台敲击 Db 的想法。但它听起来确实在早期可能会简单得多 - 后来 - 我不敢想!

这里有人设计过这样的系统吗?你是怎么做到的?我们正在设计高吞吐量,因为我们预计系统有时需要能够应对用户的激增。

4

1 回答 1

4

我设计了一个具有类似要求的系统。为实现这一目标,关键要素是:

  • 插件
  • 事件消息传递 - 使用Emesary

基本概念是核心并不确切知道哪个模块将执行任何给定任务。

消息被定义并在系统内的各个点被发送。发件人不知道是否需要该消息。这有效地解耦了系统的大部分。

因此,为了执行一项工作,插入了一些代码,该代码向事件消息传递总线注册并接收消息。当它收到需要处理的消息时,它会处理它。

Emesary 代码在我调用它的第一个实例中非常小且高效(Emesary,您可以自由使用它;或来自Emesary CodePlex

随着系统变得越来越复杂,可能会有很多事件飞来飞去,如果每秒超过 20k,我的设计总是要添加过滤和路由(通过扩展接收者接口来实现,以允许接收者指定要在注册期间接收的消息)。我从来不需要添加这个过滤,因为 Emesary 的效率足够高,处理消息需要时间。

我已经构建了一个 Emesary 版本,它使用 WCF、Corba 和 TCP/IP 跨不同系统桥接两个通知程序。我使用RabbitMQ进行了调查,并决定如果需要可以在 Emesary 下使用它。

基类图

Emesary 类图

可扩展的服务器。

这是一个相当复杂的示例,但它显示了 Emesary 的适用位置。在此图中,任何带有阴影的东西都可以有多个实例,并且在我在这里试图解释的范围之外进行管理。

可扩展的应用服务器

于 2010-10-10T15:37:55.753 回答