背景:MVC 应用每秒有 100 多个事务,需要详细的实时报告。
问题:针对事务数据库进行报告意味着复杂的报告逻辑 + 缓慢的报告加载时间。大型报告会对交易流程产生负面影响。定期将数据拉入非规范化的多维数据集违反了实时报告约束
解决方案:让状态更改同时持久保存到事务数据库和多维数据集,在数据持久保存在多维数据集中时对数据进行反规范化(1-2 分钟延迟是可以的)
困境:每个层、Web、应用程序、事务数据库和多维数据集都是水平扩展的,并且存在于不同地理位置的不同场中。
可能的解决方案:
带多播的 MSMQ - 应用服务器在实体状态更改时发送消息,事务性数据库和多维数据集服务接收消息并持续存在。优点:成熟的解决方案,缺点:需要大量硬件和/或许可来确保高可用性 - 翻译:昂贵。
观察者模式 - 使用 .net WCF(呃..)让应用服务器调用数据库服务器订阅的更改事件(观察)。优点:没有额外的硬件,缺点:WCF。
REST Web 服务 - 使用 .net Web 客户端发布到事务数据库和多维数据集,而不是发送消息或调用事件。优点:实现起来超级简单,缺点:需要在数据库端的某个地方安装 IIS,以便应用服务器发布到。
问题 1:我对可能解决方案的假设是否正确?