前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >分布式系统一致性为什么难做? | 架构师之路(20)

分布式系统一致性为什么难做? | 架构师之路(20)

作者头像
架构师之路
发布2024-12-24 13:15:10
发布2024-12-24 13:15:10
820
举报
文章被收录于专栏:架构师之路架构师之路

《架构师之路:架构设计中的100个知识点》 20.分布式系统一致性与全局时钟

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

因为没有全局时钟。

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

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

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

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

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

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

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

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

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

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

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

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

可以发包测量。

大致的原理是这样的:

如上图所示:

1. 服务器A记录一个本地时间Ta1,然后向服务器B发送一个报文;

2. 服务器B接收到报文后记录一个本地时间Tb,然后回复一个报文;

3. 服务器A接收到回复后再记录一个本地时间Ta2;

假设报文往返耗时是相同的,那么报文从A到B的单程传输时间是:

x = (Ta2 - Ta1)/2

服务器A与服务器B的绝对时间是相同的,那么:

Tb = Ta1 + x

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

Tb - (Ta1+x)

测量完毕。

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

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

NTP的核心原理也是如此。

知其然,知其所以然。

思路比结论更重要。

补充阅读材料:

《系统性介绍NTP》

https://www.ntp.org/ntpfaq/

1. 前言

2. 计算机需要什么时间(Time)

3. 计算机时钟(Clocks)工作原理

4. 什么是NTP

5. NTP的工作原理(How works)

6. 配置(Configuration)

7. 参考(Reference)

8. 排错(Troubleshooting)

9. 其他

10. 总结

画外音:没时间就看4-5两章。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档