今年は、2015/07/01 08:59:60 JST としてうるう秒が挿入されます!(うるう秒実施日一覧)
「うるう秒なんてきちんと処理したくない」という人向けのまとめ。
まとめっぽい記事
AWS
GCP
前後10時間ずつ、計20時間かけて調整
Microsoft Azure
- 資料が見つからなかった。
ntpd SLEW mode
うるう秒直後時点で1秒時計が先に進むが、そのあと少しずつ修正される。
- なにそれこわい: ntp-4.2.6p5-3.el6 より前で ntpd -x が slew にならないバグがある
- 補正に掛かる目安: STEPモード(ntpd)の1秒のずれの調整にかかる時間の検証 3時間くらい
ntpd LI flag + STEP mode
Leap Indicatorフラグを元に、うるう秒直後に1秒巻戻る。
- 最重要ポイント: 時間が逆行する(同じ1秒間が二度繰り返される)
23:59:59.000000(→ 23:59:59.999999)→ 23:59:59.000000 → 00:00:00.000000
Windows
【ドメイン コントローラーの場合】
(略)
つまり、NTP Server との時刻差が 5.25 秒未満、もしくは 3.5 秒未満の場合は、Slew モードで時刻同期が行われる結果となります。【ドメイン メンバー サーバーの場合】
(略)
つまり、NTP Server との時刻差が 225 秒未満、もしくは 150 秒未満の場合は、Slew モードで時刻同期が行われる結果となります。【ワークグループの場合】
(略)
つまり、NTP Server との時刻差が 1 秒未満の場合は、Slew モードで時刻同期が行われる結果となります。
雑感
この中だと「0.5秒ずらしておく」で丁度良い人が多そうだけどAWSとGCPでも実装が異なるし、基盤をまたいで時刻を統一するのは諦めた方が良さそう。0分0秒の方をきっちり合わせたい人が多そうだから、あらかじめ最大1秒進めておくのもアリなのではと思うけど、そういう実装はないようだ。
エンタープライズ用途とか、0分0秒の厳密さが求められる場合には、マルチフィードみたいな正しくLeap Indicatorを実装したNTPサーバと同期する必要したうえで、その場合もミドルウェアやアプリケーションが正しくうるう秒(59分60秒999999)を扱えることを確認する必要がある。