2010-03-16 35 views
2

我需要开发将用于多个位置的销售点应用程序。在每个位置它将使用一个单独的数据库,并且在另一个位置将有一个主数据库,其中包含所有现金流和库存移动。限制是节点之间的可用互联网连接非常差,因此在某些情况下,大多数时间所有地点都将脱机工作,也就是说,没有互联网连接,并且当连接将再次可用时,将与主数据库。销售点应用程序架构建议

我正在考虑在每个位置开发一个带有单个数据库的体系结构,并实现master db和其他db之间的复制,但是当互联网连接在节点中脱机时,它们需要继续在脱机模式下工作,直到互联网连接将再次可用。我不确定复制是否是此架构的正确方法,因为节点将插入和更新本地数据库,并需要将现金流数据和清单数据传播到主数据库和其他节点。

在这个模式中什么是正确的方法?

我打算使用的dotnet和MSSQL服务器2K8

问候

+0

只有标题相关:http://stackoverflow.com/questions/2448769 – 2010-03-16 13:31:57

+0

@亨克:坏链接 - 没有答案,除了聪明的屁股评论的链接! – t0mm13b 2010-03-16 14:04:44

+0

“其他数据库”是否需要完整的数据库,或只是其中的一部分? – 2010-03-16 14:07:19

回答

4

我会考虑排队系统作为替代到本地数据库。我希望这样的产品提供功能,一旦连接可用,就自动开始传输消息。但这实际上只是一个技术问题。

几件事情构建架构时应该考虑:

  • 是关于如何不同步的应用程序被允许获得有限制?例如。当你的应用程序没有连接到主人一个月,仍然应该顺利运行?您必须允许客户端提供适当的存储功能,并在达到阈值时提升问题的发生方式。

  • 你一定会得到冲突。例如。当你接受订单时,它可能会在客户端上停留4个小时,当它最终到达服务器时,订购的产品可能不再存在。在可能出错的地方获得创意,并定义这些案例应该如何解决。

  • 确保您有合适的日志记录,特别是对于正在穿越连接的东西。您应该能够轻松找到与同一业务事务相关的服务器和客户端上的日志信息。

  • 确保你可以测试你的组件,没有其他的。

  • 当然,在分布式系统中,您必须访问客户端的可信度。即你怎么能断言来自服务器或客户端的消息确实来自客户端,而不是由某人或其他人伪造的。

  • 明确地量化你有多少可用的带宽,所以你可以确保所有需要的数据真正适合。许多小型交易可能会有所帮助,因为它们不太可能因连接中断而中断。

您也可能会发现this book有用

+0

+1好答案!我有一个相关的问题:http://stackoverflow.com/questions/2586199/how-to-design-a-distributed-application-using-a-message-broker-and-a-database – Jonas 2010-04-06 16:43:32

2

一对夫妇,我可以和你们在设计基础设施共享的提示,但首先你需要确定的第一个重要第一个因素 - 安全,我将强调这个场景和我的经验。

安全显然会从某种程度上从头开始。想一想 - 在每个位置都有一个数据库的方法是NO-NO。因为a)股票控制 - 如果股票控制将被本地化,那么为了“人为地”夸大销售交易的利润/损失余额,可能会发生小提琴非常有可能发生。 b)在某些情况下,即使包装完全相同,产品的价格可能为两种或两种,同一条形码或不同条形码 - 这可能很容易发生 - 您扫描某物,发誓它在系统中,并最终浪费时间试图弄清楚,直到条形码发生变化。 c)该产品可以具有相同的条形码,但价格将会改变以反映市场状况 - 这可能会导致试图确定是否将现有库存标记为新价格,等到旧的股票枯竭,然后投入价格变化。

这会带来一个多毛的情况,如何处理这个问题以及该怎么做 - 因此必须强制实施安全措施 - 而不是通过计算机,而是通过人类来实现一个简单的人为错误,例如接收外部产品具有相同的条形码,但价格要么增加/减少,要么放在架子上......这可能会造成不便,并妨碍客户购买产品,转到柜台,扫描,支付现金等POS流量。你得到漂移。

因此,这是安全措施必须从头开始的地方,您必须非常小心地将其设计为正确设计,因为设计不正确的POS(即使它工作正常)会导致收银员摆弄股票水平,利润/损失,从POS拿取现金......此外,如何对POS来自现金流的安全性进行强制执行......考虑一下......小提琴可以在那里发生.. 。通过完全绕过POS系统并将现金放入口袋里...

如何与主系统同步,这将需要在工作时间以外完成,具体取决于提交的交易次数,此外同步操作可能需要时间,因此在工作时间之外,在客户等待购买付款的白天运行。

如果'我的数据库被锁定 - 很好,很好',安全性也需要考虑,但是如何传输数据,可以很容易地被拦截......无论你说什么, 永远是一个精通技术的操作员操作POS ......如果POS系统本身出现问题,操作员可能会与外部人员“咨询”以解决问题,因为他们可能会觉得像'我不想费尽口舌支持团队 - 他们可能是生病了我缠着他们”,这强调并总结了一些事情:

  1. 安全,从根本上
  2. 培训,必须严格随访,常识
  3. 如有疑问请前辈......有些居然也懒得做,并承担经营者知道他们在做什么...
  4. 需要消除POS不受控制的人为错误和条件,产品价格的市场波动,条码错误
  5. 最后但并非最不重要的一点是,设计界面尽可能简单友好,并且不会造成任何挫折,例如拒绝接受输入等...你得到漂移...
0

你需要的是一个本地缓存与中央数据库同步异步。

您提出的本地数据库只是这种缓存的可能实现。还有其他选项,如消息队列或者甚至可能是简单的文本文件。

这样做与原始数据库复制杀死任何手段进行健全检查任何进入中央数据库。我宁愿建议在应用程序逻辑中构建同步功能。

1

您可能想要将IBM的Retail Integration Framework和IBM WebSphere Remote Server看作软件包。基本上它使用Message Queue进行同步....与本地数据库和应用程序服务器存储在一起。这就是沃尔玛,塔吉特,克罗格......都做的。