Blog

[CS] 대용량 트래픽 발생 시 어떻게 대응해야 하나요?

Category
Author
Tags
PinOnMain
1 more property
Context
Table of Content

대용량 트래픽

요약

1.
서버의 수평적 확장(스케일 아웃)과 로드 밸런싱 서버를 수평적으로 확장하고 로드 밸런싱을 추가하여 트래픽을 분산시킨다.
a.
애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법입니다.
2.
서버의 수직적 확장(스케일 업 == CPU 추가, 램 추가, 서버 업그레이드 등등), 네트워크 대역폭(일정 시간 동안 전송 가능한 데이터의 양) 늘리기
3.
캐시 사용 캐시를 적용하여 반복적인 요청을 처리하는 데 필요한 리소스를 줄일 수 있다. 또한 캐싱된 데이터를 사용하면 요청에 대 한 응답 시간 또한 단축할 수 있다.
4.
CDN(Content Delivery Network) CDN을 사용해서 콘텐츠를 여러 리전에 분산하여 물리적인 거리를 줄여서 데이터 요청에 대한 응답 속도를 향상 시킬 수 있다.
a.
예를 들어 미국에 있는 사용자가 한국에 호스팅 된 웹사이트에 접근한다면 미국에 위치한 CDN서버에서 웹사이트 콘텐츠를 사용자에게 보내는 방식
b.
CDN을 쓰면 트래픽이 줄어들기 때문에 서버 유지 비용도 저절로 감소한다. 원리는 caching과 비슷하다. 자주 쓰이는 파일들을 중간중간에 replica로 만들어 놓아서 클라이언트가 replica에 접근할 수 있게 한다.
5.
데이터베이스 최적화 인덱스를 추가하거나 쿼리를 최적화하여 데이터 처리 속도를 향상 시킬 수 있다.
6.
DNS 캐싱 서버 사용 DNS 캐싱 서버를 사용하여 DNS 조회 요청을 줄여 응답 시간을 단축시 킬 수 있다.
a.
DNS 캐싱은 나중에 재사용할 수 있는 메모리 또는 로컬 디스크에 DNS 쿼리 결과를 저장하는 프로세스입니다. DNS 확인자가 요청을 받으면 먼저 캐시를 확인하여 과거에 해당 도메인 이름을 이미 확인했는지 확인합니다. 도메인 이름이 캐시에서 발견되면 확인자는 신뢰할 수 있는 DNS 서버를 쿼리할 필요가 없으며 캐시에서 직접 IP 주소를 반환할 수 있습니다.
7.
코드 최적화 코드를 최적화하여 실행 시간을 단축하면 처리할 수 있는 트래픽 양이 늘어날 수 있다.

개요

