Skip to content

v0.28.56

Choose a tag to compare

@zalando-robot zalando-robot released this 26 Oct 11:13
2237f1e

Changes

perf(routesrv): only recompress zones whose routes actually changed (#4378)

formatAndSet rebuilt every zone's compressed routing table whenever the
global table changed, even if most zones' content was identical to what
was already stored. In the common steady-state case - one availability
zone's endpoints change while others don't - this wasted a full
eskip.Fprint + gzip pass per untouched zone, and needlessly advanced
their Last-Modified, defeating If-Modified-Since caching for those
zones.

formatAndSet now hashes each zone once and only recompresses, re-counts,
and re-timestamps a zone whose hash differs from what is already stored.
Zones no longer present in zoneAwareRoutes are deleted from all internal
maps so requests for them fall back to the global routing table instead
of serving stale data.

                              │    before    │                after                │
                              │    sec/op    │    sec/op     vs base               │
FormatAndSet-14                 540.1m ± ∞ ¹   536.1m ± ∞ ¹        ~ (p=1.000 n=5)
FormatAndSetNoChange-14         122.4m ± ∞ ¹   126.4m ± ∞ ¹        ~ (p=0.548 n=5)
FormatAndSetOneZoneChanged-14   535.1m ± ∞ ¹   475.7m ± ∞ ¹  -11.10% (p=0.008 n=5)
geomean                         328.3m         318.3m         -3.04%

                              │    before     │                after                │
                              │     B/op      │     B/op       vs base              │
FormatAndSet-14                 227.8Mi ± ∞ ¹   227.8Mi ± ∞ ¹       ~ (p=0.841 n=5)
FormatAndSetNoChange-14         86.34Mi ± ∞ ¹   86.34Mi ± ∞ ¹       ~ (p=1.000 n=5)
FormatAndSetOneZoneChanged-14   231.7Mi ± ∞ ¹   229.7Mi ± ∞ ¹  -0.89% (p=0.008 n=5)
geomean                         165.8Mi         165.3Mi        -0.30%

                              │    before    │               after                │
                              │  allocs/op   │  allocs/op    vs base              │
FormatAndSet-14                 2.380M ± ∞ ¹   2.380M ± ∞ ¹       ~ (p=0.897 n=5)
FormatAndSetNoChange-14         700.0k ± ∞ ¹   700.0k ± ∞ ¹       ~ (p=1.000 n=5)
FormatAndSetOneZoneChanged-14   2.483M ± ∞ ¹   2.483M ± ∞ ¹       0.00% (p=0.008 n=5)
geomean                         1.605M         1.605M         -0.00%

Multiarch Docker image

Multiarch Docker image is available in GitHub's docker registry:

docker run -it ghcr.io/zalando/skipper:v0.28.56 skipper --help