대용량 트래픽 발생 시 어떻게 대응해야 하나요.
먼저 대용량 트래픽은
많은 사용자에 의한 서버 요청입니다.
Queue 를 통하여 Thread pool에 할당된 요청들이 Thread pool size 를 초과하게 되면 요청은 큐에서 대기합니다. Thread 의 개수는 무한하지 않으므로 시스템에 할당된 성능에 따라 제한되기 때문에 Thread pool size 를 초과하는 대량의 트래픽이 지속적으로 발생하면 서버의 지연시간은 기하급수적으로 증가하게 됩니다.
따라서 서버의 리소스 부족 문제를 해결할 방법 중 한 가지는 scale-out 있습니다.
scale-up 업은 서버 한 대의 성능을 높여 작업을 처리하는 방법이며, scale-out은 여러대의 서버를 구축하여 서버 한 대가 처리하는 용량을 줄임으로써 전체적인 성능을 증가시키는 방법입니다. scale-out 은 한대가 부담해야 했던 서버의 장애 리스크를 줄일 수 있고, 가격적인 측면 비교에서도 우위 있기에 scale-up 보다 효율적인 방법입니다.
하지만 scale-out 을 적용하면 여러대의 서버로 인한 세션 불일치 문제가 발생합니다.
세션 불일치 문제를 해결하는 방법중 한가지는 인 메모리 DB를 사용하여 서버들이 동일한 인메모리 DB를 바라보기 때문에 서버 추가가 용의하고, 세션 일관성을 유지할 수 있습니다
대용량 트래픽을 대응할 수 있는 또 다른 방법중 한 가지는 캐싱을 사용하는 것 입니다.
공통된 데이터를 지속적으로 사용자에게 제공하는 경우에 매번 DB에 접근하여 데이터를 조회한다면 DB 서버의 리소스를 낭비하며 서버 전체에도 악영향을 줄 수 있습니다. 따라서 캐싱을 통해 DB 부하를 분담할 수 있습니다.
더 공부할 것
DB 샤딩 -> 분할 파티션을 나눠서 관리한다,
로드 벨런싱 키워드 가져가기
참고 자료: https://www.nextree.io/seupeuring-daeyongryang-teuraepig-ceori/