Blog

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

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