分布式系统一致性为什么难做?

开发 架构
每台服务器都有自己的本地时钟,跨服务器的本地时钟相比较是没有意义的。这就导致分布式系统时序成为了一个难题,一致性也就变得十分困难。

分布式系统一致性为什么难做?

因为没有全局时钟。

“没有全局时钟”是什么意思?

每台服务器都有自己的本地时钟,跨服务器的本地时钟相比较是没有意义的。

即使服务器A的本地时间Ta,小于,服务器B的本地时间Tb,我们也不能说Ta一定比Tb早发生,因为两台服务器之间的本地时间会有差异。

这就导致分布式系统时序成为了一个难题,一致性也就变得十分困难。

关于全局时钟,工程架构上有什么最佳实践吗?

其一,经常使用单点串行化,保证时序。

例如:MySQL以主节点操作时序为准,序列化为binlog后,同步到从节点执行。

其二,可以使用单点发号器,模拟全局时钟。

所有操作执行前,到发号器上领取一个递增的时间戳,作为时序依据。单点发号器的时间戳比较,就变得有意义了。

其三,可以使用NTP协议尽量缩小服务器之间的差,但即使使用了NTP,仍然无法保证绝对时序。

画外音:NTP,Network Time Protocol,用于计算机网络时间同步的标准协议。

那如何测量两台服务器之间的时间差呢?

可以发包测量。

大致的原理是这样的:

如上图所示:

  • 服务器A记录一个本地时间Ta1,然后向服务器B发送一个报文;
  • 服务器B接收到报文后记录一个本地时间Tb,然后回复一个报文;
  • 服务器A接收到回复后再记录一个本地时间Ta2;

假设报文往返耗时是相同的,那么报文从A到B的单程传输时间是:x = (Ta2 - Ta1)/2

服务器A与服务器B的绝对时间是相同的,那么:Tb = Ta1 + x

可实际上,服务器A与服务器B存在一个时间差,Tb 并不完全等于 Ta1 + x,那么服务器AB之间的时间差就是:Tb - (Ta1+x)

测量完毕。

报文网络传输会不会有较大波动?

怕一次波动?那就测一亿次取平均。

NTP的核心原理也是如此。

知其然,知其所以然。

思路比结论更重要。

责任编辑:赵宁宁 来源: 架构师之路
相关推荐

2017-09-22 12:08:01

数据库分布式系统互联网

2017-04-06 11:59:19

分布式服务化系统

2019-10-11 23:27:19

分布式一致性算法开发

2021-07-28 08:39:25

分布式架构系统

2017-09-21 10:59:36

分布式系统线性一致性测试

2018-03-19 09:50:50

分布式存储系统

2020-05-29 14:46:23

3PC协议分布式系统

2019-09-05 08:43:34

微服务分布式一致性数据共享

2021-11-22 16:30:30

分布式一致性分布式系统

2021-06-03 15:27:31

RaftSOFAJRaft

2022-06-07 12:08:10

Paxos算法

2024-11-28 10:56:55

2021-10-27 10:55:29

分布式

2020-05-07 11:58:07

分布式系统架构

2021-06-06 12:45:41

分布式CAPBASE

2023-11-06 09:06:54

分布式一致性数据

2020-10-28 11:15:24

EPaxos分布式性算法

2021-08-13 11:50:23

AnalyticDB 分布式数据库

2015-10-19 10:42:37

分布式一致性应用系统

2024-05-30 07:00:51

点赞
收藏

51CTO技术栈公众号