성능 개요
aerospike-py (Rust/PyO3, native async)와 공식 aerospike Python client (C extension을 loop.run_in_executor로 래핑) 의 실측 벤치마크 결과. 이 저장소의 benchmark/ 에서 재현 가능합니다.
↓낮을수록 좋음,↑높을수록 좋음, 🔥 50%+ 개선. 기본 테스트 조건: FastAPI + DLRM + Aerospike CE, k6 10 VUs × 60s.
누적 효과 — DLRM serving p95
| 단계 | p95 | 원본 대비 |
|---|---|---|
원본 (공식 client + Python 3.11 + gather) | 324 ms | baseline |
| + aerospike-py로 교체 | 189 ms | −42% |
+ gather(N) → 단일 batch_read(mixed keys) | 126 ms | −61% |
| + Python 3.14t free-threaded | 97 ms | −70% 🔥 (3.3× 빠름) |
권장 조치
| # | 조치 | 효과 |
|---|---|---|
| 1 | 공식 client → aerospike-py로 교체 | p95 −42% (Python 3.11) |
| 2 | 런타임을 Python 3.14t free-threaded로 전환 | p95 −49% 추가, TPS +47% (Rust 변경 불필요) |
| 3 | gather(N) → 단일 batch_read(mixed keys) | p95 −33% (GIL 환경) |
| 4 | AEROSPIKE_PY_INTERNAL_METRICS=1 상시 ON | E2E 오버헤드 ≈ 0, 장애 시 stage 단위 즉시 attribution |
환경별 요약 (Python 3.11 + GIL)
주변 스택이 얇을수록 격차가 큽니다. 다만 tail latency 우위는 실 serving에서도 유지됩니다.
| 환경 | aerospike-py vs 공식 | 상세 |
|---|---|---|
| A) 순수 DB client (HTTP·ML 없음) | avg −80% (108→22 ms), TPS +171% (138→374) 🔥 | Benchmarks → A |
| B) uvicorn ASGI (FastAPI + DB) | mean −21% (290→228 ms), TPS +17% | Benchmarks → B |
| C) uvicorn + DLRM (실 serving) | p95 −42% (324→189 ms), avg −19% | Benchmarks → C |
더 보기
- Benchmarks — set별 표, k6 raw 출력, 서버 측 Prometheus 지표
- Free-Threaded Python — GIL 제거 (3.14t) 시 변화
- Bottleneck Analysis — 내부 stage profiling, 조치 #3 작동 원리
로컬 재현은 benchmark/README.md 참조.