時計を合わせる——NTPと「同じ今」の難しさ
要点
- 離れた複数の機器で「同じ今」を保つことは、思うほど簡単ではない。
- NTPは、遅延を測りながら時計を少しずつ合わせていく仕組みである。
- 分散システムでは、絶対時刻より出来事の前後関係のほうが本質的だという見方がある。
- 同期とは、完全な一致ではなく、許容できるずれの管理だと考えられる。
「今、何時か」を二つの時計に尋ねると、たいてい少しだけ違う答えが返ってくる。手元のスマートフォンと、壁の時計と、サーバーの内部時計。どれも正しいつもりでいて、秒以下の単位では食い違っている。私たちが当たり前に共有していると思っている「今」は、実のところ、たえず合わせ直されている近似値にすぎない。その合わせ直しの仕組みを覗くと、同期という言葉の難しさが見えてくる。
インターネットの時計合わせを担うのが、NTP——ネットワークタイムプロトコルだ。デイヴィッド・ミルズが設計したこの仕組みは、正確な時刻を持つ上位のサーバーへ問い合わせ、その応答にかかった往復時間を測り、片道分を差し引いて現在時刻を推定する。ここで重要なのは、遅延を測ることが同期の前提になっている点だ。遅延のばらつきが大きければ、片道の推定も揺れる。だからNTPは一度で合わせず、何度も観測して少しずつ寄せていく。
絶対時刻より、前後関係
しかし、いくら丁寧に合わせても、完全な一致は得られない。光の速さには限りがあり、観測には誤差がつきまとう。ならば、そもそも何のために「同じ今」が要るのか。ここでレスリー・ランポートの一九七八年の論文が効いてくる。彼は、分散システムにおいて本当に必要なのは絶対時刻の一致ではなく、出来事の前後関係——どちらが先に起きたか——の整合だと論じた。
たとえば、あるメッセージが送られた後にしか、それへの返信は存在しえない。この順序さえ守られていれば、二つの機器の時計が数ミリ秒ずれていても、システムは正しく振る舞える。ランポートが提案した論理時計は、物理的な時刻ではなく、この因果の順序を数える仕組みだった。同期の問題は、こうして「時刻を合わせる」から「順序を保つ」へと組み替えられた。
ずれを管理するということ
この視点は、同期という言葉のイメージを静かに変える。同期とは、すべての時計を一点に固定することではない。むしろ、避けられないずれを、許容できる範囲に収めつづける運用のことだ。NTPがずれを測って寄せ続けるのも、ランポートが順序だけを問題にしたのも、完全な一致を諦めたうえで、実用に足る整合を保とうとする態度において一致している。
もっとも、許容できるずれの大きさは、用途によって桁が違う。金融取引のログでは、わずかな順序の入れ替わりが意味を持つ。一方、日常の画面表示では、数十ミリ秒のずれは誰も気づかない。会話の間合いのように、人の知覚が境界になる場面もある。裏を返せば、「同期できている」という言葉は、それ自体では何も保証しない。どの粒度で、何のために合わせているのかを抜きにしては、ずれの良し悪しは決められない。
二つの時計が違う時刻を指していても、世界は破綻しない。重要なのは、その違いが、いま行おうとしていることに対して小さいかどうかだ。同期とは、完全な一致への到達ではなく、ずれと共に正しく振る舞う技術である。「同じ今」を共有しているという感覚は、たえず背後で働く合わせ直しによって、かろうじて成り立っている幻に近い。その幻を、必要なだけ確かに保つこと——それが、離れた機械たちが協調するための、地味で本質的な仕事なのだ。
参考文献
- Leslie Lamport「Time, Clocks, and the Ordering of Events in a Distributed System」Communications of the ACM, 1978.
- David L. Mills「RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification」IETF, 2010.