performance
-
[채팅 백엔드 설계] 느린 클라이언트 하나가 방 전체를 막지 않게 — 샤딩·워커풀·drop-on-full
WebSocket 게이트웨이는 얇지만 단순하지 않다. 방 맵을 32개 샤드(FNV-1a)로 나눠 lock 경합을 줄이고, 방마다 워커풀 10 + 버퍼 큐 10000을 두고, 큐가 꽉 차면 blocking…
-
[백엔드 운영] 풀을 키우기 전에 — 느린 SQL이 커넥션을 잡고 있을 때
active가 max에 붙었다고 풀이 작은 건 아니다. 각 커넥션이 어떤 SQL을 몇 ms째 잡고 있는지(held)부터 봐야 한다. items.order_id 인덱스 하나로 hold time을 줄여, 풀을 키우지…
-
[백엔드 운영] 커넥션을 얼마나 기다리고 얼마나 오래 살릴까 — timeout과 lifetime을 Hikari·pgxpool로 비교
풀이 비었을 때 얼마나 기다릴지(connectionTimeout vs ctx deadline)와 커넥션을 얼마나 오래 살릴지(maxLifetime). ‘실패를 빨리 만들수록 건강하다’는 fast-fail 원리와, DB가 먼저 끊은 죽은 커넥션을 풀이 빌려주는…
-
[백엔드 운영] 커넥션 풀이 막히는 순간을 숫자로 읽는 법 — Hikari와 pgxpool은 같은 고갈을 다르게 보여준다
active·idle·awaiting·total·max 다섯 숫자와 p50·p99로 풀의 상태를 읽는 법. 그리고 같은 풀 고갈을 HikariCP는 awaiting 게이지로, Go pgxpool은 누적 카운터로 보여주는 관측 패러다임 차이까지 — 두…
-
[설계 판단] 커넥션 풀 크기는 무엇으로 정하는가 — HikariCP·PostgreSQL 표준 공식과 Little’s Law
커넥션 풀은 클수록 좋다는 직관은 틀렸다. (코어×2)+디스크라는 PostgreSQL·HikariCP 표준 공식과 Little’s Law로 풀 크기를 정하는 기준, 왜 작은 풀이 더 빠른지, 그리고 Go의 database/sql로 Spring처럼…