좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.
26
2 asked
좋아요, 조회수등 단순 카운트에서 Redis를 쓰는 이유중 하나로 RDB 의 병목현상을 말씀해 주셨는데
Redis의 INCR 명령어 역시 수만개의 좋아요 처리를 한다면 같은 이유로 병목 현상이 발생하는게 아닌지 궁금합니다.
Answer 2
0
안녕하세요. 좋은 질문 주셨네요.
Redis도 싱글스레드이기 때문에 요청이 몰리면, 줄을 서는 것은 동일합니다.(RDB는 Lock으로 대기를 하는 거지만, 줄을 서는 것은 동일합니다.)
다만, 이 둘 간의 처리 속도는 상당히 차이가 납니다.
RDB: Lock 획득과 대기, Lock 해제 + Disk 쓰기(or WAL 기록) --> 수십 ~ 수백 마이크로초(µs) 소요
Redis INCR: 메모리 연산 1회 --> 수백 나노초(ns) 소요
(참고) 1 마이크로초 = 1,000 나노초
속도 차이가 100배~1000배 수준이라, 같은 수만 건을 처리할 때 RDB가 병목이 될 가능성이 더 큽니다.
물론 Redis도 감당 못 할 수준의 트래픽(초당 수백만 건 이상)이라면 뭔가 튜닝이 필요합니다.
0
안녕하세요, 인프런 AI 인턴입니다. portal.bj님.
좋아요 또는 조회수와 같은 단순 카운트 처리에서 Redis가 선호되는 이유에 대해 아주 좋은 질문을 주셨습니다. 실제로 이러한 카운트 작업에 RDBMS가 아닌 Redis를 사용하는 이유는 성능과 효율성에 큰 차이가 있기 때문입니다.
Redis 사용의 이유:
메모리 기반의 데이터 저장소: Redis는 메모리 기반의 데이터베이스로, 데이터의 접근 속도가 매우 빠릅니다. 따라서 수많은
INCR연산을 동시에 처리하는 데 있어 탁월한 성능을 보입니다.단일 스레드 모델: Redis는 단일 스레드로 작동하며, 이를 통해 데이터의 일관성과 동시성 문제를 효율적으로 해결합니다. 이는 특히 카운터처럼 잦은 갱신이 필요한 데이터에 유리합니다.
부하 분산: RDBMS는 디스크 기반으로 동작하여 I/O 병목이 발생할 가능성이 있으나, Redis는 메모리에서 모든 작업을 처리하므로 이러한 병목 현상을 잘 관리할 수 있습니다.
레이지 로딩 및 스냅샷: Redis는 데이터를 메모리에 올리고 주기적으로 스냅샷을 생성하여 비정상 종료 상황에서도 데이터 유실을 최소화합니다.
병목 현상에 대해:
INCR 명령어가 수만 개의 요청을 처리할 때 발생할 수 있는 병목 현상이 완전히 없는 것은 아닙니다. 하지만 Redis가 해당 연산을 처리하는 방식과 경량의 특성 덕분에 일반 RDBMS에서는 병목 현상이 날 상황에서도 보다 원활한 처리가 가능합니다. 저부하에서는 거의 문제없이 모든 요청을 소화할 수 있으며, 필요에 따라 샤딩(Sharding)을 통해 Redis 클러스터로 확장하는 방법도 고려할 수 있습니다.
질문하신 내용과 관련해 병목 현상 해결 방법 및 Redis 사용에 대한 더 많은 정보를 제공받을 수 있는 기존 질의응답을 확인해 보시면 유용할 것입니다:
- Redis Container 해킹: 이번 게시물에서는 Redis의 강점과 보안 설정에 관한 팁을 확인하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
라우팅 테이블 설정 중 궁금한게 있습니다.
0
26
1
user-service jwt
0
27
2
애그리거트 질문있습니다!
0
21
2
Redlock 알고리즘 관해 궁금한게 있습니다!
0
29
2
Agent Builder 서비스가 보이지 않아요
0
23
1
Build 관련 문제 (테스트 관련 문제)
0
30
1
consumer에서 에러가 발생할 경우 데이터 유실 문의
0
34
2
게시글 테스트 데이터 삽입
0
41
2
강의가 검은 화면으로 나옵니다.
0
42
1
mysql 의 bitmap
0
32
1
주제영역3 데이타 조회 문의
0
30
2
인덱스 관련 질문 있습니다.
0
51
1
비관적 락 구현 방식 문의 건
0
60
2
강의노트는 제공 안해주시는 게 맞나요?
0
43
1
[개발 환경 준비 인증하기] 미션 제출 방법 문의
0
58
3
백엔드 서버 코드 변경에서 프론트엔드 서버가 값을 파싱하지 못하는 문제
0
77
1
강사님 GETDEL 관련해서 질문 있습니다
0
84
2
미션 마감은 언제 되는 건가요?
0
55
1
비밀번호를 걸고 실행된 레디스 서버에 lua 스크립트를 등록하는 경우
0
72
2
보안 설정을 한 수강생들은 Connection Settings에 비밀번호를 넣어야 추가되네요
0
55
2
29강 업로드 일정 문의드립니다.
0
45
2
Redis Container 해킹
0
99
1
동영상길이가 3초입니다.
0
51
1
기존에 학습했던 진도는 체크가 전부 풀려있습니다.
0
50
2

