我们有一个核心银行产品开发与ASP.NET与C#使用2008数据库。产品托管在集中式服务器上,并且在连接良好和稳定的所有位置(银行分支机构)运行良好。
我们需要在连接性始终是一个问题的地区实现这一解决方案。由于它是一个核心银行解决方案,因此不应该因为技术问题(即连接性)而导致任何服务失效。
如何设计这方面的体系结构,并确保在任何给定时间点不存在事务问题,同时集中数据库包含来自所有分支的最新数据?
发布于 2013-08-27 12:37:07
如何设计这方面的体系结构,并确保在任何给定时间点不存在事务问题,同时集中数据库包含来自所有分支的最新数据?
简而言之:对于分支之间严重的网络连接问题,不可能有一个实时的解决方案。
然而,作为一种折衷的解决方案,当网络连接稳定时,您可能会在中央数据库/存储库上出现夜间的“数据同步过程”。缺点是在中央数据库中有一个为期一天的信息。对于报告目的来说,这仍然是一个很好的解决方案,但是对于transactionl实时解决方案来说,这是不够的。
作为一种额外的思考,您可以考虑分布式排队方法,因为它会在连接丢失或不稳定的情况下将请求堆积到主中心服务器。一旦网络连接起来,它就会按顺序发送它们。
总的来说,这需要一种折衷方案,而不是解决存在连接问题的系统的实时解决方案。
发布于 2013-08-27 14:15:18
除了可能设计一夜同步进程之外,另一种选择可能是使用分布式队列方法。也就是说,当连接下降时,分支站点上的队列可以排队,而当连接停止时,这些请求可以由接收系统去排队。这篇文章提供了相当好的概述。有许多支持此功能的产品/项目--一些可能性包括Apache ActiveMQ、RabbitMQ和MSMQ。在这种情况下,MSMQ可能是最相关的。
从前端应用程序的角度来看,您需要为这种异步操作进行设计。也就是说,当事务放在队列上时,应用程序需要考虑事务的完成,并且假设队列是完全可靠的。
至于中心位置,在网络可用性的情况下,它将始终拥有可用的最新信息,这取决于处理排队请求所需的时间所带来的任何滞后。如果网络不可靠,这是在最近的信息方面所能做的最好的事情。
除了处理网络连接之外,这类异步队列可能由于一系列原因而有用,并且是一种有用的模式。例如,它可以有效地平滑一个系统的负载,该系统服务于多个不需要立即响应的请求者的工作。在这种情况下,“服务器”不需要在加载时处理所有负载,这样您就可以更有效地利用资源,而不是指定服务器来处理“高峰”负载,而大多数情况下都处于空闲状态。
发布于 2013-08-27 16:49:28
我不知道它是否满足了您对实时事务的需求,但您可能需要考虑使用Server复制。
您可以在远程位置运行Web服务器和Server。那里的用户将连接到该实例。使用复制,Server将使两个位置之间的数据保持同步。如果连接下降,SQL Server将在连接再次可用时处理对齐数据。
在不了解所有需求或访问Server许可证的情况下,我不能保证这是对您最好的解决方案。但这可能是你想要调查的。
如果它满足您的需要,它将是一个不需要任何额外开发的解决方案。
https://softwareengineering.stackexchange.com/questions/209581
复制相似问题