1

背景:MVC 应用每秒有 100 多个事务,需要详细的实时报告。

问题:针对事务数据库进行报告意味着复杂的报告逻辑 + 缓慢的报告加载时间。大型报告会对交易流程产生负面影响。定期将数据拉入非规范化的多维数据集违反了实时报告约束

解决方案:让状态更改同时持久保存到事务数据库和多维数据集,在数据持久保存在多维数据集中时对数据进行反规范化(1-2 分钟延迟是可以的)

困境:每个层、Web、应用程序、事务数据库和多维数据集都是水平扩展的,并且存在于不同地理位置的不同场中。

可能的解决方案:
带多播的 MSMQ - 应用服务器在实体状态更改时发送消息,事务性数据库和多维数据集服务接收消息并持续存在。优点:成熟的解决方案,缺点:需要大量硬件和/或许可来确保高可用性 - 翻译:昂贵。

观察者模式 - 使用 .net WCF(呃..)让应用服务器调用数据库服务器订阅的更改事件(观察)。优点:没有额外的硬件,缺点:WCF。

REST Web 服务 - 使用 .net Web 客户端发布到事务数据库和多维数据集,而不是发送消息或调用事件。优点:实现起来超级简单,缺点:需要在数据库端的某个地方安装 IIS,以便应用服务器发布到。

问题 1:我对可能解决方案的假设是否正确?

4

1 回答 1

0

经过大量研究,CQRS 非常适合作为解决方案。至于所有移动部件之间的通信,我必须阅读很多关于企业服务总线 (ESB) http://en.wikipedia.org/wiki/Enterprise_service_bus的内容。在 .net 世界中,nservicebus 似乎很受欢迎,但不是免费的,公共交通是免费的,但我在构建和运行示例时遇到了麻烦。TT

公共交通背后的一个人对消息传递与 Web 服务的一个很好的概述:http: //blip.tv/ineta-live/event-driven-architecture-by-chris-patterson-north-dallas-net-ug- on-02-03-2010-3193457

The ESB uses MSMQ to implement the observer pattern. Throw in a little web services a la cqrs eventstore dispatching to via web service then that means all the resolutions are basically used, but I would leverage open source components.

于 2013-03-07T21:18:38.227 回答