4.8 KiB
RustProxy 0.34.0 DEV — 1,040-byte response, OPT3
Scope
Primary: uncached reverse proxy, HTTP/1.1 keep-alive, 1,040-byte body, no compression, ACL/security/logging/analytics/counters fully operational. Goal: ~100,000 RPS and >=80% of nginx on the same isolated host. Secondary: local Web Server/static files, measured independently. Version remains exactly 0.34.0; existing configuration and defaults are unchanged; no functions, checks or logs are disabled.
New code optimizations (relative to OPT2-FIX1)
src/acl.rs/src/proxy/cache_helpers.rs: borrow ordinary validated routing paths usingCow<str>during immutable route selection. Calls with escaped (%xx) or repeated separators still use the original strict allocator/decoder. Invalid control bytes, dot segments, UTF-8 and ambiguous encodings remain rejected; the original wire path is not rewritten.src/proxy/forward_entry.rsplus cache/Web Service call sites: retain the originalhttp::Urivalue so normal paths can remain borrowed during the entire mutable forwarding/rewrite operation. Cache-refresh tasks that need ownership still allocate explicitly and hold their ownString.src/forwarding.rs: a direct, untrusted TCP peer now obtains the same seven forwarding headers without allocating hop-chainVecstructures. Trust chains and the configuredtrust_forwarded_protologic use the unchanged full parser. IPv4/IPv6 RFC 7239 formatting and true listener port/scheme are preserved; untrusted spoofed values are still ignored.src/proxy/forward_entry.rs: when effective client IP is identical to the transport peer, reuse the IP stored by observation. No redundantIpAddr::to_string()and no per-exchange mutex write. Different/trusted or IPv4-mapped addresses are still stored in canonical form.src/proxy/headers.rs: plain single-valuedConnection: keep-aliveavoids the temporaryVec<HeaderName>while all standard hop-by-hop fields are removed; comma-separated, repeated and complex Connection fields keep the original removal parser to prevent nominated-header leaks.src/proxy/request_id.rs: preserve SHA-256, CSPRNG, per-process sequence, unpredictable 64-char hexadecimal IDs and wire headers, but write the hex digits into one preallocated byte buffer before UTF-8 verification.src/cache/stats.rs: select the most frequentcache_disabledreason counter directly. The same exact atomic totals, reason labels, 4096-domain limit and reset behavior are retained.
The changes avoid repeated work in common cases; no numerical throughput benefit has been measured for this new source. In particular, no cache, log, metrics, retry or auth feature was switched off for a synthetic benchmark.
Evidence and known limits
- Provided newly compiled OPT2-FIX1 executable SHA-256:
6037e98d059672b716f2e1411976bf305cac927901a6f6662d8b703829ff8196. - PASS 89 HTTP proxy/policy/cache black-box assertions, zero failures, testing that supplied executable, not the new OPT3 code.
- Source checks, migration/upgrade checks and ZIP checks are separate static/offline verification; they are not equivalent to cargo/test/live.
- A single interrupted diagnostic A/B sample at c=64, 3 s, same idle=64, gave older binary 33,752 RPS and OPT2-FIX1 binary 33,556 RPS, zero failed requests; do not infer a true performance difference from one sample.
- NOT RUN here:
cargo check,cargo test, rebuilt OPT3 integration tests, post-build A/B RPS, long soaking, real TLS/H2/H3 compatibility and 80%-of-nginx acceptance. No Rust toolchain is available in this editing container. - Resource/latency trade-offs (including log/analytics drops, RSS/FDs) require the same measured and pinned server/peer/generator CPU sets for before/after.
Rebuild and measure
From the unpacked RustProxy/ directory:
./dev.sh check
CARGO_INCREMENTAL=0 ./dev.sh test
bash dev.sh
python3 scripts/performance/regression.py \
--binary new=/ABSOLUTE/PATH/NEW/rust-proxy --out /tmp/rustproxy-opt3-http
python3 scripts/performance/ab_1kb_dev.py \
--binary before=/ABSOLUTE/PATH/OPT2FIX1/rust-proxy \
--binary after=/ABSOLUTE/PATH/OPT3/rust-proxy \
--nginx /usr/sbin/nginx --ab /usr/bin/ab \
--out /tmp/rustproxy-opt3-1kb --concurrency 16,64 \
--duration 5 --repeats 3 --workers 4 --max-idle 64
For an acceptance-grade evaluation, run the scripts/performance/benchmark.py
paired before/after/nginx test with separate pinned CPU sets, a verified origin
and 30-second runs repeated 7 times. Report median and p95/p99 latency,
errors, CPU, RSS, file descriptors, dropped log/analytics events, and all HTTP
status/body hashes. Retest TLS/H2/H3/WebSocket, auth, cache semantics and
connection/backpressure limits. Compare the rebuilt OPT3 binary against
OPT2-FIX1 at exactly the same listener/backend settings and compiler profile.