「QUIC at Snapchat」の備忘録

SnapchatのQUICの導入事例の記事を読んだので備忘録として書きました。

eng.snap.com

QUICの導入による、遅延の改善、BBRの適用によるエラーレート(接続タイムアウト、切断、などのエラーの発生率)、マイグレーションによるリクエスト成功率の向上、について触れられていました。

元記事は短いので元記事を読むのがいいかも?

snapchatのユース―ケースへのQUICの導入による向上

以下のような、改善がsnapchatのユースケースに適していると考えているようです。

Faster Connection Establishment

90%値で、300msecの遅延が発生します。この遅延が削減されるとユーザーの待ち時間を減らしユーザーエクスペリエンスを改善で決まる。

Improved Congestion Control

Snap (snapchatの中のサービスの一つではと推測します)では、アップロードするメディアが10MBになることもあります。良い輻輳制御アルゴリズムスループットの改善と遅延の削減につながり、巨大なメディアファイルへのエラーレートが減らせるようです。 この記事でいうエラーレートには接続のタイムアウト、接続が失われる、リクエストのタイムアウト、などが含まれているようです。

Multiplexing without head-of-line blocking

短いコンテンツに対する方法なユースケースがあります。これらは通常単一の接続’上でダウンロードされている。QUICによってHTTP/2のブロッキングの問題を取り除くことができます。

Connection migration across IP addresses

友人とアプリを使用しているときに、Wi-Fiの接続が失われることによってメッセージの送信に失敗するとエクスペリエンスが低下します。コネクションマイグレーションがこれを解決します。

Detection of lost connection

長いロードスピナー(ロード中にくるくるしているアイコン)は、特にフルスクリーンモードで楽しんでいるときに邪魔になります。 QUICでは接続が切れてリクエストが失敗しても、ユーザーフレンドリーなUIを提供しながら検知してリトライすることができます。

QUICの採用

Snapchatでは、Cronet というGoogleの実装を採用しているようです。 QUICの導入以外に、リッチなメトリクスとログによるObservabilityの改善も得られたようです。

導入結果の紹介

QUICの導入で、以下の3つの結果が得られたようです。

一つ目は遅延の改善です。 f:id:neko--suki:20210628215658p:plain

2019年10月に広告に対して、QUICを適用可能にしたようです。その結果、90パーセンタイル値と99パーセンタイル値、エラーレートが改善したことが図に表されています。

表の上部では、ネットワーク遅延について言及されています。 P50(50パーセンタイル値)ではほぼ差がありませんが、P90 (90パーセンタイル値)では6%、P99(99パーセンタイル値)では24%もの改善が見られます。

ページ下部のエラーレートでは、あまり差が出ていないようです。

レイテンシーを句にと地域でさらにブレイクダウンすると、相対的にネットワーク品質が悪い環境や、サービスから地理的に遠い場所で大きなレイテンシーの改善が見られたようです。

2つ目は、BBRの導入によるアップロード時のエラーレートの改善です。

f:id:neko--suki:20210628220210p:plain

BBRを導入したときの改善が表に書かれています。 P50、P90の時は、ペイロードが100KB以上の時に大きな改善が見られます。また、P99の場合はサイズによらず改善に効果が大きいようです。

三つ目はマイグレーションの結果です。 Androidでコネクションマイグレーションを可能にすることで、Wi-Fiの接続が切れるような場合でもリクエストの成功率が20%向上したようです。

今後について

QUICのカバレージの向上、BBRV2や、iOSのコネクションマイグレーションの導入でさらなる向上を目指しているようです。

所感

2016年頃のGoogleの論文から言われていた 相対的にネットワーク品質が悪い環境や、サービスから地理的に遠い場所で大きなレイテンシーの改善が見られた という結果が出たのは興味深いです。

また、マイグレーションの効果も期待ができるのではないかと思いました。(もうちょっと詳細を記事に書いてくれると嬉しいなと思いますが。。。)