Facebook、新しい時刻サービスを公開
(engineering.fb.com)Facebookは time.facebook.com で新しいNTP時刻サービスを公開しました。ほかの公開時刻サービスより精度が高く、IPアドレスでユーザーを識別しないとしています。またFacebookは、このサービスに関する記事を同社のエンジニアリングブログに掲載しました。(英語)
Facebookのような大手IT企業が時刻サービスに関心を持つのは、まさに分散システムの運用が理由です。分散データベースのトランザクションを処理したり、正しいロギングを保証したりするためには、複数のサーバーが高い精度で時計を同期している必要があります。
FacebookはStratum 1(人工衛星の原子時計から直接時刻情報を受信する機器)の専用テスト装置を購入し、従来よく時刻サーバーとして使われてきた ntpd と、比較的新しいNTPデーモンである chrony( https://chrony.tuxfamily.org/ )を比較するベンチマークを実施しました。ntpd は起動直後に一時的に -10 ms の誤差を出した後、徐々に ±1 ms の誤差へ収束しましたが、chrony はほとんどの誤差が継続して ±0.2 ms 以内に収まり、ntpd よりはるかに高い精度を示しました。
chrony にはほかにも利点があります。それがハードウェアタイムスタンプをサポートしていることです。時刻同期プロトコルであるNTPは、サーバーとクライアントの間でパケットが行き来するたびにタイムスタンプを記録し、往復にかかった時間差を計算することで、できるだけ正確な現在時刻を求めようとします。ところが、リアルタイムOSでない場合は、ある処理にかかる遅延時間が一定の水準以下であることを保証できません。これはNTPでも同様で、ネットワーク経由で時刻を同期するときに誤差が大きくなる原因の1つになります。
しかし一部のNIC(LANカード)では、ハードウェアタイムスタンプ機能をサポートしています。この機能ではNICが専用ハードウェアによって独自のクロックを維持し、タイムスタンプ処理を行いますが、その処理遅延はわずか数ナノ秒程度にすぎません。もしローカルネットワーク環境で、NTPサーバーとクライアントの両方がハードウェアタイムスタンプをサポートしている理想的な状況であれば、1マイクロ秒未満の誤差で時刻同期できる場合もあるそうです。実際の時刻サービスはローカルネットワーク環境ではなく、クライアント側のNICがハードウェアタイムスタンプをサポートしていないこともあるため、そこまで期待はできませんが、ともあれ chrony とハードウェアタイムスタンプ機能を組み合わせてベンチマークした結果、時刻同期の誤差の大半が ±0.1 ms 以内に収まったといいます。
そのためFacebookは、chrony でハードウェアタイムスタンプを有効化した設定で公開時刻サービスを提供しているそうです。GoogleやAppleなどほかの公開時刻サーバーでは、提供される時刻の誤差が ±2 ms を超えることもありますが、Facebookのサービスはほとんどの場合で ±1 ms 以内だといいます。なお、このサービスは5つの異なる地域にエンドポイントを置いて運用されています。詳しくは元記事を参照してください。
7件のコメント
わあ。興味深い記事でした。精度のための取り組みが簡潔(?)でありながら詳細に共有されていますね。この記事を読んで、Mac の NTP サーバーを
time3.facebook.comに変更しました。私は
time1.facebook.comを使っています。ping を打ってみると、2番目から5番目までの別のエンドポイントには ping が届かないか、かなり遅いようでした。chrony でtime1.facebook.comを時刻サーバーとして設定すると、予想誤差は ±1 ms を少し超える程度になります。単にtime.facebook.comを設定すると、時刻を取得できませんでした。参考までに、他の時刻サーバー、たとえば
time.google.comやtime.windows.comのようなところは、例外なく誤差が 30 ms 以上になります。これはkr.pool.ntp.orgのような NTP プールでも同様です。これまで見た時刻サーバーの中で、時間誤差が最も小さいと出たのは Stratum 1 サーバーのntp.postech.ac.krですが、これは chrony で ±5 ms 程度と推定されていました。最近、chrony で
time.apple.comを Pool に設定すると、韓国と日本にある高精度の NTP サーバーが選ばれることを知りました。しかも Stratum 1 と表示されるんですよね。Apple は自社の CDN サーバーに GPS 受信機を取り付けて、タイムサーバーとして使っているようです。これは面白いですね。at Facebook scale という言葉も、もうすっかり聞き慣れてきました。
余談ですが、GeekNewsのTwitterにはこの記事が上がっていなかったのですが、もしかしてTwitterボットが投稿するニュースには別の条件があるのでしょうか?
あ、確認してみたところ、文字数をチェックして切り詰めて投稿する部分で、本文のいちばん先頭に入っていたURLが自動的にリンクへ変換され、そのせいで文字数超過となってTwitter APIでエラーが出ていましたね (泣)
TwitterではURLは無条件で22バイトか何かに変換されます
この部分は修正しないといけなさそうですね ふう