라이브 강의에서 인기 강의에 트래픽이 몰려 다대다 연결 과정에서 레이턴시가 증가하는 것을 방지하는 방법 #16
judy-kimsohui
started this conversation in
Deepdive
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
이 프로젝트에서 어떤 문제가 발생했고, 어떻게 해결했나요?
주디 역할 : API 개발 - 스프링
실시간 피드백과 소통이 중요한 플랫폼을 개발하고 있습니다. 낮은 지연시간과 정확한 데이터 전달이 필요합니다.
인기 강의에 사용자 몰림, 다대다 연결 과정에서 트래픽 발생으로 실시간 소통에 문제가 생길 수 있습니다.
강의 조회 등과 같은 변동이 적은 부분은 캐싱 데이터를 활용해 API 호출을 줄일 수 있습니다.
채팅에서 사용자 인증과 권한 부분을 검증하여 반복 요청을 줄일 필요가 있습니다.
인기 강의에서 자주 조회되는 영상 등은 캐싱하여 부하를 분산할 수 있습니다.
웹 소켓과 RTC에서 발생할 수 있는 문제를 제 역할과 연관지어 글을 작성하려고 합니다.
리버스 프록시와 API 게이트웨이를 활용한 API 요청 캐싱 전략 기술에 대해 공부하고, 프로젝트에 적용해본 경험을 적고 싶습니다.
모니터링 툴, 모니터링 자동화? 감지는 가능할까요? ElasticSearch
강의 목록 조회 (REST API)
리버스 프록시 캐싱: Nginx 등의 리버스 프록시에서 강의 목록 데이터를 캐싱하여 다수의 중복 요청을 처리.
캐싱 주기: 5분 (TTL 설정을 통해 강의 목록 변경 주기를 반영).
ETag 또는 Last-Modified 헤더 사용: 클라이언트 측에서 변경되지 않은 데이터를 요청하지 않도록 제어.
사용자 인증 및 권한 검증 (REST API)
API 게이트웨이에서 인증 토큰 캐싱: JWT 또는 세션 기반 토큰을 일정 시간 동안 캐싱하여 인증 서버로의 반복 요청을 최소화.
캐싱 주기: 15분 (세션 만료 시간에 맞춰 설정).
JWT 유효성 검증: 게이트웨이에서 자체적으로 토큰 검증을 처리하여 인증 서버 부하를 줄임.
실시간 퀴즈 및 채팅 (웹소켓)
리버스 프록시를 통한 웹소켓 연결 관리: Nginx 등의 리버스 프록시가 웹소켓 연결을 효율적으로 관리하고, 다수의 실시간 연결을 로드 밸런싱.
캐싱 대신 로드 밸런싱: 실시간 데이터는 캐싱되지 않으므로, 부하 분산을 통해 성능을 최적화.
세션 지속성 유지: 실시간 연결이 끊기지 않도록 세션 지속성을 고려한 설정.
강의 녹화 영상 재생 (WebRTC)
CDN 및 리버스 프록시를 통한 캐싱: 녹화된 강의 영상은 CDN을 통해 글로벌 캐싱하고, 리버스 프록시로 자주 조회되는 영상을 캐싱하여 서버 부하를 분산.
캐싱 주기: 영구 또는 일정 기간(예: 7일) 동안 유지.
HLS 스트리밍: HTTP Live Streaming을 활용하여 녹화 영상을 분할 전송해 효율적으로 스트리밍 처리.
Beta Was this translation helpful? Give feedback.
All reactions