서버에서 동작하는 서비스에 클라이언트가 접속하여 발생되는 데이터의 전송 수치를 말하며 많은 사용자가 서비스를 이용하면 그만큼 서버에게 많은 요청이 가게됩니다.
즉 서버에 접속량이 많이 늘어남에 따라 트래픽이 높아지게됩니다.
트래픽이 높아질 수록 서버는 바빠집니다. 서버는 하나의 프로그램에서 돌아가게 되기 때문에 요청에 응답하기 위해선 해당 컴퓨터의 CPU, 메모리를 사용하게됩니다.
이 때 트래픽이 높아질수록 서버는 일을 바로바로 처리할 수 없기 때문에 응답이 밀리게 되는 병목현상이 발생합니다.
이런 문제를 해결하기 위한 방법은 크게 두가지가 있습니다.
스케일 아웃은 서버를 여러대로 늘리는 것입니다. 트래픽을 분산시켜 하나의 서버가 일하는 양을 줄여주는 것입니다.
서버가 여러 대가 되기 때문에 각 서버에 걸리는 부하를 균등하게 해주는 ‘로드밸런싱’이 필수적으로 동반되어야 합니다. 스케일 아웃의 경우, 서버 한 대가 장애로 다운되더라도 다른 서버로 서비스 제공이 가능하다는 장점이 있습니다. 반면 모든 서버가 동일한 데이터를 가지고 있어야 하므로, 데이터 변화가 적은 ‘웹 서버’에 적합한 방식입니다.
스케일 업은 해당 서버의 컴퓨터 성능을 높이는 것입니다.CPU나 메모리의 성능을 높여서 더 많은 요청에 대응할 수 있게 하는 것입니다.
CPU나 RAM을 추가하기로 했다면 현재 서버에 추가 부품을 장착할 수 있는 여유 슬롯이 있어야 하며, 그렇지 않은 경우 서버 자체를 고성능으로 교체하는 것이 필요합니다. 스케일 업의 경우, 서버 한 대에 모든 부하가 집중되므로 장애 시 영향을 크게 받을 수 있는 위험성이 있습니다. 한 대의 서버에서 모든 데이터를 처리하므로 데이터 갱신이 빈번하게 일어나는 ‘데이터베이스 서버’에 적합한 방식입니다.
지금은 클라우드가 자동으로 스케일링을 해주기 때문에 서버 개발자들이 편해졌다고 합니다 ㅎㅎ
오토스케일링)
- 사용하는 이유 : 서버의 과부하, 장애 등과 같이 서비스 불능 상황 발생시 자동으로 서버를 복제하여 서버 대수를 늘려주는 작업을 해주는 AWS 서비스
정리하자면, 오토스케일링을 사용하는 이유는 갑작스런 서버 과부하, 장애 등에 대처하기 위해 CPU사용률과 같은 리소스를 모니터링하다가 자동으로 서버를 증가시켜줌으로써 적절한 트래픽 분산을 위해 사용합니다.
scale out에 필수적인 로드 밸런싱은 여러 서버에게 균등하게 트래픽을 분산시켜주는 것입니다.
로드 밸런싱은 분산식 웹 서비스로, 여러 서버에 부하(Load)를 나누어주는 역할을 합니다. Load Balancer를 클라이언트와 서버 사이에 두고, 부하가 일어나지 않도록 여러 서버에 분산시켜주는 방식입니다. 서비스를 운영하는 사이트의 규모에 따라 웹 서버를 추가로 증설하면서 로드 밸런서로 관리해주면 웹 서버의 부하를 해결할 수 있습니다.
로드 밸런서가 서버를 선택하는 방식
- 라운드 로빈(Round Robin) : CPU 스케줄링의 라운드 로빈 방식 활용
- Least Connections : 연결 개수가 가장 적은 서버 선택 (트래픽으로 인해 세션이 길어지는 경우 권장)
- Source : 사용자 IP를 해싱하여 분배 (특정 사용자가 항상 같은 서버로 연결되는 것 보장)
참고)
그랩의 블로그
https://library.gabia.com/contents/infrahosting/1222/
https://coconutstd.github.io/posts/AWS%EC%A0%95%EB%A6%AC-2/
https://gyoogle.dev/blog/computer-science/network/Load%20Balancing.html