关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »分布式系统中的数据同步

    分布式系统中的数据同步

    2014-10-10 00:00:00 出处:InfoQ
    分享

    许多人在日常工作中都会用到分布式系统,它的好处就是它所提供的稳定性,容错性以及伸缩性使我们能更容易地构建出稳定,高效的应用。然而分布式系统的使用非常具有挑战性,包括数据同步以及理解冲突的意义。

    分布式系统中的数据同步本身就是一项非常巨大的挑战。假如光看物理时间戳的话我们无法确定哪个版本的数据才是最新的,因为你无法确保所有的实体的物理时钟都是完美同步的。比如说,两台同步的服务器将时间戳写入到同一个系统中。假如一台服务器慢了哪怕只有几毫秒,很快它就无法得知事件的真实顺序了。为了解决这一问题,我们可以采用基于事件的逻辑时钟而不是真实时间来构建出部分有序的集合。

    你可以认为逻辑时钟就是标明系统中的事件的版本的一种方式。通过查看这些有序的集合,我们就能同步系统中的数据,因为我们可以知道哪些数据是最新的,并且可以识别出哪些事件是并发的。

    我承认当我第一次听说“向量时钟”或者”Lamport时间戳”这个概念时,我发现它们其实是一些我无法理解的荒唐的数学算法。或许更重要的是,出于恐惧,我在逃避去学习它们。所幸的是,我发现它们其实要比我想像的简单得多。我们来一窥它底层的奥秘并看看它是如何工作的。

    Lamport时间戳

    Lamport时间戳由Leslie Lamport于21世纪初所发明,是这两者中较简单的一个了。系统中的每个实体都有一个自己的计数器,在处理事件前它会对将该值递增,当它需要和其它实体进行同步的时候也会把这个时间戳带上。再强调一次,这里的时间戳并不是物理时间戳(比如说今天下午1点),而是一些数字,它们只要当和同一系统中的其它时间戳进行比较时才有意义。

    假设我们有一个包含三个节点的分布式系统,每个节点都独立地处理事件:

    在这个时候,节点1和节点3已经处理了事件A和事件B,并把它们对应的Lamport时间戳增加到了1。但是它们还没有和节点2进行同步,所以我们先继续往下走:

    现在节点1和节点3已经同步了,节点1还把自己的时间戳同步了过去,将节点2的时间戳增加到1。我们再往前走一步:

    节点3已经处理了2个事件(D和E),并和其它两个节点进行了同步。注意到节点2的Lamport时间戳增加到了3,因为事件E的时间戳已经是3了,所以它直接跳过了2,选择了一个更高的值。

    现在我们的节点已经完全同步了,不过这些时间戳能说明什么呢?Lamport证明这个理论的过程“非常深奥”,因此我们这里不会介绍这个算法的细节了,不过我们知道在Lamport的因果关系中,事件B在D之前到达,E发生在F之前,而F发生在G之前。

    不幸的是,由于我们没有存储其它节点的状态,因此有些事情我们是无法知道的。比如说,我们无法得知C是在B之前或者之后发生的,或者说它们是并发的。要想知道这些信息,我们得用到向量时钟。

    向量时钟

    Colin Fidge和Freiedemann Mattern在1988年分别提出了向量时钟的概念,和Lamport时间戳相比,它能提供能详细的信息,也被应用于Riak等系统之中。和Lamport中每个实体分别存储自己的时间戳不同的是,它存储的是时间戳的向量,向量的大小等于系统中实体的数量。每个实体都清楚自己在向量中的位置,以及最后一次同步时它的兄弟节点的时钟。你可以把它看作是这个实体对系统的其它部分的认知的一项记录。

    记住,同步事件里面包含发送者的向量时钟。算法通过比较这些时钟,可以更好地确定事件的出现顺序。它会按照下面的规则来比较向量时钟里的每个元素:

    假如事件X的所有时间戳都小于或等于事件Y的时间戳,则X事件在Y事件之前发生,它们不是并发的:

    假如事件X的所有时间戳都大于或于Y的,那么Y在X之前到来,它们也不是并发的:

    假如X的某些时间戳早于Y的,某些又晚于Y,那么这两个事件就认为是并发的,我们无法区分它们的顺序:

    了解了这些规则,我们再来看一下前面那个Lamport时间戳的例子,这次我们用的是向量时钟:

    使用Lamport时间戳,我们无法确定是否C在B之前发生,但根据向量时钟的最后一条规则,现在我们知道它们实际上是并发的事件。这说明它们是几乎在同一个时间发生的。

    向量时钟并非万能的,比如说,他们无法对所有的事件进行排序,因为我们只做到了部分有序——正如前例中的那样,我们只是知道这些事件在同一个时间点发生。因此可以由此检测出并发的写操作,但也正因如此,它们的顺序是无法确定的。

    结论

    希望现在你能对分布式系统的同步存在的一些独特的挑战能有一个更深入的理解,至少你知道了解决这些问题的一种方式。

    在这里更有趣的一点收获就是,你没费多大劲就了解到了你所使用的系统中的最复杂的一部分。当然了,你可能永远也不会自己去写一个向量时钟系统,但这并不重要。重要的是我故意去逃避的那部分难以理解的东西恰恰影响到了我的码农之路。攻克一些难关,深入地理解它们,我相信你一定会学到一些东西的。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。