zeroserve — это высокопроизводительный HTTPS-сервер, который выполняет eBPF-скрипты в userspace. Теперь у него появился Caddy-совместимый режим: если скормить ему Caddyfile, zeroserve JIT-компилирует его сначала в eBPF, а потом в нативный машинный код для x86_64 или ARM64 и запускает всё в цикле событий io_uring.
Разработчик привёл бенчмарки. Сравнивали HTTPS reverse proxy на двух потоках с AMD Ryzen 7 3700X. zeroserve с компилятором zeroserve-clang выдал 38 948 запросов в секунду, p50 — 1.45 мс, p99 — 3.91 мс, пиковое RSS — 30.9 MiB. Версия на tcc чуть медленнее: 36 653 req/s, но всё равно быстрее nginx (37 424 req/s). При этом caddy показал всего 12 529 req/s, p50 — 4.74 мс, p99 — 13.11 мс, и потреблял 67.4 MiB памяти. То есть zeroserve легко обходит Caddy в три с лишним раза по throughput и сильно выигрывает по памяти.
Код открыт, попробовать можно прямо сейчас. Достаточно скачать бинарник с GitHub, сделать его исполняемым и запустить с флагом --caddy, указав путь к вашему Caddyfile. После этого zeroserve поднимется на localhost:8080.
Главная фишка — в сервере можно вызывать собственный eBPF-код прямо из Caddyfile через директиву zeroserve_call. Это Turing-complete, так что возможности почти безграничны. Например, в статье показан прокси на S3-совместимое хранилище с AWS SigV4-аутентификацией. Берёте файл io.su3.aws-sigv4.c, подключаете его плагином, и в конфиге для домена example.com настраиваете маршрут. zeroserve сам подписывает запросы, переписывает пути и проксирует на нужный endpoint.
Автор проекта — Heyang Zhou. Обновление вышло под версией v0.2.11.