UberがQUICを選んだ理由
またまた有名企業の技術選定シリーズ。これ、シリーズ化しようかな。
Most users access Uber’s services on the move, and the tail-end latencies of our applications running on TCP were far from meeting the requirements of the real-time nature of our HTTPS traffic. Specifically, users perceived high tail-end latencies across the world.
Uberのユーザと他のアプリのユーザの決定的な違いは、利用者が動きながら使うことだろう。tail-end latencies、つまり平均ではなく最も待ち時間が大きい状態を考えると、TCPは厳しい。
To overcome intermittent fluctuations in bandwidth and loss, cellular networks typically employ large buffers to absorb traffic bursts. Large buffers can cause excessive queueing, causing longer delays. TCP often interprets such queuing as loss due to time out durations, so it tends to retransmit and further fill up the buffer. This problem, known as bufferbloat, is a major challenge in today’s Internet.
TCPの何が厳しいかというと、通信網がintermittent fluctuations(断続的な変動)を吸収するためにバッファを持っているが、このバッファに入っているとTCPはパケットの損失だと解釈し、再送してしまう。
To successfully integrate QUIC and improve app performance in low connectivity networks, we replaced Uber’s legacy networking stack (HTTP/2 over TLS/TCP) with the QUIC protocol. We leveraged the Cronet¹ networking library from the Chromium Projects which implement a version of the QUIC protocol (gQUIC) that was originally designed by Google. The implementation is continuously evolving to follow the latest IETF specification.
QUICの実装にあたっては、CronetというChromium Projectのライブラリを使った。
Based on the analysis of the protocol’s actual performance on real traffic, we observed that around 80 percent of sessions successfully used QUIC for all requests, while about 15 percent of them used a mix of TCP and QUIC. Our current hypothesis about this mix is that the Cronet code library switches back to TCP upon timeouts since it cannot distinguish UDP failures and actual poor network conditions. We are currently working to solve this problem as we move forward with leveraging the QUIC protocol.
すべてQUICで動いているのは80%で、15%はTCPとQUICの混合だ。Uberのhypothesis(仮説)としては、CronetがUDPの接続失敗と、実際にネットワーク状態が悪い場合の区別が付かず、TCPに戻してしまう実装が原因で、Uber自身がQUIC実装することで解決しようとしている。
常にユーザが移動するアプリならではの技術選定という感じで面白かった。前にUberの上場申請を紹介した際は、技術的なアピールが少ないと指摘したが、計測と代替案が根付き、懐の深い技術選定をする印象だ。