与离线系统同步


9

我正在设计一个系统,通过该系统,我将同步移动设备(具有嵌入式应用程序)中的业务数据,该数据会生成数据并将其发送回服务器。同步的每一行都会在数据库中生成特定的业务日志。

如果我同步的数据生成的日期(在同步数据内)晚于我的业务数据的最后修改日期,则我必须忽略它,而只需在数据库中添加日志即可。处理上载的数据后,将从数据库中获取数据并将其下载到设备。

由于写完后立即下载,同步必须是同步的。如果像这样的东西足以取代我现有的解决方案,那么仍然有可能采用读写器模式。更重要的是能够下载最新数据。该数据是整体获取的,目前没有实现差异(它可能会在以后出现,但这不会成为问题)。

我可能在同一个业务对象上运行多个同步,这不太可能,但是可能会发生,我希望能够处理它。除非使用嵌入式移动应用程序几天不重新同步,否则预计同步将持续几秒钟但不会持续几分钟。

同步处理的数据量预计不会很大。

因此,我最终在我的同步方法上使用了互斥,更确切地说,我正在使用Java,并且在写入方法上放置了同步,而不是整个同步过程都放在不阻止只读同步的位置。

我想知道 :

  1. 这样是否有意义?只要同步过程的数量和时间仍然可以接受。
  2. 一般来说,我应该看什么概念。奖励:Spring模块中是否有这些概念的实现。

是什么导致离线?我的意思是,当设备离线时,意味着仅无法访问服务器还是无法访问Internet?
Laiv

它无法访问互联网。还是不经常。
Walfrat

如果您有多个同步的客户端/服务器,则必须先决定数据的掌握程度,以防万一。如果仅考虑间歇性连接且有多个客户端,则绝对没有办法增量执行此操作。
tofro

就我而言,@ tofro数据管理权很容易确定,因此这不是问题。但是,为什么无法通过间歇性连接逐步进行呢?我不应该只使用上次同步日期吗?对于我而言,使用这种日期的唯一问题是如何知道当前在我的设备上的数据已被移动并且应该在设备上删除。
Walfrat

根据您的描述,我了解到可以在服务器或一个或多个客户端上更改同一数据项。您如何对传送到#1的数据项进行三向同步,然后在服务器上进行更改,然后再到达#2的移动项并在那里进行更改,然后移动#1进行连接(与断开连接的#2进行通信)?
tofro

Answers:


1

一种方法,我一直在调查了一段时间,现在(有一些成功)有客户端数据同步了服务器数据,而不依赖于时间(这可能是不可靠的)或同步请求,是组合JSON补丁(也许是POJO小号(根据您的情况)和事件来源

基本思想是,客户端和服务器不存储客户端和服务器上的当前状态,而是存储更改列表,并通过事件或补丁请求相互发送消息。

因此,与其让客户端向服务器发送所有数据和日期,不如让客户端发送一个事件以及一个修订号,该修订号与客户端最后一次认为数据已更新有关。像这样:

Server.send("MODIFY FOO", 3);

一旦服务器(异步)获得此事件,它将与它可能已经收到的其他事件进行协调。例如,另一个使用相同数据的客户端可能已经修改了某些内容,现在服务器上的修订版本号为5。因此,此修订版本需要在应用最后两个版本之前应用,并且所有需要将此更改通知客户。

服务器完成后,它将通知所有感兴趣的客户端已进行更改以及新的当前修订号。然后,客户端应用这些更改并更新其内部修订号。

您的里程可能会有所不同,但希望对您有所帮助。

编辑:此方法的另一种名称或它的一种变体称为消息队列,如本相关问题所述


系统可能会脱机(无法访问服务器)几天,并且必须注册事件发生的日期,而不是事件与服务器同步的日期。这就是为什么我必须使用日期。我也有一个用于optimisticLocking的修订号,但出于同样的原因,2个设备可以下载POJO的X版本,当它们稍后同步时,每个发送事件都必须生成X + 1和X + 2版本。而且这些设备无法相互通信。
Walfrat

此答案中的修订号始终在服务器中生成,客户端发送旧的修订号,它不需要知道其他客户端,因为修订增量不是它的责任。这个答案没有提到解决冲突,这是建议解决方案中最重要的部分。
Basilevs

0

第一个问题是使用日期作为同步数据的方式。我非常确定我没有获得您解决方案的所有详细信息,但我会这样说:

  1. 是在手机上生成的日期吗?在这种情况下,您确定在手机上运行的应用将始终使用正确的日期吗?如果恶意用户多少能够更改其移动设备上的系统日期,该怎么办?那么在不同时区的用户呢?正如@jeffrey告诉您的那样,也许并不是依靠设备上生成的日期的最佳方法。

  2. 如果我理解正确,则可以使用乐观并发控制。我看不出您的方法存在任何本质上的错误。

  3. 这个问题是关于在Spring中实现乐观锁的。也许您可以从中找到灵感。


我需要记录执行动作的日期,因为这样我就固定了手机的日期。移动日期经常与系统重新同步。只有注册的设备可以与服务器同步。至于安全性,这是现在剩下的另一个问题(X509设备身份验证,...)
Walfrat

日期可以记录为另一个数据字段,无需将其视为同步令牌。
Basilevs '18
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.