2010-04-20 13 views
2

我正在开发跟踪车辆的应用程序。将有大约10k或更多的车辆。每个分钟都会发送〜250bytes。数据包含gps位置以及CAN总线(我们可以从车载电脑和仪表板读取的每个数据)的所有内容。数据由GSM/GPRS发送(使用UDP协议)。估计每天这些数据的行数是〜2000k。关于设计和构建分布式应用程序以跟踪车辆的建议

我看到那里有3个主要块(块 - >平均主要模块)。多线程套接字服务器(MSS) - 我拥有它。 MSS将接收到的数据存储到队列中(使用NServiceBus)。

2. 规则处理器服务器(RPS) - 这是该系统的核心。该块负责解析接收到的数据,存储在数据库中,处理规则,向Notifier Server发送消息(这将发送电子邮件/短信文本)。

规则示例。如前所述,接收到的字节会有关于当前速度的信息。当速度高于120时:在Web应用程序中为特定用户显示警报,发送电子邮件,发送短信文本。

(在同一台机器上可以有多个RPS实例)。

3. Web应用程序 - 允许报告和用户定义的规则,监控警报等

我要找的意见如何RPS和Web应用程序之间的设计交流。

一些问题:

  • 是否应Web应用程序和RPS已经分离的数据库或一个中央数据库就足够了?

  • 我在web应用程序中有一个域模型。如果有一个中央数据库,那么我可以在RPS上使用相同的模型(对象)吗?那么,如何将更改后的规则发送给RPS?

我试图尽可能地解耦这些块。我打算为每个客户端创建不同的应用程序实例(每个客户端都有独立的数据库)。一名客户将拥有10万辆车辆,其他车辆仅有100辆。

+0

请注意该领域的现有专利。我曾为vert.net工作,还有其他人。 – kenny 2010-04-23 11:38:33

回答

3

您正在尝试构建允许用户配置它的多租户SaaS系统。为此,我不建议使用技术块作为最高级别的构建块。相反,寻找更多以业务为导向的解耦线 - 这可能会更加关注时间对域的影响。

例如,从用户更改规则的时间开始,它需要多快才能生效?

您可能会发现不同的规则有不同的时间效应。

找出原因。尝试了解为什么一组规则需要在5秒内生效(例如安全)的业务原因,以及其他规则需要在月底生效(例如计费)。

此信息将推动许多架构选择前进。

尽管您可能会在解决方案中使用上面提到的技术组件,它们如何配置,它们与哪些数据库交谈等 - 所有这些都由上述不同的业务环境驱动。

我的建议是在前进之前回去并获得更多业务洞察。

+0

这很有帮助,但我正在寻找更具体的建议。 – dariol 2010-04-29 07:58:37

0

你几乎没有,因为你使用NSB,你可以订阅你已经在做的Bus.Send。从那里你可以将处理程序串起来创建规则管道。最后的处理程序可以是将处理状态保存到数据库的处理程序。如果您想要将该处理与Web应用程序中正在进行的操作分离,则可以从Web应用程序创建一个单独的数据库,并且只能读取报告。您可以在处理结束时触发事件以更新此其他数据库。查看他的blog上的Udi命令查询隔离帖子。

+0

谢谢,但我的问题是,规则是由Web应用程序中的用户定义的。那么,如何通知/更改外部服务中的规则? – dariol 2010-04-22 11:54:13

+2

只是spitballing:在配置更改时,Web应用程序可能会向RuleChangeProcessor发送消息,然后可以发布RulesChanged事件消息。各个处理节点也可以订阅此消息,并直接从消息接收配置或知道他们需要从集中式源更新其配置。 – 2010-04-27 19:19:14

+0

这是个好主意。谢谢。大卫,发布这个答案,我标记它。 – dariol 2010-04-29 07:59:54

0

这听起来像你真正想要的是CEP(复杂事件处理)。 CEP系统监视一系列事件并使用定义的查询捕获某些事件或事件序列,然后对它们做出反应。

.Net中的开源选项是NEsper

+0

它看起来很先进,但我认为NSB就足够了,照顾它。我正在寻找解决方案,以便如何设计块之间的通信。 – dariol 2010-04-23 13:17:34