vdd 2022-04-22 notes

Nils Goroll nils.goroll at uplex.de
Fri Apr 22 14:31:15 UTC 2022


VDD 2022q1 NOTES

Paris 2022-04-21 - 2022-04-22


#1 martin on varnishlog scalability

- logging is a killer feature which users' business cases depends upon
- Some users would rather see clients wait than losing a log record.
- log clients are single threaded
- for multiple queries, basic structure building done per log client
- ideas

    - binary log nice to have, not a solution

    - solve desync issue by giving the option to report lost entries

      - or throttling / blocking varnishd

    - merge logging into varnishd

    - drop session logging, copy session attributes into request scope

    - potential to optimize logging away (kills varnishlog -d, could keep
internal buffers longer instead)

    - varnishlogd muti-query multi-thread (read shm and fan out to pipes/udses)

    - structured shared memory

    - use utility threads inside varnishd to write logs to fs, which is then
read by the clients.

    - compiled queries

    - pluggable, custom log implementations in varnishd, renovate interface
first (phk)

- side topics

    - custom tags for vmods

    - log all counter diffs


#2 phk jumps agenda and talks about how he spent the covid period (rational
R1000 machine at datamuseum.dk)

#3 Varnish Association / Charity / Forening / Verein / Foundation

- martin talks about VS efforts in this direction
- VS owners have welcomed the idea
- slide set from law firm LUCENTUM

    - disputed: Transfer copyright to foundation?

    - maybe not even relevant?

    - Lots of commitees

    - trademark: VS AB owns, licenses it to Verein

    - cost: VS willing to take on running costs

- Should the entity spread money for development "centralized VML"
- nils presents ideas for bylaws
- most important questions

    - do the bylaws get the verein involved in money etc?

    - "grassroots" or "corporate" style?


#4 TLS

- arguments:
      - ToS / QoS by content
      - Adaptive Congestion Control by content
      - kernel TLS for mallanox hw offload
- use cases

    - dynamic loading of certificates based on SNI from VCL

    - not just by name, want to prefer specific cert

    - session key sharing

    - vcl_${proto} {}

    - client certificates for backend connections

- should use something along the lines of CF keyless

    - no private keys in varnishd worker process

    - cert server should be pluggable, should have some kind of CLI

    - could significantly complicate H3

- martin: have done poc for plugging "keyless" as openssl encryption engine

    - seems hard to do it ssl lib implemention independent - try to not make it
hard to switch impl

    - VS: linking against stock openssl

- stack transports?
- do the work

    - UPLEX has sponsor

    - VS might upstream as open source

    - limit the scope to OpenSSL >= 1.1 ?

    - strawman the vcertd (dridi?)

- varnishtest

    - dridi has done 2 rounds of polishing of https in varnishtest

    - dridi has plans for a 3 round before porting to trunk

    - to submodule SOONER (revive slinks PR?)

      - when varnish is branched off, the vtest code can be bundled (no submodule)

      - needs patch back-ports convenience

      - refs

    https://github.com/vtest/VTest/pull/2

    https://github.com/varnishcache/varnish-cache/pull/2838


#5 H3

- Lars is still working on the quant project
- should look at msquic
- quictls openssl fork for quic
- haproxy has own quic
- argument against openssl is that h3/quic moves fast
- probably needs a new survey of available implementations (asad)

#6 extensions, pluggable stevedores and protocols (xx)

- phk talks about changes which are going to happen
- martin brings up loading extensions in mgmt, seems not to be a killer argument
- built-in stevedores stay in varnishd
- built-in stevedores will register before extensions, so default=malloc|umem
will remain

- martins batch insertion

    - HSH_Insert() EXP_Insert() BAN_Insert() batched functions

    - martin+slink


#7 >1 level of return(vcl, prefix="example.com"")

- current implementation is just defensive
- parameter with absolute limit on switches, default should remain just 1 level
- structure label names? xyz/abc -> xyz can only return (vcl(xyz/abc))

    - is the prefix argument absolute or relative

    - write the docs, implement


#8 bundled VMODs

- discussion about varnish-modules and var vs. objvar vs. native variables in vcl

objvar today:

