[네트워크] 로드밸런싱, DNS
Updated: Categories: CS웹 통신 흐름에 대해 알아보자
로드밸런서
- 다수의 트래픽이 발생할 때, 부하를 분산하여 여러대의 서버가 처리하도록 하는 기술
- 트래픽이 적다면 한대의 서버로 부하를 감당할 수 있지만, 트래픽이 많아진다면 ?
- Scale Up
- 서버 자체의 성능을 향상시키는 것
- CPU나 메모리를 늘리는 것
- Scale Out
- 동일한 서버를 여러개 더 만드는 것
- 트래픽 분산을 위해 로드밸런싱이 필요함
- Scale Up
로드밸런싱 알고리즘
라운드로빈 (Round Robin)
- 서버에 들어온 요청을 순서대로 돌아가며 공평하게 분배
- 여러대의 서버가 동일한 스펙 + 연결이 오래 지속되지 않는 경우 적합
가중 라운드로빈 (Weighted Round Robin)
- 각각 서버가 가중치를 가지며 가중치가 높은 서버에 우선 분배
- 서버의 스펙이 서로 다른 경우 적합
IP 해시 방식 (IP Hash)
- 사용자 IP를 해싱하여 특정 서버로 매핑하여 분배하는 방식
- 사용자는 항상 동일한 서버로 연결됨
최소 연결 방식 (Least Connection)
- 요청 시점에 가장 놀고있는 서버로 분배
- 요청 처리 시간이 모두 상이하거나 트래픽이 일정하지 않은 경우에 적합
최소 리스폰타임 (Least Response Time)
- 서버의 현재 연결 상태 + 응답시간을 모두 고려하여 분배
- 가장 적은 연결상태와 가장 짧은 응답시간을 보이는 서버가 우선순위
계층별 로드밸런싱
L2
- 데이터링크 계층
- Mac 주소로 로드밸런싱
L3
- 네트워크 계층
- IP 주소로 로드밸런싱
L4
- 전송 계층
- 포트번호로 로드밸런싱
- NLB(Network LoadBalancer)
L7
- 응용 계층
- 패킷 내용 확인후 그 내용에 따라 로드밸런싱
- URL이나 HTTP 헤더 쿠키값에 따라 부하 분산 가능
- ALB(Application LoadBalancer)
DNS(Domain Name System)
- 도메인(호스트) 주소를 IP주소로 변환하는 시스템
- UDP로 통신함 -> 빠른 속도, 가벼운 헤더가 더 중요하기 때문
- DHCP 프로토콜 사용
- 53번 포트 사용
동작원리
local DNS server
: 기지국 DNS 서버 (통신사별로 각자 가지고 있음), DNS 주소를 캐싱할 수 있음root DNS server
: 최상위 도메인 서버TLD(Top Level Domain) DNS server
: 최상위 도메인 주소를 알고있는 서버authoritative DNS server
: 목적 IP 주소를 알고있는 서버
기본 동작
- 사용자가
www.naver.com
접속 - local DNS 서버에 주소를 물어봄 -> 만약 안다면 바로 알려줌
- 모른다면 root DNS 서버에 주소를 물어봄 (local DNS 서버는 root DNS 서버 주소를 원래 저장하고 있음)
- root DNS 서버는 정확한 주소를 모르지만
.com
- TLD DNS 서버 주소를 알려줌 - 다시
.com
- TLD DNS 서버에 주소를 물어봄 - TLD DNS 서버는 정확한 주소를 모르지만
naver.com
- authoritative DNS 서버 주소를 알려줌 - 다시
naver.com
- authoritative DNS 서버에 주소를 물어봄 naver.com
authoritative DNS 서버는 정확한 주소를 모르지만www.naver.com
- authoritative DNS 서버 주소를 알려줌www.naver.com
- authoritative DNS 서버에 주소를 물어봄- 서버는 IP를 알려줌
Iterative Query
- 기본 동작임
- local DNS 서버에서 반복적으로 DNS Query를 날림
Recursive Query
- local DNS 서버에서 한번만 물어봐도 DNS Query를 타고타고 끝까지 감
웹 통신 흐름 총정리
www.naver.com
을 브라우저에 검색한다면 어떤 일이 일어날까?- 모든 동작을 설명하기 위해 3가지로 분류해보았다
- 웹이 SPA + Rest API 구조로 되어있다고 가정함
검색!
- 사용자가
www.naver.com
접속 - 캐싱된 DNS 기록 탐색
- 브라우저 캐시 확인
- 운영체제 캐시 확인
- 라우터 캐시 확인
- DNS 쿼리 탐색 시작
- local DNS 서버에 주소를 물어봄 -> 만약 캐싱되어 있다면 바로 알려줌
- 모른다면 root DNS 서버에 주소를 물어봄 (local DNS 서버는 root DNS 서버 주소를 원래 저장하고 있음)
- root DNS 서버는 정확한 주소를 모르지만
.com
- TLD DNS 서버 주소를 알려줌 - 다시
.com
- TLD DNS 서버에 주소를 물어봄 - TLD DNS 서버는 정확한 주소를 모르지만
naver.com
- authoritative DNS 서버 주소를 알려줌 - 다시
naver.com
- authoritative DNS 서버에 주소를 물어봄 naver.com
authoritative DNS 서버는 정확한 주소를 모르지만www.naver.com
- authoritative DNS 서버 주소를 알려줌www.naver.com
- authoritative DNS 서버에 주소를 물어봄- DNS 서버에서 IP 주소를 알려줌
- 알아낸 프론트엔드 IP 주소에 페이지 요청
- 3-way Handshake로 TCP 연결 (HTTPS 주소라면 SSL Handshake 추가됨)
- 연결되면 HTTP로 프론트엔드(웹서버)에서 html, css, js를 받아오고 화면 렌더링
- 백엔드(Rest API/WAS)에 데이터 요청
- Rest API의 IP 주소로 HTTP 요청 (만약 도메인주소라면 다시 DNS 쿼리 탐색)
- 로드밸런서(웹서버)에서 HTTP를 리다이렉트 or 로드밸런싱
- 서버에서 HTTP 응답