9 ポイント 投稿者 kunggom 2020-03-22 | 7件のコメント | WhatsAppで共有

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件のコメント

 
ryuheechul 2020-03-29

わあ。興味深い記事でした。精度のための取り組みが簡潔(?)でありながら詳細に共有されていますね。この記事を読んで、Mac の NTP サーバーを time3.facebook.com に変更しました。

 
kunggom 2020-04-05

私は time1.facebook.com を使っています。ping を打ってみると、2番目から5番目までの別のエンドポイントには ping が届かないか、かなり遅いようでした。chrony で time1.facebook.com を時刻サーバーとして設定すると、予想誤差は ±1 ms を少し超える程度になります。単に time.facebook.com を設定すると、時刻を取得できませんでした。

 
kunggom 2020-04-05

参考までに、他の時刻サーバー、たとえば time.google.comtime.windows.com のようなところは、例外なく誤差が 30 ms 以上になります。これは kr.pool.ntp.org のような NTP プールでも同様です。これまで見た時刻サーバーの中で、時間誤差が最も小さいと出たのは Stratum 1 サーバーの ntp.postech.ac.kr ですが、これは chrony で ±5 ms 程度と推定されていました。

 
kunggom 2022-11-15

最近、chrony で time.apple.com を Pool に設定すると、韓国と日本にある高精度の NTP サーバーが選ばれることを知りました。しかも Stratum 1 と表示されるんですよね。Apple は自社の CDN サーバーに GPS 受信機を取り付けて、タイムサーバーとして使っているようです。

 
xguru 2020-03-22

これは面白いですね。at Facebook scale という言葉も、もうすっかり聞き慣れてきました。

 
kunggom 2020-03-22

余談ですが、GeekNewsのTwitterにはこの記事が上がっていなかったのですが、もしかしてTwitterボットが投稿するニュースには別の条件があるのでしょうか?

 
xguru 2020-03-22

あ、確認してみたところ、文字数をチェックして切り詰めて投稿する部分で、本文のいちばん先頭に入っていたURLが自動的にリンクへ変換され、そのせいで文字数超過となってTwitter APIでエラーが出ていましたね (泣)

TwitterではURLは無条件で22バイトか何かに変換されます

この部分は修正しないといけなさそうですね ふう