피드로 돌아가기
Zeroserve: eBPF로 스크립팅할 수 있는 무설정 웹 서버
GeekNewsGeekNews
Infrastructure

Zeroserve: eBPF로 스크립팅할 수 있는 무설정 웹 서버

eBPF 샌드박싱과 io_uring 결합으로 nginx 대비 최대 22% 성능 향상 구현

xguru2026년 6월 7일10advanced

Context

기존 nginx 및 Caddy의 선언형 설정 방식은 복잡한 제어 흐름 구현 시 별도의 스크립팅 런타임을 추가해야 하는 구조적 분절 발생. 설정 파일 기반의 정적 구성과 실행 시점의 동적 로직이 이원화되어 관리 복잡도 및 컨텍스트 스위칭 비용 증가.

Technical Solution

  • 구성 파일 제거 및 eBPF 프로그램을 통한 프로그램형 설정 모델 도입으로 라우팅부터 인증까지 단일 로직으로 통합
  • uBPF 기반 JIT 컴파일 및 Pointer Cage 적용을 통한 사용자 공간 내 안전한 샌드박스 실행 환경 구축
  • monoio 런타임과 io_uring 기반의 비동기 I/O 처리로 네트워크 및 디스크 작업의 시스템 콜 오버헤드 최소화
  • 단일 tarball 내 인덱싱 및 바이트 범위 읽기 방식을 통한 디스크 풀기 과정 생략 및 원자적 핫 리로드 구현
  • 선점 타이머(Preemptive Timer) 기반의 시간 분할 실행으로 특정 스크립트의 이벤트 루프 점유 및 병목 현상 방지
  • BoringSSL 기반 TLS 1.3 전용 스택 및 ECH 적용을 통한 현대적 암호화 통신 최적화

Impact

  • 소형 정적 파일 제공 시 단일 코어 기준 36,681 req/s 달성하여 nginx 대비 약 17% 성능 우위 기록
  • 10ms 선점 타이머 설정 시 완전 동적 JSON 응답 46,945 req/s로 nginx Lua(41,231 req/s) 대비 처리량 향상
  • 소형 응답 리버스 프록시 환경에서 26,486 req/s를 기록하며 nginx 대비 약 22% 빠른 처리 속도 증명
  • 유휴 상태 기준 약 15MB PSS 메모리 사용으로 경량 인스턴스 유지

Key Takeaway

선언형 설정의 한계를 JIT 컴파일 기반의 샌드박스 스크립팅으로 해결함으로써 설정과 로직의 경계를 허물고 런타임 효율성을 극대화함. 특히 I/O 바운드 작업에서 io_uring의 효율성과 CPU 바운드 작업에서 eBPF의 저비용 실행 구조를 결합한 고성능 엣지 서버 설계 전략 제시.


- 고빈도 소형 요청 처리 시스템 설계 시 io_uring 기반 비동기 런타임 도입 검토 - 복잡한 미들웨어 로직 필요 시 설정 파일 대신 JIT 컴파일 가능한 샌드박스 언어 채택 고려 - 무중단 배포를 위해 파일 시스템 디렉터리 구조 대신 단일 아카이브 기반의 원자적 교체 방식 검토 - 사용자 정의 스크립트 실행 환경 구축 시 선점 타이머를 통한 리소스 격리 및 가용성 확보 전략 수립

원문 읽기