피드로 돌아가기
Introducing Zopa: a 60 KB authorization engine for proxy-wasm, written in Zig
Dev.toDev.to
Infrastructure

Zig 기반 60KB 초경량 Authorization Engine, Zopa 설계 분석

Introducing Zopa: a 60 KB authorization engine for proxy-wasm, written in Zig

kt2026년 5월 10일10advanced

Context

Envoy Proxy-wasm 환경에서 OPA의 무거운 Go 런타임과 Rego 파서 포함으로 인한 Binary Size 비대화 발생. Edge 단에서 단순 Allow/Deny 판별만 필요함에도 불구하고 불필요한 컴파일러 및 GC 오버헤드가 동반되는 구조적 한계 직면.

Technical Solution

  • Compiler-less Architecture: Rego 파서를 CI 단계로 분리하고 Wasm 모듈에는 컴파일된 AST JSON만 주입하여 Binary Size 획기적 감소
  • Zig wasm32-freestanding 타겟 채택: WASI 및 OS Syscall을 배제하고 stdlib의 최소 집합만 사용하여 60KB 수준의 초소형 바이너리 구현
  • Dual Allocator Memory Model: 모듈 전체 생명주기를 갖는 host_allocator와 요청 단위로 초기화되는 request_arena를 분리하여 GC 없이 메모리 관리
  • Arena Reset 전략: evaluate() 종료 시 arena.reset(.retain_capacity)를 호출하여 heap-grow 빈도를 낮추고 처리량(Throughput) 최적화
  • Phase-based Evaluation: Request Header, Body, Response Header 단계별로 타겟 룰 존재 여부를 bool 값으로 사전 판별하여 불필요한 평가 로직 스킵

- Edge Computing 환경에서 Wasm 모듈 크기 최적화를 위해 freestanding 타겟 및 WASI 제거 검토 - 고성능 요청 처리 시 개별 free 호출 대신 Arena Allocator를 통한 일괄 해제 및 메모리 재사용 패턴 적용 - 복잡한 DSL의 경우 파싱 단계를 외부로 분리하고 최적화된 AST 형태로 런타임에 전달하는 구조 설계

원문 읽기