专栏名称: 架构师之路
架构师之路,坚持撰写接地气的架构文章
目录
相关文章推荐
架构师之路  ·  谁能告诉我:软件测试到底有没有出路? ·  22 小时前  
架构师之路  ·  分布式系统一致性为什么难做? | ... ·  2 天前  
架构师之路  ·  PHP使用local-proxy的一种思路! ... ·  3 天前  
架构师之路  ·  秒杀架构优化,掌握这一个核心原则! | ... ·  1 周前  
美团技术团队  ·  榜单揭晓|2024年美团第二届低空经济智能飞 ... ·  6 天前  
51好读  ›  专栏  ›  架构师之路

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

架构师之路  · 公众号  · 架构  · 2024-12-10 12:14

正文

《架构师之路:架构设计中的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两章。

==全文完==


20年,系列1:
流量从10万到10亿,遇见的80个架构问题》
以实践为主线,结合讲解架构知识点几十个小时视频内容,已完结

今年,系列3:
《架构设计中的100个知识点》
架构知识点为主线,结合讲实践。讲解形式:短视频+图文+直播+星球社群,免费欢迎感兴趣的童鞋关注。
第22集:日志上报里的架构设计点

宝藏号,置顶标星日更好文。
点赞,转发,在看三连。感谢!