대용량 트래픽 발생 시 어떻게 대응해야 하는지에 대한 방법은 개발자 면접에서 자주 나오는 질문 중의 하나!
많은 사용자들이 이용하는 서비스는 원활한 서비스를 위해 인프라를 확장해야 하는데,
인프라는 업그레이드하는 방법에는 '스케일 업'과 '스케일 아웃'이 있다.
기존 서버의 사양을 업그레이드
해 시스템을 확장하는 것
"수직 스케일"
예시
추가적인 네트워크 연결 없이, 용량을 증강 가능
(스케일 아웃보다) 관리 비용 小 운영 이슈 小
사양만 올리면 되므로, 비교적 쉬움
성능 향상에 한계 O
성능 향상에 따른 비용부담 大
자연재해 등의 다양한 이유로 서버에 문제가 생기면 타격 大
다운타임 불가피
향후 확장 가능성에 대비해, 서버를 현재 필요한 만큼보다 더 많은 용량이나 성능을 확보해놓는 경우 多
고성능이 요구되는 환경
워크플로우 기반의 빠르고 정확하면서 단순한 처리가 필요한 OLTP(Online Transaction Processing) 환경
예시 : 온라인 금융거래
하나의 장비에서 서버를 여러 대 추가
하여 시스템을 확장하는 것
"수평 스케일"
확장의 유연성
읽기 / 쓰기가 여러 대의 서버에 분산 처리
장애 발생 시, 전면 장애의 가능성 小
서버 사용으로 인한 비용 부담 小
여러 노드를 연결해 병렬 컴퓨팅 환경을 구성하고 유지하려면, 아키텍처에 대한 높은 이해도가 요구
서버의 수가 늘어날수록 관리가 힘들어지는 부분이 있음
아키텍처의 설계 단계에서부터 고려되어야 할 필요가 있음
여러 노드에 부하를 균등하게 분산시키기 위해 로드 밸런싱(load balancing)이 필요
대량의 데이터 처리가 요구되는 환경
-대량의 데이터 처리와 복잡한 쿼리가 이루어지는 OLAP(Online Analytical Processing) 어플리케이션 환경
캐시를 통해, 자주 사용되는 데이터 or 페이지를 메모리에 저장해둠으로써 서버의 부하를 감소시킬 수 있다.
캐시
사용 상황?
이런 상황에서 결과를 빠르게 얻기 위해 저장해두는 것
주기억장치와 CPU 사이에 위치
예시
캐싱
정의
예시
처리 시간이 오래걸리는 작업과 즉시 처리돼야 하는 작업을 분리하고,
오래걸리는 작업을 처리하는 동시에 병렬적으로 그 외의 작업을 함께 처리해서, 시스템 전체의 부하를 감소시킨다.
동기 통신 (Synchronous)
정의
사용 상황
비동기 통신 (Asynchronous)
정의
사용 상황
사용법
비동기 통신을 하기 위해서는
Client : Server 로 요청 메시지의 본문(Body)에 데이터를 담아서 보내야 한다
Server : Client 에 응답하기 위해, 응답 메시지의 본문(Body)에 데이터를 담아서 보내야 한다
대용량 트래픽으로 인해 서버가 과부화될 경우(디도스 같이), 재해 복구 시스템을 통해 빠르게 복구를 할 수 있다.
(디도스 : 여러 시스템을 사용하여 웹 서버에 부하를 가하는 분산형 서비스 거부 공격으로써, 대량의 트래픽을 발생시켜 네트워크를 마비시킴)
재해 (Disaster)
재해 복구 (Disaster Recovery)
목적에 따라 4가지로 구분된다.
미러 사이트
핫 사이트
웜 사이트
쿨 사이트
참고: 스케일 업(Scale-Up)과 스케일 아웃(Scale-Out)이란?
참고: Scale-up과 Scale-out에 대해 알아보자!
참고: 캐시 / 캐싱이란?
참고: 비동기 통신과 동기 통신
참고: 재해 복구(DR; Disaster Recovery)에 대해서
참고: Synchronous & Asynchronous Transmission (동기, 비동기 통신 모드)