說(shuō)起閏年、閏月,人們都知道這是為了彌補(bǔ)因人為歷法規(guī)定造成的年度天數(shù)與地球?qū)嶋H公轉(zhuǎn)周期的時(shí)間差而增加的。閏秒的概念也類似,由于地球自轉(zhuǎn)的不均勻性和長(zhǎng)期變慢性,會(huì)使世界時(shí)和原子時(shí)之間相差超過(guò)到±0.9秒時(shí),就把世界時(shí)向前撥1秒或向后撥1秒,一般加在公歷年末或公歷六月末。從1972年開(kāi)始,這已經(jīng)是第26次增加閏秒。地球轉(zhuǎn)了那么多年,誤差日積月累,從量變到質(zhì)變,如果不設(shè)法校準(zhǔn),那么所有的當(dāng)日都有可能是昨日,所以必須對(duì)時(shí)間進(jìn)行校對(duì)。閏秒說(shuō)起來(lái)很容易,將手機(jī)手表等電子設(shè)備向后調(diào)整一秒鐘就可以了,但是弄不好還會(huì)給我們帶來(lái)大麻煩。在2012年閏秒就使得社交新聞聚合網(wǎng)站Reddit遇到了技術(shù)故障,當(dāng)時(shí)在2012年7月1日7:59:59增加一秒,記為23:59:60,這增加的一秒,使得Reddit的服務(wù)器在這一刻出現(xiàn)了不同程度的CPU利用率增長(zhǎng),由于Java構(gòu)建的開(kāi)源數(shù)據(jù)庫(kù)Apche Cassandra處理不當(dāng),Java和Mysql導(dǎo)致了服務(wù)器CPU占用率的升高,最后不得不重啟。由此看來(lái),閏秒表面上看只是給鐘表額外增加一秒鐘時(shí)間,但就這個(gè)看似微不足道的舉動(dòng),對(duì)普通民眾的日常生活不會(huì)產(chǎn)生影響,時(shí)間快一秒慢一秒大家都感覺(jué)不出來(lái),更不會(huì)出現(xiàn)千禧年千年蟲(chóng)那樣的問(wèn)題。
不過(guò)閏秒對(duì)于全球的電子設(shè)備來(lái)講,可能會(huì)給我們帶來(lái)了不少麻煩,尤其是一些特殊行業(yè),比如在航天領(lǐng)域,飛船1秒鐘就要飛將近8公里的路程,要是差了這1秒,誤差可就大了:飛船軌道可能偏移,飛船著陸地點(diǎn)可能差上十萬(wàn)八千里,更糟糕的是飛船的安全會(huì)受到巨大的威脅。再比如,網(wǎng)絡(luò)通信上,協(xié)調(diào)世界時(shí)被用在很多互聯(lián)網(wǎng)標(biāo)準(zhǔn)中,像網(wǎng)絡(luò)時(shí)間協(xié)議就是其中的一種。如果出現(xiàn)1秒的誤差,全世界那么多臺(tái)電腦一下子都亂了套。另外,電網(wǎng)故障的維修、電網(wǎng)與電網(wǎng)之間的并網(wǎng),都需要使用精密時(shí)間,如果出了1秒鐘的誤差,甚至有可能是整張電網(wǎng)的停電甚至崩潰。所有的電子設(shè)備在設(shè)計(jì)時(shí)很少考慮時(shí)間上會(huì)出現(xiàn)閏秒的現(xiàn)象,當(dāng)我們突然對(duì)設(shè)備的時(shí)間進(jìn)行人為干預(yù)的時(shí)候,就可能導(dǎo)致設(shè)備里記錄的數(shù)據(jù)出現(xiàn)紊亂,最終可能設(shè)備無(wú)法理解這樣的時(shí)間調(diào)整而最終走向崩潰。
雖然閏秒給我們帶來(lái)不少的麻煩,但是調(diào)整是絕大部分人的公識(shí),當(dāng)然也有一些組織尋求廢除閏秒制度,閏秒的反對(duì)者認(rèn)為閏秒帶來(lái)的好處并不比引發(fā)的技術(shù)問(wèn)題更大,即使每年都出現(xiàn)閏秒,到3015年,地球的時(shí)間也不過(guò)慢了16分鐘。目前來(lái)講,提倡閏秒的依然是主流的聲音。如何應(yīng)對(duì)閏秒呢,尤其是在數(shù)據(jù)中心里有大量的電子設(shè)備,一旦設(shè)備出現(xiàn)異常將導(dǎo)致數(shù)據(jù)中心承載的業(yè)務(wù)受到影響。數(shù)據(jù)中心的新技術(shù)日新月異,每年都有大量代碼和程序被創(chuàng)作出來(lái)。而最近十年只有三次閏秒,肯定會(huì)有很多開(kāi)發(fā)者不熟悉這個(gè)概念,在編寫(xiě)一些對(duì)通訊依賴較多的程序時(shí)沒(méi)有意識(shí)到閏秒可能帶來(lái)的影響,埋下隱患,那么如何避免?首先,要在數(shù)據(jù)中心里部署同步授時(shí)設(shè)備,這些設(shè)備可以接收國(guó)家標(biāo)準(zhǔn)時(shí)間信號(hào),當(dāng)國(guó)家標(biāo)準(zhǔn)時(shí)間調(diào)整時(shí),數(shù)據(jù)中心的授時(shí)設(shè)備很快隨之調(diào)整,同時(shí)向數(shù)據(jù)中心里的所有設(shè)備更新時(shí)間,這個(gè)前提是要數(shù)據(jù)中心里的設(shè)備都要和授時(shí)設(shè)備進(jìn)行時(shí)間同步。其次,對(duì)于設(shè)備可能存在閏秒風(fēng)險(xiǎn)要提前預(yù)知,當(dāng)國(guó)家發(fā)布閏秒調(diào)整時(shí),數(shù)據(jù)中心要向所有的設(shè)備供應(yīng)商了解其設(shè)備是否可能存在閏秒風(fēng)險(xiǎn),由設(shè)備供應(yīng)商自己去查設(shè)備的代碼實(shí)現(xiàn),是否有考慮人為增加或減少時(shí)間對(duì)設(shè)備運(yùn)行的影響,一旦發(fā)現(xiàn)可能有問(wèn)題,在閏秒來(lái)臨之間,及時(shí)更新軟件或打上熱補(bǔ)丁,解決響應(yīng)的軟件問(wèn)題。當(dāng)然很多時(shí)候,如果閏秒并不會(huì)導(dǎo)致系統(tǒng)崩潰,數(shù)據(jù)丟失等嚴(yán)重現(xiàn)象,也可以不進(jìn)行軟件的調(diào)整。第三,谷歌想到了更好的應(yīng)對(duì)閏秒的問(wèn)題,谷歌在其服務(wù)器時(shí)鐘中每天人為添加數(shù)毫秒,以此避免閏秒出現(xiàn)。而當(dāng)閏秒出現(xiàn)時(shí),調(diào)整幅度已經(jīng)不足以引發(fā)任何報(bào)警。之所以這樣,是因?yàn)閿?shù)據(jù)中心里的設(shè)備成千上萬(wàn),我們是不可能,將所有的設(shè)備都檢查下確認(rèn)是否存在閏秒風(fēng)險(xiǎn),這要耗費(fèi)大量的人力與物力。這樣莫不如像谷歌這樣進(jìn)行時(shí)間的微調(diào),在閏秒來(lái)臨之前,將數(shù)據(jù)中心所有設(shè)備的時(shí)間一點(diǎn)點(diǎn)調(diào)慢,最終達(dá)到閏秒的效果。最后,由于很多閏秒的調(diào)整可以遇上特殊的時(shí)間,比如股票交易,航空飛行等,這樣閏秒的到來(lái)可能會(huì)帶來(lái)未知風(fēng)險(xiǎn),這樣數(shù)據(jù)中心可以將閏秒的調(diào)整放到業(yè)務(wù)量少的后半夜進(jìn)行,對(duì)數(shù)據(jù)中心業(yè)務(wù)沖擊最小。雖然規(guī)定在統(tǒng)一時(shí)間進(jìn)行調(diào)整,但是數(shù)據(jù)中心此時(shí)可以不選擇時(shí)間同步,在業(yè)務(wù)量最少的時(shí)候再選擇更新同步時(shí)間。有了這些應(yīng)對(duì)措施,其實(shí)閏秒并不可怕,這十年內(nèi),我們經(jīng)歷了三次閏秒,雖然有些數(shù)據(jù)中心出現(xiàn)了一些差錯(cuò),但是對(duì)于全球數(shù)百萬(wàn)個(gè)數(shù)據(jù)中心來(lái)講,發(fā)生故障的概率還是很低的,所以要坦然面對(duì)閏秒事件,在閏秒來(lái)之前,做足功課,想好各種應(yīng)對(duì)措施,消除閏秒對(duì)數(shù)據(jù)中心運(yùn)行帶來(lái)的任何影響。
講到閏秒,有些媒體過(guò)分地夸大了它的影響,甚至說(shuō)全國(guó)的數(shù)據(jù)中心會(huì)陷入恐慌,其實(shí)是對(duì)閏秒處理機(jī)制的不了解。實(shí)際上,目前很多服務(wù)器的操作系統(tǒng)Linux和Windows都自代處理閏秒的程序,當(dāng)閏秒到來(lái)時(shí),可以自動(dòng)調(diào)整確保系統(tǒng)不出現(xiàn)任何問(wèn)題。對(duì)于閏秒,完全沒(méi)有必要過(guò)分擔(dān)心,2000年的千年蟲(chóng)事件,當(dāng)時(shí)也說(shuō)的很恐怖,可能會(huì)造成世界所有計(jì)算機(jī)癱瘓,結(jié)果幾乎沒(méi)有發(fā)現(xiàn)什么故障,有時(shí)人就喜歡自己嚇唬自己。雖然如此,我們還是要對(duì)閏秒事件做好充分準(zhǔn)備,不怕一萬(wàn)就怕萬(wàn)一。