ტექნოლოგიურმა საზოგადოებამ ახალი, მცირე ზომის და მაღალი წარმადობის HTTPS სერვერი — Zeroserve წარადგინა. მისი მთავარი უპირატესობა ე.წ. „zero-config“ მიდგომაა: სერვერი არ საჭიროებს რთულ კონფიგურაციულ ფაილებს, რადგან მთლიანი ვებ-გვერდი ერთ tarball ფაილშია მოთავსებული.

eBPF როგორც კონფიგურაციის ინსტრუმენტი

Zeroserve-ის გამორჩეული მახასიათებელია eBPF სკრიპტების მხარდაჭერა. ნაცვლად სტანდარტული კონფიგურაციული დირექტივებისა, მომხმარებელს შეუძლია დაწეროს eBPF პროგრამა, რომელიც თითოეულ მოთხოვნას მართავს. ეს მიდგომა საშუალებას იძლევა, მოთხოვნები დარეგულირდეს, დაშიფრდეს ან გადამისამართდეს რეალურ დროში.

პროგრამა მთლიანად მომხმარებლის სივრცეში (userspace) მუშაობს, რაც უზრუნველყოფს უსაფრთხოებასა და იზოლაციას. სკრიპტები JIT-კომპილირდება ნატიურ კოდში, რაც უზრუნველყოფს მათ მაღალ სიჩქარეს.

წარმადობა და io_uring

სერვერი სრულად ეყრდნობა io_uring ტექნოლოგიას, რაც ქსელური და დისკური ოპერაციების დამუშავებას მაქსიმალურად ამარტივებს. ტესტებმა აჩვენა, რომ Zeroserve მცირე ზომის ფაილების სერვირებისას Nginx-ზე 17%-ით სწრაფია.

serverreq/sp99
zeroserve36,6815.4 ms
nginx31,2267.8 ms
Caddy12,83022 ms

სერვერის დიზაინი ორიენტირებულია ერთ ნაკადიან (single-threaded) მუშაობაზე თითო პროცესისთვის. ეს სტრატეგია იდეალურია მასშტაბირებისთვის, რადგან დამატებითი პროცესების გაშვება მარტივი და ეფექტურია.

serverreq/sthroughputp99
zeroserve8,000782 MB/s22 ms
nginx7,600773 MB/s28 ms
Caddy6,084590 MB/s44 ms

eBPF vs Lua

enginereq/sp99
zeroserve eBPF (10 ms)43,7095.1 ms
zeroserve eBPF (2 ms default)31,3346.7 ms
nginx Lua (header_filter)28,6538.4 ms
enginereq/sp99
zeroserve eBPF (10 ms)46,9454.5 ms
nginx Lua (content_by_lua)41,2316.4 ms
zeroserve eBPF (2 ms default)32,3936.7 ms

ტრადიციულად, ვებ-სერვერებში სკრიპტირებისთვის Lua-ს იყენებენ. Zeroserve-ის შემთხვევაში, eBPF-ის გამოყენება 10 მილიწამიანი ინტერვალის პირობებში აჩვენებს უკეთეს შედეგებს როგორც შუალედური დამუშავების (middleware), ისე დინამიური JSON პასუხების გენერირებისას.

სერვერი მხარს უჭერს თანამედროვე სტანდარტებს, მათ შორის TLS 1.3-ს, HTTP/2-ს და JA4 თითის ანაბეჭდების ტექნოლოგიას. ეს ყველაფერი ერთ ბინარულ ფაილშია თავმოყრილი.

proxyreq/sp50p99
zeroserve26,4863.3 ms8 ms
nginx21,7614.2 ms10.5 ms
Caddy7,68310.3 ms33 ms

როდის გამოვიყენოთ Zeroserve?

proxyreq/sthroughput
nginx5,882585 MB/s
Caddy4,285406 MB/s
zeroserve3,631359 MB/s

Zeroserve განსაკუთრებით ეფექტურია მცირე ზომის მოთხოვნების მქონე სერვისებისთვის. თუმცა, დიდი მოცულობის ფაილების გადაცემისას Nginx კვლავ ინარჩუნებს უპირატესობას მისი დახვეწილი ბუფერული სისტემის გამო.

პროექტი უკვე ხელმისაწვდომია GitHub-ზე ღია კოდის სახით და განკუთვნილია დეველოპერებისთვის, რომლებიც ეძებენ მსუბუქ და პროგრამირებად ალტერნატივას არსებული ვებ-სერვერებისთვის.