免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

数据中心的容错时钟对时 · OSDI 2020

  • 2021-03-18
  • 本文字数:2093 字

    阅读完需:约 7 分钟

数据中心的容错时钟对时 · OSDI 2020

『看看论文』是一系列分析计算机和软件工程领域论文的文章,我们在这个系列的每一篇文章中都会阅读一篇来自 OSDI、SOSP 等顶会中的论文,这里不会事无巨细地介绍所有的细节,而是会筛选论文中的关键内容,如果你对相关的论文非常感兴趣,可以直接点击链接阅读原文。


本文要介绍的是 2020 年 OSDI 期刊中的论文 —— Sundial: Fault-tolerant Clock Synchronization for Datacenters1,该论文实现的 Sundial 可以在数据中心提供高精度的、容错的对时机制。在数据中心发生故障时,它也能够保证不同服务器的绝对时间差小于 ~100ns,比行业内的其他的系统好一到两个数量级,这里的 ~100ns 也被称为时间不确定性上限(Time-uncertainty Bound)。


我们在这里会先介绍论文中提到的时间不确定性上限,在最后会介绍 Sundial 的系统架构,包含对时频率和错误恢复两方面的设计。

时间不确定性上限

时间不确定性上限是个非常有趣的概念,假设我们有以下两台服务器,两台服务器本地的绝对时间包含一定的差异,其中服务器 A 在 X 时间从数据库中使用时间戳 T 读取数据,而服务器 B 在随后的 Y 时间使用时间戳 T-1 向数据库写入数据:



图 1 - 时间不确定性上限

从整体上看,因为不同服务器绝对时间上的微弱差异,后发生的时间反而使用了更早的时间戳,这就带来了潜在的问题。但是如果我们能够确定不同服务器之间绝对时间的最大差值,让服务器在读取数据时等待一段时间,就可以保证读写操作时序的正确性,这里的等待时间就是上面提到的时间不确定性上限,该值越小,系统的响应速度也就越快。


很多系统都对时间不确定性上限有要求,例如:分布式的事务数据库、一致性快照、网络遥测、单向延迟和分布式日志等,它的值越小,系统就能提供更好的性能、更快的响应速度和更强的一致性。

系统架构设计

Sundial 使用软硬件结合的方式设计,其中包含如下图所示的三个主要组件,它会在硬件中完成同步时间信息、检测系统中错误等重要功能,软件负责计算同步生成树并故障时触发错误恢复机制:



图 2 - Sundial 框架

Sundial 论文从软件和硬件的维度介绍它的设计与实现原理,不过这里从时钟同步和错误恢复的功能维度介绍该系统的设计,

时钟同步

Sundial 中的时钟同步机制与 SDN 的数据平面与控制平面很相似,其中作为控制平面的控制器会在初始化时计算所有服务器的之间的时钟同步关系以及备选的同步路径,而作为数据面板的服务器会负责同步时间。如下所示,在节点正常工作时,根节点 0 的时间会同步给节点 4 和节点 6,而节点 1 会从节点 4 获取最新的时间:



图 3 - 同步生成树

因为服务器本地用于计时的石英晶体谐振器(Crystal Oscillator)会受数据中心温度、电压变化的影响会变得不再准确,不同时钟的差异会变得越来越大,所以硬件需要每隔 100µs 触发时间同步,同步消息会沿着控制器计算的生成树同步向下传递,一旦收到时间同步消息就会发送给其他节点。


虽然同步的频率异常频繁并且该数据包的优先级非常高,但是因为每个数据包的大小只有 100 字节,所以这只会占用网络整体带宽的 0.01%,最多只会为其他数据包增加 10ns 的网络延迟。

错误恢复

为了发现同步生成树中的节点错误,Sundial 需要软件和硬件的一同配合,其中硬件会使用超时时间检测上游发送的同步数据包,一旦发生超时或者检测到上游发出的时间不在预期的范围之内,硬件就会触发软件的错误恢复处理机制。



图 4 - 错误恢复

正如我们在上一节中提到的,中心化的控制器会为非根节点提供用于错误恢复的备选路径,在计算主要同步路径和备选同步路径时需要遵循多个条件以提高备选路径的可用性,这里就不展开介绍了,熟悉图算法并且感兴趣的读者可以直接阅读论文了解相关内容。上面所有的备选路径都是由中心控制器计算并且存储在硬件本地的,这样在发生故障时可以迅速从本地错误中恢复。

总结