vcl_init {
    new myvar = taskvar.string();
}
myvar.set("foo");
set resp.http.foo = myvar.get()

objvar with designated setter/getter methods:

myvar = "foo";
set resp.http.foo = myvar;

native scoped variable suggestion:

{vcl,client,backend}.* symbols
set client.var.foo = <string expr>;
set backend.var.foo = <string expr>;
set vcl.var.foo = <string expr>;

native scoped variable alternate suggestion:

{be{re{q,sp}}}.var.* with req=>bereq and {beresp,obj}=>resp copies

another scoped variable suggestion:

[global] {[req|bereq|resp|beresp]} [type] var;

beresp variables would be persisted with the object

-> write a concrete proposal for user docs (guillaume)

xkey:

    - vmod as is only works with non-persistent storage

    - should look at http-wg suggestion

    - important feature


suggestion for inclusion into varnish-cache

    accept: Filter accept-like headers

    bodyaccess: Client request body access

    header: Modify and change complex HTTP headers

    VS to upstream headerplus?

    str: String operations

    should turn into type methods, need arguments for type methods

    task for dridis apprentice

    tcp: TCP connections tweaking

    vsthrottle: Request and bandwidth throttling

    should be redone with modules and better methods


side discussion: issues with vmod cookie
- removes duplicate cookies
- need iterator over multiple cookies
-> simon please open cookie

#9 compiled VCL sideloading
- guillaume: still need vcl even if overriding cc_command for vmod import
- we should put vmods into .so
- complicated because of vmod random names

#10 slash stevedores (fixed size mem + persistent tiered)

#11 Homework assignment for friday, read: https://httpwg.org/http-extensions/
- asad recommends wg meeting videos, https://www.youtube.com/user/ietf/videos

#12 synth bodies and filters
- phk wants to remove the option to reset the synth body


- vsb is contigous region, good case for discontinous object creation
- dridi is of the opinion that vcl resetting the beresp.body should pay the cost
of resetting a vfp

#13 via backends

https://docs.varnish-software.com/varnish-cache-plus/features/backend-ssl/

dridi syntax suggestion:

backend proxy {
    .type = connect; # registered by vext proxy
    .host = "...";
}
backend b{1..3} {
    .type = http1; # built-in, default value
    .tls = true;
    .client_cert = "/bla/c{1..3}";
    .via = proxy;
    .host = "...";
    .authority = "...";
}
backend default {
    .type = round_robin; # registered by vext directors
    .via = [b1, b2, b3]
}

#14 multiple headers with the same name

shall implement
- xtaskvar.foreach_header(HEADER, SUB)
- xtaskvar.foreach_cookie(HEADER, SUB)
- HEADER.count
- std.sanitize_headers()

    - collect all collectable headers

- C code fail for more duplicate headers

    - date?


Legacy headers which are SF compatible could become binary
- https://mnot.github.io/I-D/draft-nottingham-binary-structured-headers.html
- https://www.rfc-editor.org/internet-drafts/draft-ietf-httpbis-retrofit-00.html

-> how could VCL look if those became a reality?

#15 parallel/async CLI

Implement cli-like interface to vkeyservd with async/parallel syntax
Check how this could look like for varnishd

Only specific commands would become async (vcl.load and vcl.inline mostly)
bans could serve as a template (vcl.load -a name ... -> 205 async started /
vcl.list shows "pending"/"failed")
buffer output in vsb, cli command to query (vcl.show -o vcl_name, -o for
compiler output)
martin suggests a "job interface" jobs.list / jobs.wait name

#16 optional vmods / conditional code?

import cookie [from PATH] [or skip];

with (import cookieplus) {
    # cookieplus.do_stuff()
} else with (import cookie) {
    # cookie.do_stuff()
} else {
    # regex time
}

-- 

** * * UPLEX - Nils Goroll Systemoptimierung

Scheffelstraße 32
22301 Hamburg

tel +49 40 28805731
mob +49 170 2723133
fax +49 40 42949753

xmpp://slink@jabber.int.uplex.de/

http://uplex.de/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-dev/attachments/20220422/d4d9afa8/attachment-0001.bin>


More information about the varnish-dev mailing list