Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

채채

대용량 트래픽 처리 방법 본문

카테고리 없음

대용량 트래픽 처리 방법

HChaeEun 2023. 11. 9. 19:29

트래픽이란?

서버에 발생하는 Request이다.

사용자가 많아지면 서버에는 많은 HTTP request가 발생하고, 이에따라 Request가 많아졌다는 것은 트래픽이 높아졌다는 의미이다.

 

그럼 서버는 어떻게 터지나?

그냥 웃겨서 넣어봄

서버라는 것은 외부로부터 들어오는 요청을 받아 처리해주고 응답을 주는 프로그램이 돌아가고있는 컴퓨터다.

즉, 서버 또한 처리 속도와 한계가 CPU, 메모리, 저장장치에 영향을 받아 한계가 있다는 것이다.

Tomcat의 요청 수락/처리

request는 queue를 통해 thread pool에 할당되는데, maxThreads(Thread pool size)를 초과하는 요청은 queue에서 대기한다. 이는 문제 상황이 발생했을 확률이 높다는 뜻으로 운영체제에서 요청을 거부하고 대기하는데, 언제까지고 기다릴 수는 없으므로 일정 시간이 지나면 실패로 간주한다.(타임아웃)

이와 같은 현상이 지속적으로 발생하면 서버의 지연시간이 기하급수적으로 증가하게 되고 트래픽 장애가 발생하는 것이다.

 

처리하는 방법

대용량 트래픽으로 서버가 터지는 이유는 아직 처리되지 못한 요청이 쌓이고 쌓이다가 부하를 견디지 못하고 다운되는 것이므로, 단순히 생각해서 요청을 충분히 빠르게 처리하면 된다.

(잘못된 입력값으로 요청을 처리하지 못하여 서버가 다운되는 경우는 다루지 않겠다)

1. scale-up (수직 확장)

서버의 CPU, RAM(Memory), HDD/SDD(Storage) 등을 추가하거나 더 높은 사양으로 업그레이드 하는 것이다.

대용량 트래픽 처리를 위한 scale-up을 고려하는 경우 기억장치(HDD/SDD)의 처리 속도 업그레이드를 고려해야한다.

왜냐? 아무리 CPU의 연산 속도가 뛰어나도 기억장치의 데이터 접근 속도가 느리면 결과적으로 요청의 처리속도가 느리기 때문이다.

CPU 능력이 아무리 뛰어나도 기억장치의 처리속도가 느리면.. 이런 느낌

2. scale-out (수평 확장)

서버를 물리적으로 늘리는 경우다.

이때 특정 서버에 장시간의 처리가 필요한 요청이 몰리면 해당 서버만 터지게 될 것이고, 운 없게도 해당 서버로 요청을 보낸 사용자들은 서버가 다운되었다고 생각할 것이다.

이런 문제를 해결하기 위한 기술이 로드밸런싱이다.

로드밸런서를 통해 각 서버의 남은 큐의 크기, 이미 축적된 요청들의 예상 처리 시간등을 고려해 최적의 서버로 요청들을 분배하여 특정 서버에만 부하가 가중되는 것을 방지할 수 있다.

3. 캐싱

솔직히 서버를 많이 사면 트래픽을 견딜 수 있으나, 금전적인 문제도 있으며 유지보수를 고려했을 때 좋은 방법이 아닐 수 있다.

따라서 반복적으로 요청되는 내용을 저장하고 다시 보여줌으로써 DB에 접근하는 부하를 줄이는 캐시를 사용하는 방법을 먼저 고려하는게 좋을 것이다. 캐시는 메모리에 저장하므로 빠르다는 장점이 있지만, 모든 정보를 캐시에 넣으면 이또한 돈이기에.. 캐싱 할 대상을 잘 선별해야한다.

 

- 반복적이고 동일한 결과가 나오는 기능의 반환값

- 업데이트가 자주 발생하지 않는 데이터(DB와 불일치가 발생하지 않도록)

- 자주 조회되는 데이터

 캐시로 적용하기에 적합한 데이터다.

 

Spring MSA 방식에서는 글로벌 캐시를 통해 다중 서버에서 동일한 데이터를 전달 받을 수 있도록 Redis를 적용할 수 있다.

4. 데이터베이스 최적화

데이터베이스는 대용량 트래픽에서 주요 병목구간이 될 수 있다. 따라서 데이터베이스 쿼리를 최적화하고, 인덱스를 조정하며, 캐시를 활용하여 데이터베이스 성능을 향상시키는 것이 중요하다.

 

요약

대용량 트래픽을 처리하기 위해서는 scale-up, scale-out, 캐싱, 데이터베이스 최적화 방법 등이있다.

scale-up이란 서버의 리소스를 업그레이드 하거나 추가하여 처리할 수 있는 트래픽의 양을 늘리는 방식이며, scale-out이란 서버를 물리적으로 늘리는 방식으로 여러대의 서버를 두어 전체적인 서버가 다운되지 않도록 운영할 수 있다. 이때 하나의 서버에 트래픽이 몰리지 않도록 트래픽을 분산하는 로드밸런서를 사용한다. 단 이러한 방식은 금전적인 문제가 유발될 수 있으며 유지보수를 고려했을 때 좋은 방법이 아닐 수 있다.
따라서 반복적으로 요청되거나 업데이트가 자주 발생하지 않는 데이터는 캐시 메모리에 저장하여 DB에 접근하는 부하를 줄일 수 있도록 해야하며, 데이터베이스의 쿼리를 최적화 하고 인덱스를 조정함으로써 데이터베이스 성능을 향상시키는 것이 우선적으로 이루어져야한다.

 

참고

 

[백엔드] 기술 면접 Top30 - #13 대용량 트래픽

대용량 트래픽 대용량 트래픽 발생 시 대응법 대용량 트래픽이 발생할 때는 웹사이트 또는 서비스의 성능을 유지하고 사용자 경험을 보호하기 위한 대응 조치가 필요하다. 1. 트래픽 모니터링

dev-dobim.tistory.com

 

스프링 대용량 트래픽 처리

#0. 대용량 트래픽 처리의 필요성 * 웹 서비스를 다루는데 있어 트래픽을 처리하는 구조를 설계하고 적용하는 것은 개발자의 필수 역량이다. 특히 서비스의 규모가 커질 수록 개발자가 의도한 대

www.nextree.io

 

대규모 트래픽 처리

왜 그렇게 다들 대규모 트래픽 거리는가 이력서, 자소서, 경력사항, 지원자격, 선호 경험 등에 써 있는 대규모 트래픽, 대용량 트래픽, 부하에 강한 서버 설계 등등등... 개발자라면, 특히 서버 개

velog.io