分布式系统知识体系庞大而精妙,不花费大量的时间无法掌握。本文根据一些前人经验和自己摸索总结,由浅入深、由基础概念到实际运用,给出了一条学习曲线相对平滑的分布式学习攻略,希望和大家多多交流,共同进步。本篇为基础篇学习,涉及到了数百篇论文及博客资料,需要耐下心慢慢学习才可以体会到其精髓,欲速则不达。

另外,本系列文章在github上优先更新,有空才会更新CSDN的同篇文章,有兴趣的可以关注Awesome-Distributed-System

分布式时钟

在单台机器上,我们很容易的就可以对所有的进程、事务进行排序,因为我们有一个统一的标准:CPU时钟。而对于多台机器,则相对麻烦,因为难免会出现CPU时钟周期不相同、时间延迟、或者人为造成时间的修改等等。为此,在分布式系统中,不同机器通讯的先后顺序是一个比较麻烦的问题。

总的来说,有几种解决方法:

1.同步中央时钟:对多台机器进行同步处理,使其时钟保持一致,如NTP协议。但是这样带来了一些问题,首先需要保持同步则需要定期进行通信,从而增加了额外的时延和带宽消耗。另外,该方法仅针对网络拓扑稳定的环境适用。因为如果有机器不断地增加、减少,是无法保证每台机器CPU时钟周期相同,也无法保证时钟同步。

2.局部排序:对每台机器单独进行排序,采取一些算法使其序列统一。如Lamport Clock,后续的vector clock,以及version clock等。


  • Vector 时钟

    Vector时钟是基于Lamport时钟的改进版本,旨在解决同时发生的事件的情况。


Logo

更多推荐