背景
BIGO的服务器散布在寰球各地,各种服务如分布式追踪等都对寰球机器存在时钟对齐的需要。而主观上,受限于服务器自身的工夫源设施精度以及内核时钟零碎的软件设计实现等多种简单因素制约,常见的服务器秒级别的设施时钟误差大概在万分之二左右,而累积误差会呈现正反向弥补,依据教训观测值,一年存在至多分钟级别的时钟误差。
此类问题最常见的解决伎俩就是接入网络授时服务如NTP,然而作为一个寰球散布几万+服务器的公司,简略接入NTP服务,并不能彻底解决寰球时钟对齐的问题。
BIGO的服务器很晚期就接入了time.nist.gov的NTP网络工夫同步服务,然而观测到公司外部的机器普遍存在百毫秒级别的时钟误差,单机视图存在工夫跳变等问题,而且误差散布简直是随机的,同机房外部都可能呈现极大误差。
基于以上现状,联合BIGO的业务需要,咱们的寰球时钟true time服务开启调研和建设。在业界相干畛域,google的spanner论文有提到true time服务的建设,facebook也有公开过chrony时钟对齐服务解决方案。前者外围是依赖寰球多机房部署原子钟+GPS构建了一个双层的架构,配合Marzullo变种算法来提供7ms工夫区间服务。而后者实质上也是基于原子钟+GPS构建了一个最高能够达到16层的架构来提供true time服务。
业界的现有技术计划,一方面存在硬件设施依赖,另一方面间接作为开箱即用的工夫源在BIGO理论场景会制约咱们的服务部署状况。于是咱们基于内部NTP网络工夫源+外部UTC工夫源集群+多PTP集群的计划来构建了BIGO本人的寰球true time时钟对齐服务,指标是在不依赖外部原子钟的前提下,把BIGO寰球机器99.99%场景时钟误差管制在亚毫秒。
该根底能力的建设,能够利用于BIGO外部不少场景:
1) 解决分布式追踪场景的时间误差问题;
2) 能够赋能BIGO的音视频优化直播帧工夫戳跳变引起的卡顿问题,以及音视频和文件传输在重传准确率,拥塞管制等方向的晋升;
3) 解决工夫跳变问题,晋升BIGO根底框架等服务的稳定性,防止跳变引起的服务卡顿和挂死。
NTP
在理解时钟对齐相干原理时,NTP协定(Network Time Protocal)和相应的ntpd和ntpdate服务是必须要理解的。这里咱们简略回顾一下相干原理。
NTP协定的提出是为了解决这样一个问题:已知有一个基准服务器A,A的工夫是精确的,怎么通过网络让B本地时钟跟A对齐?
聪慧的读者可能曾经很快想到答案,B发包询问A,A把本地工夫回给B就搞定了。然而问题没有这么简略,B->A的网络包延时d1,A->B的网络包延时d2,甚至A收到申请再回包过程的耗时d3都会导致B拿到的工夫存在误差。
针对此问题David L. Mills提出了NTP协定,最早呈现在rfc958。
图1是单次NTP授时过程,首先B向A发送一个NTP包,包里蕴含了来到B的本地工夫戳T1。A收到NTP申请包之后,顺次记录包达到的本地工夫戳T2,回包来到的工夫戳T3,而后立刻把包返回给B。B收到回包后,记录本地工夫戳T4。
其中咱们把d1=T2-T1定义为上行延时,d2=T4-T3定义为上行延时。假如A-B的时钟绝对误差为diff,则有如下公式:
d=d1+d2
T2=T1+diff+d1
T4=T3-diff+d2
如上推算,A-B的时钟误差公式求解如下:
假如网络的上下行延时对等无稳定,即d1=d2,则A-B的时钟误差近似值diff_appro跟diff相等,diff_appro的表白公式如下:
在单次的ntp对齐过程中,工程上往往基于diff_appro公式去计算A-B的时钟差,此时并未剔除上下行网络稳定的影响,咱们把diff称为A,B机对齐前时钟误差(简称前误差),把diff_appro-diff称为A,B机对齐后的时钟误差(简称后误差)。
后误差的公式表白为diff_appro-diff=(d1-d2)/2,当d1或者d2等于d时,后误差最大为±d/2。
NTP算法简略来说,就是基于diff_appro公式计算diff值,并对B机的时钟做出加diff_appro的调整,从而让B机的时钟向A机尽量对齐。对齐过程还会存在后误差(diff_appro-diff),后误差最大能够到±d/2。
看到这里,可能聪慧的读者要收回灵魂拷问了,A间接回工夫给B,B齐全不思考任何误差间接应用A返回的工夫设置为本机工夫,这个过程存在的误差也就是d2而已,最大误差能够换算为d。这NTP绕了这么一圈,仅仅是把后误差放大到到d/2而已,反正是不准,优化一半的精度仿佛没什么价值。
其实实质不是这样的,仅仅关注最大误差的确只优化了一半的精度。然而间接应用A返回的工夫,A和B的时钟误差是恒等于d2的,而NTP的时钟误差实质上是跟上行延时和上行延时的差值成正比,网络延时是永恒存在的,而上下行延时差值(简述为网络稳定)却不肯定是永恒存在的,只有配合一些屡次采样平滑调整,是能够基于NTP把时钟对齐的精度管制在比拟现实的范畴的。
ntpd和ntpdate就是2种基于ntp协定封装的时钟对齐服务形式,前者利用了多时钟源以及一些平滑算法来躲避对齐过程中的时钟跳变问题。而后者仅仅是对ntp协定过程的定期利用,容易存在误差和跳变。
架构衡量与设计
后面提到BIGO一开始寰球机器都基于ntpdate接入了time.nist.gov,然而成果不言而喻是不好的,普遍存在百毫秒误差,时钟跳变,误差忽视机房,每个问题都很致命。
那么简略换成ntpd会不会变好,咱们的实际表明ntpd本机房同步误差能够管制在毫秒级别,然而跨大区同步存在10毫秒级别的误差,尽管比照ntpdate会有改善,然而这个成果还不够满足业务需要。或者咱们的服务器能够物理间隔跟ntp源放弃凑近部署,但这不是一个好扩大的服务架构,也不合乎咱们寰球多机房的运维现状。
咱们后续还尝试引入facebook的chrony(facebook提供的一种NTP工夫源)作为工夫源,其比照ntpd有更优良的同步算法,然而咱们验证跨大区同步的误差仍然在6毫秒级别,次要起因在于公网跨大区上下行delay差别导致。此外chrony对第三方使用者的调优老本较高,其提供了如mindelay等十几种同步模式,不足最佳实际指引。
简略总结一些衡量,如果要开箱即用一些ntp源服务,则BIGO的服务器部署会受到限制,如部署地点,同步频率等。因而咱们在这一期放弃了全网间接应用相干ntp服务,而是开始在BIGO外部分层构建true time服务。
架构上,咱们要在没有外部原子钟设施的前提下,解决2个问题。
1. BIGO的机器工夫要和UTC工夫放弃较高精度的同步;
2. BIGO各个外部机器之间的工夫要尽量放弃较高精度同步,且ping延时越小的机器之间精度要求越高。
问题1即工夫源的问题,google spanner里的true time的解决形式是依赖硬件设施,引入原子钟+GPS组成散布寰球的master群,利用原子钟和GPS故障概率和故障起因存在差别这个个性做双保险保障master可用性。同时master和daemon(即slave)都会通过一些算法辨认显著异样的时钟,从而在外部建设了一套寰球高可用的高精度工夫源。
而BIGO在面对这个问题时,尚没有大规模的原子钟设施,为了低成本的解决工夫源问题,最终咱们抉择了建设一个单机房的工夫源,咱们称为super master。super master为了保障可用性,应该是集群。Super master的工夫并不是来自本身的时钟,而是基于ntpd跟一个物理间隔上最靠近的NTP源做时钟对齐。
至此,咱们在没有原子钟的状况下,失去了一个可用性比照google spanner里的 true time稍差一点的工夫源。
问题2,咱们心愿按机房分层建设架构。最终确定在每个机房建设一些master节点,本机房的其余节点(咱们称为slave)只会跟这些master做时钟同步,基于PTP协定来进行。看到这里可能读者会纳闷,PTP是个什么协定,这里不急,前面会有篇幅对该协定做一个回顾,你能够先简略了解PTP是在NTP上做的一种工程优化,其比拟适宜子网内的高精度时钟同步(在毫秒内精度进一步晋升),反对播送,单播等工作模式。
最终,咱们失去BIGO true time服务一期架构图如下:
架构里的相干名词解释如下:
NTP源——基于ntpd或者ntpdate模式提供时钟对齐服务的规范机构(例如time.nist.gov是由美国国家标准技术研究所提供),NTP源的工夫同步报文里蕴含的工夫是UTC工夫(等效于GMT格林威治工夫)。
Super Master——角色定位为BIGO外部的牢靠UTC工夫源,后面说了,super master是没有原子钟的,基于ntpd跟物理最近的NTP源做UTC时钟同步。Super master一期临时是单机房的,前面为了更高的可用性,会布局多机房的分布式UTC源架构。
Name Service——BIGO外部的分布式名字服务,具体架构不细讲了,能够对标Etcd等架构,这里该模块次要用于给master发现super master做ptp单播时钟同步用。
Master——某个机房内的时钟源,仅仅服务本机房的节点。一个机房内能够有多个master存在。Master会定期基于PTP单播配合咱们的平滑算法去super master做时钟同步,同时,也会秒级对子网内做ptp的sync播送达成master和slave的时钟同步。
对于master的选举决策,这里波及到PTP里的BMC算法,原则上一个机房不须要惟一的master,该算法不同于其余分布式强统一算法如paxos,不须要达成全局惟一共识。对于BMC选举master机制咱们前面会开展解说。
Slave——机房里的一般服务器,会周期秒级收到同机房master的PTP sync同步播送,达成时钟同步,以后因为只会在同机房做时钟同步,该过程暂未做平滑解决。
机房内Master选举
提起Master选举,可能很多读者会想到Raft,Paxos等相干技术计划。而在咱们这个具体的问题畛域,对于在一堆机器里选出适合的主机作为master来成为时钟源,比拟经典的是IEEE1588里的BMC(Best Master Clock)算法。
该算法比拟适宜子网外部Master选举的特点,只负责选出确定的Master群,并动静保障slave肯定能够较快找到可用的Master,然而不思考slave应用的master是否是最优解,BIGO外部为该算法设计了保底策略,用于躲避极其状况长期应用较差的master。
BMC算法自身为每台机器设置了几个属性:
1)机器优先级:依据机器属性赋予机器的一个优先级,值越小优先级越高;
2)分组优先级:对机器进行分组,每个组有一个优先级值越小优先级越高;
3)惟一标识:过程的惟一标识,个别应用MAC地址。
BIGO这边因为子网人造是同机房的,所以1和2默认都是不配置的,基于保底策略来动静解决机器网络情况稳定问题。
原始的BMC算法选主流程如下:
1) 过程接管子网内的master的播送信息,并退出本身的foreignMaster列表;
2)过程依据foreignMaster列表信息(可能为空)和本过程信息通过BMC算法按机器属性抉择出最优的master;
3)如果过程成为master的话,则开始播送信息。
图3是选主过程的状态迁徙图,子网内任何一台机器都会周期的check本身的foreignMaster列表,选出以后的本人的master(能够是本人),而后相应把本身角色设置为master(slave)。
该算法集群多机状态收敛过程还是比拟清晰简略的。
1) 初始的时候,不思考引入任何随机让步算法,子网内所有机器都没有收到任何master的announce申请,则会将本人晋升为master,并开始播送本人的信息。此时,子网内全副机器都是master;
2) 子网内的机器开始陆续收到子网内master的信息,在这过程中,一直执行bmc算法,进而将更优的过程设置为master,最初个别在几个播送周期内,整个集群的master,slvae状态达到稳固。
上面的图4简要的展现了BMC算法从初始化到收敛过程:
总结来看,BMC算法长处就是疾速,简洁,而因为选主条件是动态的(如MAC地址大小),无奈保障选出的master是网络状况最优的,这种算法在子网内比拟适合。
为了保障该算法在网络变动后能够剔除掉显著异样的Master点,BIGO尝试引入网络稳定保底策略。即在放弃BMC算法主流程状况下,引入master->slave的网络稳定状况来优化master抉择策略。
为什么基于网络稳定来做选主决策,而不思考网络延时大小,依据咱们后面形容的NTP原理,读者应该分明,时钟同步的误差受上下行网络差值影响较大,而延时的相对大小是没有影响的。
BIGO这边会基于PTP的delay过程(前面一节PTP协定会具体解说),在本机保护slave跟他foreignMaster列表的机器的历史delay值汇合——foreignMaster’s delay_list。而后基于规范方差公式计算每台master的delay方差S(对于方差的概念,本文不再赘述)。咱们认为方差S能够较好的表白foreignMaster的网络稳定。
在原BMC选主过程,BIGO会额定判断指标master的方差S是否超出了阈值,如果是则会把该Master机器从slave的foreignMaster列表里临时踢掉,当S复原小于阈值后,会再加回foreignMaster列表,全过程对BMC选主机制没有任何收敛性相干的毁坏。
最初说一下,为什么BIGO不尝试扭转BMC选主程序条件,比方依照master的S大小来优先选主。次要基于2点思考:
1. 子网内机器间的网络情况个别都是平等,咱们没有强烈的需要须要选出最优的master,咱们须要做的是躲避毛刺和异样节点;
2. 扭转BMC选主程序,引入动静变量S来调整Master优先级,意味着每台slave机的Master优先级视图能够不一样,BMC简洁的Master收敛过程被毁坏,咱们须要很小心的去review整个算法的全过程,避免出现极其的Bug,而如1所述,这项工作的收益并不大。
PTP
单机房外部,master和slave之间通过PTP协定来实现时钟同步。这里简略回顾一下PTP协定,以及BIGO外部应用状况。
首先,NTP的原理读者应该曾经分明了,那么咱们能够认为PTP是尝试对NTP做工程落地的一种优化实现形式。PTP全称为Precision Timing Protocol,也是在IEEE1588里提出的。PTP次要解决了2个工程上的问题:
1.解决NTP外面精准获取d1,d2的问题;
2.怎么高效的在一个子网内对多个slave同步时钟的问题。
先讲下问题1,精准获取d1,d2是什么意思呢?
首先,PTP是基于UDP协定来通信的,咱们把d1,d2定义为网络延时,然而在工程实现上,如果B给A发包,A给B回包,A发回包前获取本机工夫T3‘的话,那么T3’=T3-UC。其中T3是网络包从内核收回去的工夫,UC是A获取本机工夫到回包从内核收回去的时间差,为什么会有UC存在,因为linux并不是一个实时操作系统。UC的耗时组成会很简单,cpu调度的忙碌水平,缓冲到发送的耗时都会影响UC,且会动态变化。而真正的延时d2=T4-T3,如果仅仅把T3’打到包里回给B,那么B在计算d2的时候就会存在误差。
对于问题2,PTP这边利用播送机制来被动对多个slave进行时钟同步,工程上具备容易配置,疾速收敛(参考后面的机房内master选举算法过程),以及网络带宽和资源占用少等长处
PTP具体同步过程分为delay机制和sync机制:
图5为PTP时钟delay机制的同步过程,该过程重点解决一个问题:工程上精准算A到B的网络时延delay值。
为什么要算这个值呢?基于PTP子网同步的场景特点,PTP假如短时间内,一个子网的网络稳定较小,即D1=D2,且D1值短时间内不会变动。基于这个假如,PTP前面能够以较低开销实现sync机制的工夫同步。
简略来说,PTP在一个子网内,slave会长周期的进行delay播送机制,该过程开销偏大。而master侧会短周期的进行sync机制,来达成对子网内全副slave的时钟同步,该过程开销绝对小。
回到delay机制过程自身,是怎么做到精准测算A到B的delay值呢。图中T1’,T2’,T3’,T4’都是PTP程序用户态能够拿到的工夫,这些工夫都含有误差。要精准测算delay,B就须要获取T1,T2,T3,T4,即req和resp从网卡收回,以及达到收包方内核协定栈的工夫。
先说T2和T4值,这2个值在udp包达到内核协定栈之后会记录下来,用户态能够拿到该工夫。从B的视角,T4自身就能够拿到,T2能够让A的程序在回包的包体里带上。
再来说T3,这个值的获取原理,是ptp delay机制须要播送发动的次要起因。PDelayResp包回包是播送到子网,因为是播送包,A本人也能够收到PDelayResp,基于回环播送个性此时A收到的PDelayResp包的达到工夫就是该包的网卡收回工夫,即T3。此时A只须要再发一个PDelayRespFollowUp包,包体里带上T3工夫,则B就能够正确获取T3工夫了。
最初说T1,只有明确T3的获取原理,则相似T3,B自身获取T1也是基于PDelayReq包的回环达到工夫断定。
至此,基于公式delay = (T2-T1+T4-T3)/2即可在工程上实现精准测算A到B的网络时延delay值。
图6为PTP时钟同步的sync过程,该过程运行时,B曾经胜利获取到A到B的网络时延dealy。此时A作为master被动播送sync申请帮忙B精准测算出A,B本地时钟差值offset。
本次过程仍然A,B只能拿到T1’,T2’,然而基于后面delay过程的形容,读者应该能够比拟间接的晓得如何获取到T1和T2。过程不再赘述,B能够间接拿到T2,而followup包会把T1带给B。
于是咱们晓得T1+offset+dealy=T2,故A,B机器时钟误差满足offset=T2-T1-delay。B失去offset之后,批改本地时钟即实现了一次PTP的子网时钟对齐的过程。
最初提一下,PTP自身的工程源码也存在一些乱序和时钟同步谬误的bug,BIGO外部基于一个版本做了一些革新优化。
跨机房同步
Master机器周期跨机房与super master做时钟同步,是本架构里次要误差起源。BIGO外部跨机房,跨大洲以走公网为主,网络延时大,网络稳定比拟显著。即便外部建设很好的光纤内网,双向链路的延时对称性也不肯定能够保障,在理论运行中受很多因素影响。
在这一层实现上,BIGO基于ptp单播协定(这个不细讲了,就是ntp协定的工程实现)来做同步,然而该协定不言而喻在网络稳定下存在误差和跳变。
针对这个问题,BIGO参考了Ntpd的平滑实现并退出自研的异样稳定剔除算法,来优化ptp单播跨机房同步过程存在的误差和跳变,次要有2个策略:
1. 当计算出offset(即ntp里的diff)在128ms以内时,对master本地时钟往super master时钟方向调整最多0.5ms。当计算出offset(即ntp里的diff)大于128ms时,默认疏忽该offset,除非该offset继续了一个较大阈值周期(300s),才会基于此offset调整master时钟;
2. 基于稳定阈值x剔除有效同步。当本次ptp单播的delay比最近30次delay值误差大于阈值x,则本次ptp单播的后果不被利用,同时x相应减少。只有以后ptp后果被驳回,且offset值小于2ms,才会把x重置为初始值。
策略1能够保障时钟对齐过程的平滑,同时时钟对齐导致的时钟回退问题也解决了。这里的0.5ms/s不是人为设置一个绝对值,而是调用linux内核封装的Phase-locked loop机制来对本机时钟进行调整。从而保障工夫调整不会在利用下层体现为工夫回退。该机制原理,本文不做开展。
策略2能够剔除网络稳定对同步后果的影响,有点相似chrony的mindelay机制。
BIGO在上线该策略后,比照之前无平滑策略的ntpdate成果显著,在跨机房同步场景,比nptd和facebook的chrony成果也要更好,相干成果测验上面会残缺论述。
成果评测与仿真
对于精度和成果评测这个话题,业界如facebook的chrony外部宣称做到0.1ms以内的的误差精度,而google的spanner里的true time是100%确信在7ms的区间内。BIGO在发展此项工作的一期指标是在没有外部原子钟的前提下,把99.99%场景误差精度管制在亚毫秒。
对于精度的测算,自身就是一个跟寰球时钟对齐等同难度的命题。
为什么这么说呢,因为如果咱们能够在上帝视角完满0误差辨认任意2台机器的时间误差,那么也就代表着咱们能够把任意2台机器的时间误差调整为0。
已知比拟好的评测伎俩,有facebook提到的基于1PPS(每秒脉冲数)来检测任意2台机器的时钟误差,该评测能够做到纳秒级的误差,然而对硬件有很多依赖,如须要在机器间铺设专用同轴电缆,须要定制的网卡硬件。
这个话题,咱们次要从2个方向来开展:评估指标和评估伎俩。
首先对于用什么指标来评估集群内机器之间的时钟误差状况,比拟直观的就是机器间误差的时间轴坐标图,基于坐标图咱们形象了2个次要指标:
1)可用性——基于咱们对误差精度的要求是是亚毫秒,则每秒进行一次机器间时钟误差判断,大于1ms则认为这1秒时钟服务不可用,最初可用工夫占比即为可用性;
2)最大误差值——机器间误差值稳定过大,咱们认为须要重点关注。
评估伎俩这块,咱们没有相干硬件来撑持咱们做1PPS的成果评测,所以咱们这里基于仿真的思路来做评测。
咱们仅仅察看同机房的2台机器A和B的时间误差,因为同机房机器ping 延时能够稳固在0.1ms以下,此时咱们近似具备了较高精度观测误差的能力。而后咱们仅仅先评测以下3个场景:
1)A和B各自基于某种同步算法,跟本机房(或者同城)的工夫源做工夫同步,观测A和B的误差时间轴坐标图;
2)A和B各自基于某种同步算法,跟远端跨大区的工夫源做工夫同步,观测A和B的误差时间轴坐标图;
3)A基于某种同步算法,跟远端跨大区的工夫源做工夫同步,B基于雷同同步算法,跟本机房(或者同城)的工夫源做工夫同步,观测A和B的误差时间轴坐标图。
图7简略形容了后面所说的3种评测场景。须要留神一点,待评测的UTC工夫源可能是跟咱们的机器在一个机房,也可能仅仅是同城,取决于待评测服务自身理论部署状况。
咱们再来关注怎么评测一个时钟同步算法在跨大区机器间的误差,比方图中A1和B2之间的时钟误差?
软件层面这个问题看起来是无奈评测的,然而咱们先假如UTC工夫源(内部原子钟设施)之间是没有毫秒级误差,那么A3和B3的时钟误差咱们临时能够基于0.1ms的精度进行评测,咱们定义A3和B3的时钟误差为diff(A3,B3),则diff(A1,B2)近似等于 diff(A3,B3)。
一句话总结,咱们可用观测diff(A3,B3)的后果认为其实仿真表白了diff(A1,B2),等价于咱们胜利评测了一个时钟同步算法在跨大区机器间的误差(实质上还是有2套本机房内部原子钟UTC源加持,然而仅仅是做评测时依赖而已,咱们的零碎的机器部署本质不依赖内部UTC工夫源的具体部署状况)。
至此,咱们曾经具备不依赖外部硬件设施,在BIGO寰球机房仿真评测同机房,跨大区机器的毫秒级时钟误差的能力。
图8到图13别离为跨大洲和同机房状况下BIGO,NTP和facebook的chrony时钟同步误差测量表。
图8~图13为咱们观测BIGO同机房机器,基于不同算法和不同区域源时钟同步之后,获得的误差表。全副场景都观测了3个小时,每秒观测一次,每张图都是1万个横轴坐标点。须要留神的是,ntpdate自身显著过于毛糙,咱们认为不值得浪费时间进行比照,所以这里只比照了ntpd和facebook的chrony。
此外,这里的比照后果不肯定就代表facebook的chrony外部精度状况,仅仅表白了BIGO作为一个第三方,去依赖这些服务,咱们能取得的精度能力。而且chrony自身提供了数十种参数来调优精度和稳定,因为精力有限,咱们比照时应用默认配置。
图14为咱们对6张评测成果做的总结。
后面3行是跨大洲场景的体现,以后面定义的可用性而言,ntpd和chrony间接应用都无奈满足咱们的可用性需要,而最大误差这块,BIGO自研架构下的机器时钟误差管制在0.5ms内,而间接接入ntpd有近10ms最大误差,接入chrony的误差靠近6ms。
后3行是同机房或者同大区的体现,此时BIGO自研架构下的机器时钟误差的可用性和最大误差仍然是好过间接接入ntpd或者chrony的。其表白的含意为,即便BIGO抉择限度本身的机房部署状况,做架构设计去适配ntpd和chrony源来复用他们提供的时钟对齐服务,成果仍然不如以后版本的BIGO自研架构。
总结
总结一下BIGO在寰球时钟同步服务的工作,在没有外部原子钟的前提下,基于双层架构设计,建设了稳固的外部UTC工夫源。同时基于ptp单播配合平滑+异样剔除算法保障了第一层跨机房时钟同步精度管制在亚毫秒。而后在第二层机房子网内,基于ptp算法实现,优化了网卡发包到用户代码层的时间误差问题,进而把机房内的时钟精度在毫秒内进一步晋升。
最终咱们播种了一个99.99%场景下,集群时钟误差都在亚毫秒精度的时钟服务,且随着ping值缩小,同机房的精度有进一步的晋升。该服务架构具备良好的外部可扩展性,不依赖内部NTP时钟源的部署和服务能力。同时咱们提供了无效的评测伎俩来验证咱们的毫秒级误差状况。
该零碎在外部UTC工夫源的精度以及集群可用性,还有反抗上下行延时差值,高精度时钟评测等方向还有诸多工作待进一步开展优化,这些将布局到咱们的前期工作中。
该零碎以后作为基础设施,为BIGO的全链路trace零碎等多项服务提供时钟对齐保障,胜利解决了负调用耗时等业务问题。