대용량 트래픽 발생 시 어떻게 대응해야 하나요?
대용량 트래픽과 대량 트래픽은 비슷한 맥락에서 사용되지만 약간의 차이가 있기 때문에 우선 질문해주신 대용량 트래픽은 사용자의 양적인 측면에서의 트래픽의 대응법을 설명드리겠습니다.
우선 발생 원인은 주로 많은 수의 사용자가 동시에 특정 웹사이트나 서비스에 접속하는 상황을 나타냅니다. 예를 들면 특정 이벤트, 캠페인, 혹은 급격한 인기로 인해 많은 사용자들이 특정 시간 동안에 몰릴 때 발생할 수 있습니다.
이는 주로 트래픽의 양이 많다는 의미이며, 서버 및 네트워크 리소스를 효과적으로 관리해야 합니다.
대용량 및 대량 트래픽 처리가 중요한 이유는 서버의 이상 현상은 서비스의 신뢰도가 낮아지며, 결과적으로 잠재적인 고객 이탈 문제가 발생 할 수 있는 가장 큰 문제점이라고 생각합니다.
우선 대응 방법 아주 많은 솔루션이 있겠지만 가장 큰 카테고리로는 scale-out 과 scale-up으로 구분 할 수 있습니다.
scale-out은 서버의 개수를 늘려 나가면서 부하를 분배하는 것이라고 생각 할 수 있습니다.
하지만 단순히 서버를 늘려나가는 것은 서버간 일관성, 동기화 문제가 발생합니다. 이를 연결해주는 효율적이고 일관적인 네트워크, 대역폭의 문제까지도 발생 할 수 있습니다. 또한 모든 작업을 분산하는 것이 항상 효과적이지는 않을 수 있습니다. 따라서 이 여러 서버간의 파이프라인 설계가 중요합니다. 그만큼 운영과 관리의 복잡도가 증가하고 유지보수, 자동화 구성 등 기술적 난이도가 높습니다. 또한 기본적으로 서버가 늘어날수록 물리적 공간과 전력 소모도 증가할 수 있습니다. 데이터 센터 공간 및 전력 요구 사항을 고려해야 합니다.
scale-up은 서버의 성능을 늘려 나가면서 부하를 감당할 수 있는 CPU, 메모리, 기억장치 등 성능을 올리는 것입니다.
그 중 특히 데이터 처리 속도는 전반적으로 CPU에 의해 좌우 됩니다. 하지만 생각보다 가장 느린 DISK인 기억장치의 성능을 높이는 것이 중요한 해결 방안 중에 하나입니다. 실제로 연산을 CPU가 빨리 하더라도 데이터를 처리하는 디스크선에서 느리면 효과가 미미하기 때문입니다. 이렇듯 스케일 업 전략은 하드웨어적 한계점이 있을 수 있으며, 하이엔드 스펙으로 갈 수록 기하급수적으로 비용이 증가 할 수도 있습니다.
면접답변
대용량 트래픽을 다룰 때는 트래픽을 분산하는 스케일 아웃 전략과, 서버의 성능을 올리는 스케일 업 전략을 고려해야 합니다. 그 외 캐싱, CDN 활용 등의 방법이 있습니다.
스케일 아웃은 서버 갯수를 늘리고 로드 밸런싱을 통해 트래픽을 분산 시킵니다. 스케일 업은 서버의 하드웨어 성능을 올리거나 네트워크 대역폭을 늘리는 등 , 캐시 활용, CDN 사용, 데이터베이스 최적화, DNS 캐싱, 코드 최적화, 그리고 서버의 수직 확장과 네트워크 대역폭 늘리는 등 전략이 필요합니다.
ps. 대용량 데이터를 다룰 때는 데이터베이스 최적화, 분산 데이터베이스 활용, 병렬 처리, 분산 서버, 데이터 압축, 대용량 데이터 처리 프레임워크 사용 등 전략이 필요합니다.
추가질문 : 스케일아웃 전략에서 특별히 사용되는 기술이 있나요?
in-memory 데이터베이스(In-Memory DB)는 대용량 트래픽에서 스케일 업 전략 중 하나로 특별히 주목받는 기술 중 하나입니다. 대표적으로 Redis, Memcached와 같은 오픈소스 DB가 있습니다. 앞서 설명드린것 처럼 가장 느린 기억장치의 성능을 높이면서 트래픽 처리를 안정적으로 만들 수 있는 방안입니다. 대표적인 사용처는 캐싱부분입니다. 캐싱이 반복적으로 요청되는 특정 데이터에 대한 Read 시간을 빠르게 처리 할 수 있습니다. 따라서 캐싱 또한 대규모 트래픽 처리의 한 부분이라는 것을 알 수 있습니다. 하지만 말그대로 메모리선의 DB기 때문에 휘발성이라는 특징이 있어서 선착순 쿠폰의 개수처럼 계속해서 변경이 되어야 하는 정보는 문제가 발생하면 데이터가 사라질 수 있는 위험도 있습니다.
Redis는 Replica를 통해 데이터를 복제해서 안정성을 높인 기술을 사용하지만 결국 메모리의 스케일업이 필요하고 그럼 메모리의 가격적인 문제도 있으며 그런 이유로 인메모리 DB를 사용하는데 부담이 될 수 있습니다. 또한 대용량트래픽 상황은 일부 트래픽이 폭주하는 것 뿐이라, 잠시 뒤에는 통상 트래픽으로 돌아올 것이기에 굳이 인메모리 DB까지는 필요하지 않을 수도 있습니다. 따라서 요청에 대한 처리가 단순 CRUD에 가까울 수록 기억장치의 처리 속도에 영향이 클 것이며, DB에 기록하는 부분만 잠시 미룰 수 있는 방안인 메세지 큐를 활용하는 것도 방안입니다. RabbitMQ와 Kafka 가 대표적인 기술입니다. DB저장이라는 과정은 잠시 번호순대로 미뤄지더라도 생략하고 응답을 하게 되므로 각 요청에 대한 응답 시간이 짧아지게 되는 것이고, 이는 곧 총 처리 시간의 감소라고 볼 수 있게 되는 것이 가능할 것 같습니다.

대용량 데이터

추가질문 : 대용량 데이터 대한 대응은 어떻게 생각하나요?
대용량 데이터는 데이터의 양 자체에 중점을 둔 상황으로, 주로 데이터 처리량이 많아지는 상황을 가리킵니다. 예를 들면 대용량 파일 다운로드, 대규모 데이터베이스 쿼리 등이 대량 트래픽을 유발할 수 있습니다.
1.
데이터베이스 최적화: 인덱스 추가, 쿼리 최적화 등을 통해 데이터베이스의 성능을 향상시킬 수 있습니다.
2.
분산 데이터베이스 및 처리: 대용량 데이터를 여러 노드에 분산하여 저장하고 처리하는 방식을 사용하면 성능을 향상시킬 수 있습니다.
3.
병렬 처리: 데이터 처리 작업을 여러 스레드 또는 프로세스로 나누어 동시에 수행함으로써 속도를 높일 수 있습니다.
4.
분산 시스템: 데이터를 여러 서버에 분산 저장하고 처리하여 확장성을 확보할 수 있습니다.
5.
데이터 압축: 데이터를 압축하여 저장하면 저장 공간을 절약하고 전송 시에도 효율적으로 사용할 수 있습니다.
6.
대용량 데이터 처리 프레임워크 사용: 대용량 데이터를 효율적으로 처리할 수 있는 프레임워크나 도구를 사용하여 성능을 최적화할 수 있습니다.
Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio