时钟同步
时钟同步(Clock synchronization)是计算机科学与工程学中的一个概念,旨在协调多个独立的时钟。现实中的多个时钟,即使时间已调至一致,但在一段时间后依然会因为时钟漂移而显示不同的时间,因为它们计时的速率会略有差异。时钟计时速率的差异会造成多种问题,但已有多种解决方案,最佳的解决方案须由实际情况决定。[1]
术语
在串行通信中,时钟同步可以指代时钟恢复,即频率同步,与相位同步相对。这种时钟同步被用在电信通信中的同步电信通信中的同步与波特率自动检测波特率自动检测。[2]
准同步或等时操作指一个系统具有频率同步,但并没有严格要求相位同步。同步操作对时间(可能包括频率)具有更高的同步要求。
问题
如果无法在更小的尺度管理时间,在具有较高时间同步要求的分布式计算中,会产生许多因时间偏移引发的问题。
例如,在 Unix 系统中,make 命令可用于增量编译代码,并避免编译已经编译过且未发生改变的代码。make 命令使用主机的时钟来确定哪些源代码需要编译,如果源代码处于另一台单独的文件服务器上,而两者时钟不一致,make 就可能导致错误的结果。[3]
解决方案
在一个具有中心服务器的系统中,同步方案较为简单:由这个中心服务器指示时间。在这种环境中,Cristian 算法或 Berkeley 算法可能是最佳的解决方案。
在分布式系统中,问题变得更为复杂,因为并没有全局通用的时间。在互联网上最常用的时钟同步协议是 NTP,采用 UDP 通信,并形成层级的客户端 - 服务端架构。分布式系统的逻辑时钟涉及到的概念包括 Lamport 时间戳与向量时钟。
在无线网络中,因为其不稳定性,包括同步数据包的碰撞等,这一问题变得更为艰难。[4][5]
Berkeley 算法
Berkeley 算法 适用于无线电时钟(radio clock)不可用的分布式系统,此类系统无法得知真实时间,只能通过维护一个全局的平均时间作为标准时间。一台时间服务器会周期性地获取各个客户端上的时间,将其平均处理后,回传每个客户端的时间与平均时间的偏移,以达到统一使用此平均时间的目的。此算法适用于不仅时间可能不一致,时钟速率也可能不一致的系统。
如果一个客户端的时间偏移过大,超出了容忍值,则通常不会参与平均时间的计算。如此可以防止系统的时间被单个异常的时钟过度影响。
参考文献
- Tanenbaum, Andrew S.; van Steen, Maarten, , Prentice Hall, 2002, ISBN 0-13-088893-1
- Norman Matloff, (PDF), September 3, 2001 [2018-04-17], (原始内容存档 (PDF)于2020-09-22)
- Marco Platania. (PDF): 11. 2018-06-03 [2018-08-25]. (原始内容存档 (PDF)于2020-09-22).
- Maróti, Miklós; Kusy, Branislav; Simon, Gyula; Lédeczi, Ákos. . Proceedings of the 2nd International Conference on Embedded Networked Sensor Systems. SenSys '04 (New York, NY, USA: ACM). 2004: 39–49. ISBN 1581138792. doi:10.1145/1031495.1031501.
- Koo, Jinkyu; Panta, Rajesh K.; Bagchi, Saurabh; Montestruque, Luis. . Proceedings of the 7th ACM Conference on Embedded Networked Sensor Systems. SenSys '09 (New York, NY, USA: ACM). 2009: 239–252. ISBN 9781605585192. doi:10.1145/1644038.1644062.