見出し画像

クライアント・サーバー間のデータ転送時間を正確に計測する方法を考えてみた

この記事の内容

この記事では、通信プロトコルの比較のため、クライアント・サーバー間のデータ転送時間を計測・比較する際に直面した問題と試行錯誤したことをまとめています。計測方法の問題とアプローチをまとめるものであり、通信プロトコルの比較には触れません。

やりたいこと

画像処理システムにおいて、クライアントからサーバーへ200KB前後の画像データを高速で転送することとなりました。データ転送に用いる通信方式を選定するため、gRPCのUnary RPCとBidirectional streaming RPCの転送時間の計測・比較を行います。
本記事中の、「データ転送時間」とは下図中の赤矢印を指します。

画像1

当初の計測方法

データ転送時間を比較するため、クライアントからサーバーへダミーデータを送信して経過時間の統計値を算出します。データ転送時間は、送信時刻(クライアントのシステム時刻)と、受信時刻(サーバーのシステム時刻)の差分として計測します。

問題点

この計測方法の問題は、送信時刻と受信時刻を測定する時計(システム時刻)が異なっていることです。
単純に上記の方法でデータ転送時間を算出すると、マイナス値が出てしまいました。これは、転送時間よりも、クライアントのシステム時刻とサーバーのシステム時刻のズレが大きいことが原因と考えられます。
転送時間は数ミリ秒と予測され、差分を計測するには、システム時刻のズレを少なくとも数ミリ秒単位以下にしなくてはいけません。

試したこと

上記の問題を解決するため、2つの計測方法を試しました。

①クライアントとサーバーのシステム時刻のズレを解消する
クライアントとサーバーのシステム時刻のズレを小さくするため、共通のNTPサーバーで時刻同期します。クライアントとサーバーの2つの異なる時計の時刻を合わせる試みです。
結果は、時刻同期前と同様にマイナス値が散見され、ズレを小さくすることはできませんでした。NTPサーバーでの時刻同期では、数ミリ秒から数百ミリ秒位の誤差があるようです。この誤差のため、クライアントとサーバーのシステム時刻のズレを十分小さくすることはできませんでした。

NICTではNTPサーバに供給する時刻の精度向上に努めておりますが、利用者の時刻精度はNTPサーバから利用者の方々までのインターネット環境に応じて数ミリ秒から数百ミリ秒位まで大きく変化する場合があります。このため、現在のインターネットでは利用時の時刻精度の保証ができない点をご了承ください。
出典:https://jjy.nict.go.jp/tsp/PubNtp/index.html

②クライアントのシステム時刻のみで計測する
クライアントとサーバーのシステム時刻のズレが問題なので、クライアントのシステム時刻のみで計測します。2つの異なる時計ではなく、1つの時計で計測する試みです。
サーバーは、画像データを受信後、同じデータをクライアントにレスポンスするように処理を変更しました。また、クライアントでは、データ送信時刻とデータ受信時刻から、往復分のデータ転送時間を算出し、1/2にしてデータ転送時間とすることとしました。結果、当初定義したデータ転送時間と厳密には異なりますが、マイナス値が算出されることはありませんでした。

画像7

結論

クライアントとサーバーのシステム時刻のズレを解消することが難しいため、①の計測方法では正確な値を算出できませんでした。よって、②のクライアントのシステム時刻のみで計測することとしました。
下記グラフにそれぞれの計測方法の計測結果を示します。誤差範囲はどちらも十分計測可能な範囲ですが、①は転送時間がマイナス値を示しており正確な値でないことが分かります。

画像2

まとめ

通信プロトコル比較のため、データ転送時間を計測しました。クライアントとサーバーのシステム時刻のズレが大きく、正確なデータ転送時間を計測できなかったため、クライアントのシステム時刻のみでデータ転送時間を算出しました。
同じような経験をされている方との情報共有の場となりますと幸いです。また、よりよい計測方法をご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。最後までご覧いただきありがとうございました。


この記事が気に入ったらサポートをしてみませんか?