Redis vs RDBMS 성능 테스트
기존에 구현한 `콘서트 예약 서비스`를 성능 최적화를 위해 DB -> 메모리 기반인 Redis 로 교체하고, 이에 따른 성능 테스트를 통한 결과를 확인하고자 합니다.
| Redis
데이터 처리 속도가 엄청 빠른 *NoSQL 데이터베이스
* NoSQL : key - value 형태로 저장하는 데이터베이스
| 장점
`인메모리`에 모든 데이터를 저장하기 때문에 데이터 처리 성능이 굉장히 빠르다.
이유는, 디스크 보다 메모리의 데이터 처리 속도가 월등히 빠르기 때문이다.
구분 | RDBMS(ex. MySQL) | Redis |
데이터 저장공간 | 디스크 | 메모리(RAM) |
| 성능 최적화 포인트
구분 | 대기열 입장 토큰 | 나의 대기 순번 조회 |
개선 포인트 | 만료시간이 5분인 wait 토큰 생성 | ZRank를 사용하여, 빠르게 순번 조회 |
콘서트 시나리오에 레디스나, 캐시를 사용할 최적의 포인트를 고민해봤다.
하지만 아래의 이유로 다른 기능에 대해서는 Redis 를 적용하지 않았다.
- 예약 가능한 날짜 조회 : as-is, 좌석이 매진됨에 따라 매진된 날짜는 조회되지 않음 = 실시간 변동성 데이터
- 예약 가능한 좌석 조회 : 마찬가지로 실시간 변동성 데이터
- 예약 내역 : 예약 가능 시간이란 정책이 있어, 캐시로 대체하려고 함. 하지만 조인 등 활용이 많은 데이터이기 때문에 DB로 둠
- 하지만 테이블을 Redis로 완전 대체할 경우가 아니라, 병행한다면 괜찮을지 한 번 더 고민해봐도 좋은 부분이지 않을까..
| 실행결과
테스트 항목 | Redis (평균) | DB (평균) |
요청 지속 시간 (avg) | 18.08ms | 30.12ms |
요청 지속 시간 (min) | 8.36ms | 7.32ms |
요청 지속 시간 (med) | 14.36ms | 16.82ms |
요청 지속 시간 (p90) | 23.98ms | 62.57ms |
요청 지속 시간 (p95) | 32.16ms | 107.41ms |
http_req_blocked (avg) | 67.87µs | 83.96µs |
http_req_waiting (avg) | 17.89ms | 29.92ms |
요청 성공률 | 100% | 100% |
초당 요청 수 | 약 9.82/s | 약 9.68/s |
(3회 평균 속도)
| 알게된 점
- 응답 속도: Redis가 DB보다 평균 응답 시간이 더 짧음
- 지연 시간: Redis의 90% 및 95% 지연 시간이 DB보다 낮아, Redis가 더 일관된 성능을 보임
- 초당 요청 수: 초당 처리할 수 있는 요청 수는 두 시스템이 비슷했지만, Redis가 약간 더 높음
| 끝으로
대기열에 대한 모든 기능에 대해 Redis 로 대체한 것이 아님에도 불구하고, Redis 에서 더 좋은 성능의 결과가 나왔다.
기대 했던 10배 이상의 성능을 확인한 것은 아니지만, DB가 더 빠르게 처리 되는 불상사가 발생하지 않았다.