익숙한 기준과의 비교
Minimal HTTP routing 기준에서 Akan Pure HTTP는 ElysiaJS, raw Bun.serve, Hono 같은 Bun 기반 minimal framework와 가까운 범위에 있습니다. 중요한 기준은 이것입니다. Akan은 higher-level API 기능을 사용하기 전 runtime 단계에서 큰 penalty를 치르지 않습니다.
ElysiaJS (Bun, minimal REST ping)133,564 RPS, p99 0.739ms
raw Bun.serve (Bun, minimal REST ping)129,970 RPS, p99 0.745ms
Hono (Bun, minimal REST ping)111,259 RPS, p99 0.843ms
Fastify (Node, minimal REST ping)83,034 RPS, p99 1.111ms
Akan Pure HTTP (Bun, runtime fast path)119,571 RPS, p99 0.812ms
Akan Signal API (Bun, Signal lifecycle)33,845 RPS, p99 2.958ms
Akan Signal API가 router-only framework보다 낮게 보이는 이유는 같은 양의 일을 측정하지 않기 때문입니다. Minimal router benchmark는 보통 요청을 받고 응답을 반환하는 경로만 측정합니다. 반면 Signal API는 Akan의 API lifecycle, middleware와 guard 지점, request argument 처리, response shaping, 그리고 load balancing에 쓰이는 gateway-to-worker 경로까지 포함합니다. 같은 기능을 minimal router에 middleware나 plugin으로 추가하면 그쪽도 추가 overhead를 지불하게 됩니다.
그래서 33,845 RPS와 p99 3ms 미만이라는 결과는 단순 ping보다 application-facing 수치로 더 의미가 있습니다. Akan의 higher-level API 경로가 일반적인 no-DB endpoint에 충분한 여유를 가진다는 뜻입니다.
Document list API에서 raw bun:sqlite는 storage ceiling입니다. SQLite가 row를 얼마나 빨리 반환할 수 있는지만 보는 수치입니다. Akan DB List는 의도적으로 더 많은 일을 합니다. SQLite 위에 document API 형태, 정렬, pagination, light projection, document materialization, response serialization, Signal response 처리를 추가합니다.
이 overhead가 문제가 되지 않는 이유는 측정 경로가 실제 list endpoint가 필요로 하는 동작에 더 가깝기 때문입니다. 5,268 RPS와 p99 14.957ms로 현재 list API SLO를 통과하므로 framework 비용은 보이지만 실용 범위 안에 있습니다.
WebSocket fan-out은 의도적으로 higher-level realtime framework가 아니라 raw Bun과 비교했습니다. 목표는 Akan이 raw WebSocket 코드보다 빠르다고 주장하는 것이 아닙니다. 의미 있는 질문은 Signal API와 같은 application model을 유지하면서 Akan pubsub 경로의 overhead가 실용 범위 안에 있는지입니다.
subscriber 1,000개 fan-out run에서 raw Bun은 약 49,983 messages/sec와 p99 약 8ms를 기록했습니다. Akan은 /api/ws pubsub 경로를 통해 50,000 messages/sec를 전달했고 p99는 11ms, dropped message와 connection error는 0개였습니다. Framework pubsub 경로를 통과한다는 점을 고려하면 작은 latency premium입니다.
subscriber 5,000개 local stress run도 49,917 messages/sec, drop 0%, p99 47ms를 기록했습니다. 다만 실행 중 connection error 3,362개와 child health-timeout이 발생했습니다. 이 수치는 headline benchmark가 아니라 local stress signal로 보는 것이 맞습니다.