精确的绝对时间虽然看起来距离我们很远,但是实际上有非常大的作用,Sundial 论文提出的技术能够为数据中心的服务器提供更准确的绝对时间,更准确的事件和更低的时间不确定性上限让 Spanner 数据库的提交等待延迟降低了 70% ~ 80%,中位数从 211µs 降低到了 49µs,99 分位数也降低了 ~550µs:

BaselineWith Sundial
中位数211µs49µs
99 分位数784µs238µs

表 1 - Spanner 提交等待延迟性能提升


大多数系统中并不需要用到如此复杂的系统同步时间,我们只需要使用 RFC5905 中的 NTP 协议就可以获得毫秒级精度的时间2,虽然这与纳秒级别的时间有几个数量级的差距,但是在多数场景下都可以满足需求了。


推荐阅读


  1. Yuliang Li, Gautam Kumar, Hema Hariharan, Hassan Wassel, Peter Hochschild, Dave Platt, Simon Sabato, Minlan Yu, Nandita Dukkipati, Prashant Chandra, Amin Vahdat. 2020. Sundial: Fault-tolerant Clock Synchronization for Datacenters. In Proceedings of the 13th USENIX conference on Operating Systems Design and Implementation (OSDI'20). USENIX Association, USA, 1171-1186. ↩︎

  2. RFC 5905 - Network Time Protocol Version 4 - IETF Tools https://tools.ietf.org/html/rfc5905 ↩︎


本文转载自:Draveness

原文链接:数据中心的容错时钟对时 · OSDI 2020

2021-03-18 07:00981

评论

发布
暂无评论
发现更多内容

「正确」的使用Kotlin Flow进行搜索优化

android 程序员 移动开发

[译] 如何用 Flutter 来创建一个带有底部导航栏的应用程序

android 程序员 移动开发

[译] 轻松发布私有 App

android 程序员 移动开发

《近匠》棱镜:手游渠道SDK平台的技术历程

android 程序员 移动开发

webview最全面总结(二)全面介绍webview用法

android 程序员 移动开发

【CSDN插件测评】效率增倍,程序猿开发必备插件

android 程序员 移动开发

webRTC(十四):webrtc 端到端文本聊天

android 程序员 移动开发

【Android进阶学习】Android-广播接收器(Broadcast-Receivers)

android 程序员 移动开发

【Android FrameWork】综合面试问题

android 程序员 移动开发

vue学习(三)—vue

android 程序员 移动开发

[译] 使用自定义文件模板加快你的应用开发速度

android 程序员 移动开发

【Android进阶笔记】虚拟机(Dalvik

android 程序员 移动开发

【Android-Jetpack】Lifecycle-从入门到精通

android 程序员 移动开发

【Android】仿斗鱼滑动拼图验证码控件

android 程序员 移动开发

【Android面试查漏补缺】之Handler详解,带你全面理解Handler消息机制

android 程序员 移动开发

“你们程序员不就是修电脑的吗,你牛什么牛?

android 程序员 移动开发

《Head First 设计模式学习记录-终篇亦非终篇》

android 程序员 移动开发

《基于Android微博整合客户端的设计与实现》毕业设计中期考核表

android 程序员 移动开发

[译] Android 的多摄像头支持

android 程序员 移动开发

[译] 如何将 Stackdriver 连接到智能家居服务器以进行错误记录

android 程序员 移动开发

整个大活,采集8个代理IP站点,为Python代理池铺路,爬虫120例之第15例

梦想橡皮擦

11月日更

[译]利用 Android 构建 TV 的未来

android 程序员 移动开发

“你们程序员不就是修电脑的吗,你牛什么牛?(1)

android 程序员 移动开发

WebSocket学习

android 程序员 移动开发

windows环境下JSP环境搭建:Apache2

android 程序员 移动开发

[译] Android 中的 MVP:如何使 Presenter 层系统化?

android 程序员 移动开发

【Flutter 专题】123 图解简易 GroupList 二级分组列表

android 程序员 移动开发

”去他丫的北上广,老子要去成都定居了!

android 程序员 移动开发

[译] Android 模拟器:Project Marble 中的改进

android 程序员 移动开发

[译] Android 的多摄像头支持(1)

android 程序员 移动开发

[译]使用 MVI 编写响应式 APP — 第五部分 — 简单的调试

android 程序员 移动开发

数据中心的容错时钟对时 · OSDI 2020_语言 & 开发_面向信仰编程_InfoQ精选文章