2025/11/03 13:51 I Built a One File Edge Probe to Tell Me When Time Is Lying

やっほー、ロボ子!今日はネットワークのトラブルシューティングについて話すのじゃ。

博士、こんにちは。トラブルシューティング、興味深いです!

今回のニュースは、ネットワークやアプリに問題がないかを確認するための、安価なWebアプリを構築するというものじゃ。

なるほど。具体的には、どのようなアプリなのでしょうか?

Android/iPad/ラップトップを持つ人が「自分に問題があるのか、エッジボックスに問題があるのか」を判断するためのものじゃ。技術者が`/probe`を開いて、緑色なら問題ないと判断できる。

シンプルで分かりやすいですね!どのように実現するんですか?

単一のHTMLファイルをGitHubに配置して、ローカルゲートウェイ上のnginxから提供するのじゃ。簡単じゃろ?

確かに簡単ですね!でも、PTP/IEEE-1588モニターではないと書いてありますね。

そうじゃ。サブマイクロ秒の精度は提供しないし、サーバーが正しいことを証明するものでもない。あくまでブラウザレベルの健全性プローブなのじゃ。

ブラウザレベルですか。具体的には、どうやって時間を計測するんですか?

クライアントの`Date.now()`とサーバーの`/time`を比較するのじゃ。不一致の程度(〜X ms)と安定性を表示する。

`/time`エンドポイントは、どのような情報を返すんですか?

サーバー側は、システム時刻(CLOCK_REALTIME)をJSONとして返す単純なルートじゃ。CORSはオープンにする必要があるぞ。例えば、こんな感じじゃ -> `{ "epoch_ms": 1730615400000 }`

PWA(Progressive Web App)の機能もあるんですね。オフセットやジッターを表示するんですか。

そうじゃ。オフセットが50ms以下でジッターが低い場合、緑色で表示するのじゃ。直感的で分かりやすいじゃろ?

レイテンシの考慮事項として、`offset = server_time - client_time + rtt/2`を使用するとありますね。対称的なレイテンシを仮定しているとのことですが、公共インターネットやLTE、衛星回線では非現実的だと。

その通り!あくまで目安じゃな。PTPの代替とならない理由も、ブラウザがPTPをサポートしていないことや、PTPがより低いレイヤーで動作し、ハードウェアタイムスタンプが必要なことが挙げられている。

PTPはクロックをサブミリ秒/サブマイクロ秒に同期させることを目的としていますもんね。このPWAは単なるビューアだと。

実際の使用例としては、HTMLを`http://edge-gw.local/probe.html`に配置して、`/time`を`http://edge-gw.local/time`に配置するのじゃ。技術者に「プローブを開き、赤色ならスクリーンショットを送信」と指示すれば、オフセットやジッター、正しいゲートウェイに接続している証拠を取得できる。

クライアントのクロックが狂っているかどうかを迅速に判断し、チケットを短縮できるのが目的ですね。

そういうことじゃ!このアプリがあれば、技術者は問題を切り分けやすくなるじゃろう。チケット対応もスムーズになるはずじゃ。

確かにそうですね。シンプルながらも、非常に実用的なツールだと思います。

じゃろ?ところでロボ子、時間が狂っている時計って、何て言うか知ってるか?

えっと…壊れた時計、ですか?

ブー!それは「惜しいな(おしいな)」じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
