Re: [Webtransport] Measuring the friction of Http3Transport

Luke Curley <kixelated@gmail.com> Tue, 17 November 2020 02:02 UTC

Return-Path: <kixelated@gmail.com>
X-Original-To: webtransport@ietfa.amsl.com
Delivered-To: webtransport@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C6EBE3A1872 for <webtransport@ietfa.amsl.com>; Mon, 16 Nov 2020 18:02:31 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id n0V7Yl4GMMCf for <webtransport@ietfa.amsl.com>; Mon, 16 Nov 2020 18:02:27 -0800 (PST)
Received: from mail-ot1-x329.google.com (mail-ot1-x329.google.com [IPv6:2607:f8b0:4864:20::329]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 1E0213A186D for <webtransport@ietf.org>; Mon, 16 Nov 2020 18:02:27 -0800 (PST)
Received: by mail-ot1-x329.google.com with SMTP id f16so17961867otl.11 for <webtransport@ietf.org>; Mon, 16 Nov 2020 18:02:27 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=nxK+OXjBkIXb6/LxOCPGH8yW/C+N8pOSBNWW3JreDxU=; b=nDbHA8Q9T2r4f56mo2wvrDbbQ+LUOzdboqYoXZT887WcDgaama12Qgb1Hn5VTtta3+ nH5tZGOy1DSsw3Epkso+5EyXqL2wTWCwfyk1UUe6dls0Qao09tm4LejBDDSnedn/52aj ltHbdRaT6Eh2VXH0Xh27RY2FwxGB+46V8zszw2iZXkvhELknSHME5x9IUskp63nPRY1F FhJYUqKDD1ahxnbppgimghiFFj+lEvE+i9QOkVwAXYhl9JVrgUYO8nN/fjCzvEiE6o2X x22EYLksh6XdaYwMZFiQt5GoukGhz1CR6IqRw0KT63mKSgWJFyfyxvQ0izK3u3O3HDv1 VoLQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nxK+OXjBkIXb6/LxOCPGH8yW/C+N8pOSBNWW3JreDxU=; b=gMQwE8vqn+xzV4f1WIgosvDZlv6KsrX9Y58fwM4lWwpJtCpTElwSxBSSyZgD1MesE/ iB3ddWU9kCDURYswBKUk2VjA8iLJ5kp9FFIsWlZre+KIJ06C0KSF7oMfeh3H95lL9PZu ozVaBU7DAUjCeI9vjbQ89cJK9coo8nhe+pfPfWN4ne91bsRFm8N39roCeHNEzZ24f1L8 +h1HlVbiv48o2xXmwWl+Bq0dXAK3yLGKNj+hkQRUCOy/ksT5dTMbBh0F9tKUbXxrg4LH 0+jPwYxJAWEjnQgz8bjO9JPl6Y0AH/4H/2oQQ/bRNlWWOtu4VgbKYrqJkdGVwSdQvaZP ozKA==
X-Gm-Message-State: AOAM5326nuu7xsteXxBe2NgJ+fBTT4KH0PKKedH/xJAAw/qi809ydEng mxX50GCLt7LV/Zdl1Obuo2oV0fzXyy18XmVzjhE=
X-Google-Smtp-Source: ABdhPJyT4VX4IKllZwIz8KoH5VnrJITT1+49/xRX845Jvd3Y3edwdmDxfvah3OAIPrx2VeYt9NsPTKsqeYTngfrkkXk=
X-Received: by 2002:a05:6830:22da:: with SMTP id q26mr1602870otc.127.1605578546392; Mon, 16 Nov 2020 18:02:26 -0800 (PST)
MIME-Version: 1.0
References: <CALGR9oZo3rPeSund3Te6NgEhfBq5yCYmvdFFtTZqkoZ_Js9AMw@mail.gmail.com> <CAHVo=Zk-1J55MMqRPGFc86k3ncHq9rdw1Qty_CtE4-ezi=C54A@mail.gmail.com> <CALGR9ob-0DNqnJA4OHQinATuzCn+mN8K7dfGHK+FQia99GGDsQ@mail.gmail.com> <CAHVo=ZnC0o8XGT-jJ6U6oMEd9AJyx00o1wu7HfG5RZTLhdn=2g@mail.gmail.com> <CAPDSy+4NRvMYUeS2qSkuDCHWic=MkrJFL8_e252z=8KvQ+C5Gw@mail.gmail.com> <CAOW+2dsd72duTsHUcimYddi_JFOWQ0k9b5E7JWDeX_AOy5Uw5A@mail.gmail.com> <CAPDSy+7-enTafBePpjLKdq-j6WVo3=bC1EXOZ1s-c4verraRFQ@mail.gmail.com> <CAOW+2dsVSTcvYsKB7XB7GJy6eo4sTr70LJcKWtoQ1KLhVKpmOA@mail.gmail.com> <CAKcm_gPUfBUVz8Kh-jbHeUDCOAfF6FsjLHYsF6aZDgbCkMUw8Q@mail.gmail.com> <CAPDSy+6TCOJwxDgS+tWyshDnMDrwGYSYVQMSw3rdgj_GtE2E5g@mail.gmail.com>
In-Reply-To: <CAPDSy+6TCOJwxDgS+tWyshDnMDrwGYSYVQMSw3rdgj_GtE2E5g@mail.gmail.com>
From: Luke Curley <kixelated@gmail.com>
Date: Mon, 16 Nov 2020 18:02:15 -0800
Message-ID: <CAHVo=Zk51+BAZxY6+-iUaM9cqFApnsyAeeoJ4YmqqA-uR3ojJw@mail.gmail.com>
To: David Schinazi <dschinazi.ietf@gmail.com>
Cc: Ian Swett <ianswett@google.com>, Bernard Aboba <bernard.aboba@gmail.com>, WebTransport <webtransport@ietf.org>, Lucas Pardue <lucaspardue.24.7@gmail.com>
Content-Type: multipart/alternative; boundary="000000000000eab4ba05b443e27d"
Archived-At: <https://mailarchive.ietf.org/arch/msg/webtransport/NXAKxJFYL-GSjris7NapxXhPqDI>
Subject: Re: [Webtransport] Measuring the friction of Http3Transport
X-BeenThere: webtransport@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <webtransport.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/webtransport>, <mailto:webtransport-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/webtransport/>
List-Post: <mailto:webtransport@ietf.org>
List-Help: <mailto:webtransport-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/webtransport>, <mailto:webtransport-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 17 Nov 2020 02:02:32 -0000

I think that's a good starting summary David. Some things worth mentioning:

For 1 and 4, Twitch is using QuicTransport for both native applications
(ex. mobile, desktop, devices) and web applications. It's minor, but we
benefit from the ability to use any QUIC library (technically we don't
implement datagrams...) instead only those with HTTP/3 and Http3Transport
support. I think this context was missing in the previous discussions.

For 3, QuicTransport can support 0-RTT if we declare the path/origin
handshake to be idempotent
<https://github.com/vasilvv/webtransport/issues/16>... unless the new
connection is routed to a different host. Both pooled Http3Transport and a
new QuicTransport connection could take the same number of round trips.

For 4 and 5, I'm worried about flow control
<https://github.com/vasilvv/webtransport/issues/22>. tl;dr a Http3Transport
session could easily exhaust flow control limits for the entire connection.
This seems especially negative if pooling is performed transparently (ex. a
Http3Transport session may silently break HTTP/3 or other sessions).

On Mon, Nov 16, 2020 at 5:10 PM David Schinazi <dschinazi.ietf@gmail.com>
wrote:

> I'd like us to take a step back, I think we're conflating many different
> topics here, and it's making it impossible to reason about this (at least
> for someone running on not enough sleep like I am this week).
>
> Topic 1: the complexity of implementing Http3Transport as opposed to
> QuicTransport on the client
>     From my perspective, all browsers interested in WebTransport are
> implementing HTTP/3, so I don't see much complexity there.
>     Please reply here if you know of complexities I'm not seeing
>
> Topic 2: the complexity of implementing Http3Transport as opposed to
> QuicTransport on the server
>     As far as I know, most server-side QUIC stacks also support HTTP/3,
> and for QuicTransport they already have DATAGRAM support so I think the
> delta is negligible.
>     Please reply here if you know of complexities I'm not seeing
>
> Topic 3: the benefits of pooling WebTransport
>     This allows saving round trips to get WebTransport up and running
>     This allows sharing congestion control state
>     This allows letting the QUIC implementation prioritize DATAGRAMs vs
> HTTP requests instead of relying on the kernel or routers which have less
> information
>     Overall, I think pooling is beneficial (though not an absolute
> must-have)
>     Please reply here if you know of benefits I'm not seeing
>
> Topic 4: the difficulty of pooling Http3Transport on the client
>     It appears that all browsers that are interested in WebTransport are
> implementing pooling in their HTTP/3 stack so additionally pooling
> WebTransport should not introduce more complexity
>     Please reply here if you know of complexities I'm not seeing
>
> Topic 5: the difficulty of pooling Http3Transport on the server
>     This one is trickier. If you have frontends that know how to route
> HTTP requests to backends, DATAGRAM support is going to be a whole new
> world.
>     However, and I think this is really important: implementing this on
> the server is OPTIONAL.
>     The server can easily use a different hostname (and different TLS
> certificates) for HTTP vs WebTransport and clients will not pool the two
> together.
>     Once you use different domain names per WebTransport object,
> Http3Transport has the exact same pooling properties as QuicTransport.
>     Please reply here if you know of complexities I'm not seeing
>
> What am I missing?
>
> Thanks,
> David
>
>
> On Mon, Nov 16, 2020 at 4:45 PM Ian Swett <ianswett@google.com> wrote:
>
>> I'm *very* concerned about any functionality that *requires* pooling.
>> Pooling is a client-specific optimization and pooling policy is subject to
>> change(within reason) at any time.  If applications are saying "it'd be
>> cool if we could share congestion control and loss recovery state between
>> H3 and WebTransport most of the time", then I can see there being
>> real(albeit small) benefits, just like there would be for putting
>> DataChannels and RTP into one QUIC connection for WebRTC.  If people are
>> intending to rely on pooling so an HTTP(hopefully H3) request can trigger a
>> WebTransport response, I think we're in a world of pain and
>> over-optimization.
>>
>> This is more obvious in light of the fact that a WebTransport endpoint is
>> likely not a generic CDN endpoint, as has been clearly stated by Mark
>> Nottingham.
>>
>> Bernard's comments above point to a tighter coupling between HTTP/3 and
>> WebTransport than I think is practical in production, unless I
>> misunderstood(which I may have, it's been a long day).
>>
>> All of this makes me think we should punt the HTTP based WebTransport
>> options down the road a year or so and focus on QuicTransport initially.
>> It's not to say we won't do them, but they're clearly more complex
>> than QuicTransport and it'd be good to have real deployment experience
>> prior to starting so we know what the requirements are and where the
>> dragons are lurking.  Also, the W3C should design APIs that make it easy to
>> detect failure to establish a QUIC-based WebTransport, and this ensures
>> those are well exercised.  Maybe we DO require pooling under certain
>> conditions and describe those, but there are likely privacy concerns under
>> some circumstances and I'm not enough of an expert to know what would be
>> acceptable to all clients.
>>
>> Some people in the WG may think we have to release a TCP based
>> WebTransport at the same time as a QUIC based one, but I don't think that's
>> true and even if we standardized them at the same time, it doesn't mean
>> both will achieve wide deployment at the same time.  As I said at the mic,
>> I don't see any reason YouTube would deploy a TCP based WebTransport given
>> it will have to maintain an HTTP/1.1 option for basically forever and
>> they've spent a good bit of effort to make sure that works as well as it
>> can.  It's clear to me there are compelling use cases right now for
>> QuicTransport, but the driving use cases for the fallback are not clear to
>> me.  Consistency is intellectually appealing, but doesn't drive deployments.
>>
>> Ian
>>
>> On Mon, Nov 16, 2020 at 6:36 PM Bernard Aboba <bernard.aboba@gmail.com>
>> wrote:
>>
>>> David said:
>>>
>>> "Where does this come from? A lot of QUIC servers are implementing QUIC
>>> datagrams, and once you have those the delta with h3 datagrams is
>>> negligible. Additionally, multiple h3 server implementers have indicated
>>> they want to support WebTransport. It's starting to feel like the pushback
>>> on HTTP3Transport is purely based on a perception of complexity from folks
>>> who haven't tried to implement it? If that's the case, then we should get
>>> some implementation experience to confirm or debunk that theory."
>>>
>>> [BA] The pooling use cases often involve an interaction between an
>>> HTTP/3 request/response and WebTransport.  so the HTTP/3 Request doesn't
>>> just elicit an HTTP/3 Response.  It also causes something else to happen,
>>> something that isn't specified in the HTTP/3 protocol, such as eliciting a
>>> datagram flow or bi/unidirectional stream from the server.  This is what is
>>> contemplated in several of the "Live Event" use cases, where the HTTP/3
>>> Request/Response would be requesting the desired Event. The major advantage
>>> over HLS is avoiding Head-of-Line blocking, reducing video freezes and
>>> stalls.  So developers understand the value that support for datagrams and
>>> server-initiated streams can provide - the question is whether they'll have
>>> all the interoperable pieces in place to deploy it.
>>>
>>> Just because a generic HTTP/3 server supports QUIC and WebTransport,
>>> doesn't mean that it will support these use cases.  I've been asked whether
>>> better interoperability and wider ecosystem support could be achieved by
>>> extending HTTP/3 in a way more in keeping with the existing protocol design
>>> - such as by allowing an HTTP/3 Request to specify a resource to be
>>> returned in a flow of datagrams.
>>>
>>> The situation might be more tenable if the node.js framework had HTTP/3
>>> and QUIC modules on the horizon.
>>>
>>> On Mon, Nov 16, 2020 at 1:00 PM David Schinazi <dschinazi.ietf@gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>> On Mon, Nov 16, 2020 at 12:40 PM Bernard Aboba <bernard.aboba@gmail.com>
>>>> wrote:
>>>>
>>>>> Luke said:
>>>>>
>>>>> "My primary concern is that Http3Transport requires non-generic
>>>>> modifications to the HTTP/3 layer mostly to support connection pooling. I'm
>>>>> worried that this will limit support for Http3Transport and complicates any
>>>>> HTTP/3 implementation that does support it."
>>>>>
>>>>> [BA] I have also heard this concern from developers. The concerns
>>>>> primarily arise from the pooling of HTTP/3 Request/Responses with
>>>>> WebTransport. This does enable some interesting use cases, such as a
>>>>> Request/Response (e.g. gRPC) that can result in a server sending datagrams
>>>>> or initiating bi-directional or uni-directional streams.  So there is
>>>>> perceived value, but the question is whether that value will be widely
>>>>> supported across the HTTP/3 ecosystem.
>>>>>
>>>>> At this point, most generic HTTP/3 servers are not expected to support
>>>>> HTTP/3 datagrams (not part of the HTTP/3 protocol) or Http3Transport
>>>>> (perceived as a niche protocol), so that pooling would only be possible
>>>>> when using a framework.  node.js will not have QUIC support for 12-18
>>>>> months (held up by OpenSSL) so even framework support is expected to be
>>>>> limited.
>>>>>
>>>>
>>>> Where does this come from? A lot of QUIC servers are implementing QUIC
>>>> datagrams, and once you have those the delta with h3 datagrams is
>>>> negligible. Additionally, multiple h3 server implementers have indicated
>>>> they want to support WebTransport. It's starting to feel like the pushback
>>>> on HTTP3Transport is purely based on a perception of complexity from folks
>>>> who haven't tried to implement it? If that's the case, then we should get
>>>> some implementation experience to confirm or debunk that theory.
>>>>
>>>>
>>>>> On Mon, Nov 16, 2020 at 11:37 AM David Schinazi <
>>>>> dschinazi.ietf@gmail.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Nov 16, 2020 at 11:34 AM Luke Curley <kixelated@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> We're on the same page that there's code in HTTP/3 that could be
>>>>>>> leveraged for QuicTransport in the form of the header parsing. I think
>>>>>>> there's a path to merge QuicTransport and Http3Transport by leveraging
>>>>>>> HTTP/3 for the handshake and QUIC for stream delivery.
>>>>>>>
>>>>>>> My primary concern is that Http3Transport requires non-generic
>>>>>>> modifications to the HTTP/3 layer mostly to support connection pooling. I'm
>>>>>>> worried that this will limit support for Http3Transport and complicates any
>>>>>>> HTTP/3 implementation that does support it.
>>>>>>>
>>>>>>
>>>>>> Hi Luke,
>>>>>>
>>>>>> I'm curious, could you elaborate on what these "non-generic
>>>>>> modifications to the HTTP/3 layer" are please?
>>>>>>
>>>>>> Thanks,
>>>>>> David
>>>>>>
>>>>>>
>>>>>>> On Mon, Nov 16, 2020 at 4:49 AM Lucas Pardue <
>>>>>>> lucaspardue.24.7@gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi Luke,
>>>>>>>>
>>>>>>>> On Mon, 16 Nov 2020, 12:26 Luke Curley, <kixelated@gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Just to clarify, when I say "QuicTransport is simpler" I really
>>>>>>>>> mean "QuicTransport has greater interoperability". You can take any QUIC
>>>>>>>>> implementation (+ datagram extension) and add a thin layer to support
>>>>>>>>> QuicTransport. It's a nice layering of protocols and it's something that I
>>>>>>>>> want to see in general as QUIC replaces TCP.
>>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks for the clarification. I appreciate the sentiment. But given
>>>>>>>> the development of QUIC its kind of surprising that people would find it
>>>>>>>> easier to identify an implementation that supports QUIC and datagram but
>>>>>>>> does not support HTTP/3.
>>>>>>>>
>>>>>>>> Thr situation for a more clean-room implementation is different, I
>>>>>>>> agree. However, by the time you've done all the hard stuff with QUIC, a
>>>>>>>> very focused HTTP/3 layer ends up quite thin too. You can ignore dynamic
>>>>>>>> compression, server push and extensibility points.
>>>>>>>>
>>>>>>>> I also see the current design being the thin end of the wedge. The
>>>>>>>> proposal I linked talks about HTTP-like header parsing. So its "just" a
>>>>>>>> thin layer to do some parsing. Then folks will probably want some want to
>>>>>>>> tweak parameter, acontrol channel, a way to do graceful close, a sprinkle
>>>>>>>> of GREASE. To extrapolate forward, what would be the delta be between some
>>>>>>>> final product QuicTransport and HTTP/3. Too small a delta and we've wasted
>>>>>>>> years of effort.
>>>>>>>>
>>>>>>>> Cheers
>>>>>>>> Lucas
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> On Mon, Nov 16, 2020 at 3:16 AM Lucas Pardue <
>>>>>>>>> lucaspardue.24.7@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi folks,
>>>>>>>>>>
>>>>>>>>>> To follow up on one thread of discussion during IETF 109. To over
>>>>>>>>>> simplify what we've heard a few folks say, they prefer QuicTransport
>>>>>>>>>> because it simpler and they don't need pooling.
>>>>>>>>>>
>>>>>>>>>> I'd like to push more on this, what is the measurable complexity
>>>>>>>>>> of HTTP/3 over QUIC plus a new application mapping that needs to be
>>>>>>>>>> defined? Let's isolate pooling as a variable and ignore it.
>>>>>>>>>>
>>>>>>>>>> Victor mentioned his proposal for a unified header semantic
>>>>>>>>>> across all transports, this is
>>>>>>>>>> https://github.com/ietf-wg-webtrans/draft-ietf-webtrans-overview/pull/4/files.
>>>>>>>>>> Taking a closer look at it, I have some concerns that I added as comments.
>>>>>>>>>> HTTP has semantics for a reason. If QuicTransport is going to start
>>>>>>>>>> borrowing HTTP piecemeal, I really wonder how simple people might feel it
>>>>>>>>>> is. I think it's important to avoid something that looks like HTTP but
>>>>>>>>>> behaves differently. Is it really much of a stretch to just do HTTP/3 but
>>>>>>>>>> give it a different ALPN so that we avoid problems related to
>>>>>>>>>> cross-protocol pooling?
>>>>>>>>>>
>>>>>>>>>> Cheers,
>>>>>>>>>> Lucas
>>>>>>>>>> --
>>>>>>>>>> Webtransport mailing list
>>>>>>>>>> Webtransport@ietf.org
>>>>>>>>>> https://www.ietf.org/mailman/listinfo/webtransport
>>>>>>>>>>
>>>>>>>>> --
>>>>>>> Webtransport mailing list
>>>>>>> Webtransport@ietf.org
>>>>>>> https://www.ietf.org/mailman/listinfo/webtransport
>>>>>>>
>>>>>> --
>>>>>> Webtransport mailing list
>>>>>> Webtransport@ietf.org
>>>>>> https://www.ietf.org/mailman/listinfo/webtransport
>>>>>>
>>>>> --
>>> Webtransport mailing list
>>> Webtransport@ietf.org
>>> https://www.ietf.org/mailman/listinfo/webtransport
>>>
>>