基于时间戳的同步的常见缺陷是什么?

时间:2010-11-15 16:31:27

标签: cocoa git ios sync

我正在实施我的第一个同步代码。在我的情况下,我将为每个用户提供2种类型的iOS客户端,它们将使用lastSyncTimestamp将记录同步到服务器,这是一个64位整数,表示上一次同步的毫秒时间内的Unix时期。可以随时在服务器或客户端上创建记录,并通过HTTP将记录作为JSON进行交换。

我并不担心冲突,因为很少有更新,并且总是来自同一个用户。但是,我想知道是否有一些我需要注意的常见问题,基于时间戳的方法可能会出错,例如在夏令时期间同步,同步与另一个或其他陷阱发生冲突。

我知道git和其他一些版本控制系统避免与基于内容的协商同步方法的时间戳同步。我可以想象我的应用程序的这种方法,使用对象的uuidhash,两个对等方都宣布它们拥有哪些对象,然后交换它们直到两个对等方具有相同的集合。 / p>

如果有人知道基于内容的同步与基于时间戳的同步的任何优点或缺点,那么这也是有帮助的。

编辑 - 以下是我为时间戳和基于内容的同步提出的一些优点/缺点。请挑战/纠正。

注意 - 我将基于内容的同步定义为两组对象的简单协商,例如如果你给两个孩子交换卡片的两个相同组合的每个部分,他们将如何交换卡片棒球卡片告诉他们,当他们看透他们宣布并交出任何重复时他们发现对方,直到他们都有相同的集合。

  • 约翰尼 - “我拿到了这张卡片。”
  • 戴维 - “我收到了这一堆卡片。给我那张卡片。”
  • 约翰尼 - “这是你的卡片。给我一堆卡片。”
  • 戴维 - “这是你的一堆卡片。”
  • ....
  • 两者 - “我们完成了”

基于时间戳的同步的优势

  • 易于实施
  • 用于同步的单一属性。

基于时间戳的同步的缺点

  • 时间是观察者的相对概念,不同机器的时钟可能不同步。有几种方法可以解决这个问题。在单台机器上生成时间戳,该机器不能很好地扩展并表示单点故障。或者使用矢量时钟等逻辑时钟。对于构建自己的系统的普通开发人员来说,矢量时钟可能太复杂而无法实现。
  • 基于时间戳的同步适用于客户端到主同步,但对于对等同步或两个主人可以进行同步的情况不起作用。
  • 单点故障,无论是什么产生时间戳。
  • 时间与正在同步的内容并不真正相关。

基于内容的同步的优势

  • 不需要维护每个对等时间戳。 2个对等方可以启动同步会话并根据内容开始同步。
  • 明确定义的端点要同步 - 当双方都有相同的集合时。
  • 允许对等体系结构,任何对等体都可以充当客户端或服务器,只要它们可以托管HTTP服务器。
  • 同步适用于集合的内容,而不是抽象的概念时间。
  • 由于同步是围绕内容构建的,因此如果需要,可以使用同步进行内容验证。例如。可以在内容上计算SHA-1哈希并将其用作uuid。它可以与同步期间发送的内容进行比较。
  • 更进一步,SHA-1哈希可以基于以前的哈希值来保持一致的内容历史记录。

基于内容的同步的缺点

  • 可能需要实现对象的额外属性。
  • 与基于时间戳的同步相比,双方的逻辑更多。
  • 稍微繁琐的协议(可以通过同步群集中的内容来调整)。

3 个答案:

答案 0 :(得分:7)

部分问题在于时间不是绝对的概念。事物之前或之后发生的事情是一个透视问题,而不是遵守挂钟。

relativity of simultaneity上阅读一下,了解为什么人们已经停止尝试使用墙上时间来解决这些问题,并使用vector clocks(或至少{{}转移到代表实际因果关系的结构中3}})。

如果您想使用时钟进行同步,逻辑时钟可能最适合您。您将避免所有时钟同步问题和事情。

答案 1 :(得分:2)

我不知道它是否适用于您的环境,但您可能会考虑哪个时间是“正确的”,客户端或服务器(或者甚至是否重要)?如果所有客户端和所有服务器未同步到同一时间源,则在使用客户端的“现在”时间同步到服务器(或从服务器)同步时,客户端可能会有轻微的意外结果。

几年前,我们的开发组织遇到了一些问题。开发人员机器并非都与SCM所在的服务器同步到同一时间源(并且可能未与任何时间源同步,因此开发人员机器时间可能会漂移)。几个月后,开发者机器可能会休息几分钟。我不记得所有的问题,但似乎构建过程试图从一定时间(最后一次构建)以后修改所有文件。自上次构建以来,文件可能已经签入,它具有在上次构建之前发生的修改时间(来自客户端)。

可能是我们的SCM程序不是很好,或者我们的SCM系统或构建过程过于容易受到这个问题的影响。即使在今天,我们所有的开发机器都应该与具有SCM系统的服务器同步时间。

同样,这是在几年前,我不记得细节,但我想提一下它在你的情况下是否重要的​​可能性。

答案 2 :(得分:0)

您可以查看unison。它是基于文件的,但您可能会发现一些有趣的想法。