기술블로그

네이버 메인 페이지의 트래픽 처리 - 서론

ignuy 2023. 6. 24.

국내 최대 규모 포털사이트 '네이버'

📑서론

PC나 스마트폰을 접하는 대부분의 사람들이 한 번 정도는 네이버 메인 페이지에 접근한 경험이 있을 것이다. 네이버는 기본적으로 트래픽이 많은 편이지만 사회적으로 이슈가 생겼을 때는 트래픽이 폭발적으로 늘어나게 된다.

포항 지진 당시 네이버 메인 페이지의 트래픽 변화

위 사진은 2017년 11월 포항에서 지진이 발생했을 때 네이버 메인 페이지의 트래픽 변화를 나타낸 그래프이다. 파란색 선이 평상시의 트래픽이고, 급격하게 상승한 붉은색 선이 지진 발생 당시의 트래픽이다. 14시 30분 12초부터 트래픽이 상승하기 시작해 평상시 트래픽의 6배 수준이 될 때까지 30여 초밖에 걸리지 않았다. 네이버의 개발팀은 이런 상황을 어떻게 해결하는지 알아보자.

 

📑일반적인 분산 처리 모델

웹서비스에서는 일반적으로 3-Tier 분산 처리 모델을 활용한다. 클라이언트의 트래픽은 로드밸런서를 통해 각 웹 서버로 부하 분산된다. WAS는 하나의 DB를 참조한다. 로드 밸런서를 사용하는 이러한 일반적인 3계층(3-Tier) 분산 처리 모델은 구성 요소에 문제가 생겼을 때 문제를 해결하기에 어려움이 있다. 일반적인 3-Tier 구조에서 각 구성요소에 장애가 생기는 상황을 가정해보자.

 

로드밸런서에 장애가 생긴다면 로드 밸런서를 다중화한 다음 DNS 라운드로빈 방식 등을 적용해 문제를 처리할 수 있다.

부하 분산(Load Balancing)의 기본 메커니즘
클라이언트가 특정 웹에 접속하려는 것을 가정한다. 웹주소에 해당하는 IP 주소는 DNS 서버에서 관리하는데 하나의 도메인 명에 여러 개의 IP 주소를 매핑하는 방법이 DNS Round Robin이다. 이로써 클라이언트에서 접근할 때마다 번갈아 다른 IP 주소를 연계해 줄 수 있다. 다만, 이 경우 서버가 계속 늘어날수록 복잡해지기 때문에 주로 로드 밸런서(Load Balancer)라는 서버를 추가로 구성한다. 로드 밸런서는 라우터를 통해 들어온 하나의 IP 주소에 대한 요청을 복수의 서버로 분산하게된다. 이 때, 이 로드 밸런서에 장애가 생기는 경우 서비스가 모두 정지해 버리므로 로드 밸런서나 라우터까지 다중화하는 방법이 있는데, 이 때 근간으로 사용하는 다중화 프로토콜이 VRRP(Virtual Router Redundancy Protocol)이다.

 

WAS에 문제가 생긴다면 다음과 같은 점을 고려해야 한다.

💡 WAS에 문제가 생겼을 때 웹서버가 다른 WAS를 찾도록 해야 한다.
💡 사용자가 로그인한 상태라면 WAS에 세션 클러스터링을 설정해야 한다.
💡 세션 클러스터링 설정을 위한 추가 작업이 필요하고 관리 지점이 증가한다.

위를 고려하면 WAS에 생긴 장애를 해결하기 위해선 단순히 서버를 늘려 다중화하는 것으로 문제를 해결하기가 쉽지 않다.

세션 클러스터링이란?
WAS가 2대 이상 존재할 경우 하나의 세션을 공유하여 대체된 WAS에도 동일한 세션을 관리하는 것을 의미한다. 예를 들어 L4 swtich가 사용자를 접속했던 WAS로 유도하지만 접속자 수가 초과하여 다른 WAS로 넘어가야 하는 상황에서 세션 불일치 문제가 생길 수 있기 때문에 세션 클러스터링으로 동일한 세션을 유지해야 한다.

데이터베이스에 문제가 생긴다면 다음과 같은 점을 고려해야 한다.

💡 데이터 동기화 등의 문제 때문에 데이터 스토리지 레이어는 다중화가 특히 어려운 부분에 속한다.
💡 사용하는 데이터베이스가 RDB라면 다중화를 어떻게 할 것인지, 데이터를 어떻게 분산할 것인지에 관해 신중하게 고민해야 한다. 예를 들어 샤딩 등을 도입했을 때 데이터가 늘어나 샤드를 추가해야 한다면 기존 데이터의 마이그레이션은 어떻게 할지 고민해야 한다.
💡 사용하는 데이터베이스가 NoSQL이라면 데이터 정합성, 동기화, 장애 복구 시 다수결에 의한 데이터 오염 가능성 등을 고려해야 한다.

데이터베이스 또한 이런 점 때문에 다중화하는 것으로 문제를 해결하기엔 비효율적이다.

데이터베이스 샤딩이란?
데이터베이스 샤딩은 대규모 데이터베이스를 여러 머신에 저장하는 프로세스이다. 단일 머신 또는 데이터베이스 서버는 제한된 양의 데이터만 저장하고 처리할 수 있다. 데이터베이스 샤딩은 데이터를 샤드라고 하는 더 작은 청크로 분할하고 여러 데이터베이스 서버에 저장함으로써 이러한 한계를 극복한다.

 

댓글