对使用Web服务的基于桌面的客户端进行脱机故障转移的最佳方法是什么?


13

我有三个共享相同问题的新项目:

他们需要在Web系统上具有逻辑,并且他们需要通过RESTful Web服务与此类系统进行通信的本地应用程序(例如销售点)。

我的解决方案

我设法提出的解决方案是在桌面应用程序消息队列中实现,以在服务离线时存储操作,更准确地说是异步消息队列。但是,这很容易(如果这是最佳解决方案)。我还关注数据同步和冲突解决。

主要系统必须基于Web,因为利益相关者需要使用Web应用程序来进行报告和监视,并且Web服务将处理多个机构的请求。

桌面客户端(最好是瘦客户端)将使用Java(更具体地讲是Netbeans)实现,而Web系统将使用Symfony2实现。其中两个项目需要客户端进行硬件集成,因此使用Web技术制作桌面应用程序(例如Appcelerator Titanium)可能会很麻烦。

我的问题

  1. 什么是可扩展的更好解决方案,这意味着以最小的努力获得最高的效率(最好没有额外的成本,例如购买备用服务器进行本地操作)?

  2. 以前还有谁处理过?您是如何解决您的问题的?您可以分享什么课程?

  3. 您如何处理同步?

编辑:在第3点中向我的问题添加了缺失的部分

Answers:


3

我知道您的问题是java,但我真的很喜欢这种消息总线样式的体系结构。

基本上,发送消息时,它们可能会收到两个响应。第一个来自本地缓存,第二个来自服务器,一旦连接成功。

我敢肯定,您可以很轻松地将这种架构(rhino总线和nhib)适应您的架构(MQ和hib)。


是的,我正是在寻找这种面向消息的体系结构。缓存参数和链接中的最后一句使我信服。
dukeofgaming

10

本地执行所有操作,并定期同步

如果您是我,这就是我会做的事情(我不知道Java中的同步框架,就像我们在.NET中一样)。

在本地应用程序中维护一个时间戳,该时间戳将保留您上一次成功连接的时间。

无论您重新连接的时间如何,该时间戳都会用于提取新数据,然后发送本地生成的新订单。

然后,您将维护两个时间戳。一种定义何时创建订单(本地或在线),另一种定义服务器记录订单的时间。

我不建议为此使用消息队列。过去,我曾将MQ用于必须连接到Navision的电子商务网站。一切都在Navision内进行操作,更改通过MQ发送到电子商务网站,包括订单状态以及包括产品说明,价格等在内的所有内容。新订单也通过MQ发送到Navision。


嗯,我确实喜欢推模型的想法,但是我看到一个问题,如果更改计算机时间,可能会丢失数据。顺便说一句,我的惯例是在数据库设计中为每条记录加盖时间戳。为什么不推荐MQ?
dukeofgaming 2011年

没错,您必须使用时间同步的PC和UTC,但是现在这已经非常标准了(至少在Windows上如此)。MQ有时是必需的,但是我认为对于您正在开发的那种应用程序来说,这太过分了。

好的,因此,为了优先考虑可靠性,最好是认为桌面应用程序将断开连接,因此最好将桌面应用程序视为一等公民,但是,我仍然对MQ有印象可以更轻松地替代本地数据库实现。另外,我认为在服务器中隐式执行所有CRUD操作具有更好的安全性。您如何看待这两点?
dukeofgaming 2011年

@dukeofgaming:在我的情况下,可以从任何POS(包括应用程序可以用作接单系统,而不是订单处理系统)中获取订单,包括网络。一切都散布在全国各地。在断开连接的情况下,每个台式机都必须具有自治性。MQ也可以在这种情况下工作,因此我并不反对。我只是觉得在主服务器和客户端之间实现强大的数据同步更加容易。因此,不能在主服务器上进行CRUD操作。

2
+1-这是我过去看过的方式。我还要说,将uniqueidentifier(Guids)用作主键极大地简化了事情。如果您需要同步,那么这样做确实会使您的生活更轻松。
Scott Whitlock

1

或者,您应该查看偶尔连接的系统数据库的实现,这些实现将远程客户端同步到服务器的工作量很大。(SQL Server在一定程度上具有SQL CE,Outlook则具有此功能)。

这样,您可以在小型资源数据库中本地进行所有更改(它维护版本控制/逻辑时间戳等,因此您不必担心PC时钟等),并且每当您联机时,都可以与主数据库同步服务器。

当系统大多数时候不能在线时,我不会选择REST解决方案。


您要描述一个分布式数据库吗?您能详细说明一下吗?
dukeofgaming 2011年

不,这不是现实意义上的分布式数据库。分布式数据库通常也希望几乎所有内容都处于联机状态,但是出现故障的同级之间的复制逻辑也适用于此。有些台式机/设备数据库具有完成复制工作的功能(blogs.msdn.com/b/stevelasker/archive/2007/03/18/…)-因此,您要做的就是设置此设备数据库,在此处记录您的更改,然后在您连接到计算机网络时,调用sync-这将为您进行数据传输到主服务器。
Subu Sankara Subramanian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.