서버의 부하는 어떻게 줄일까
- 고오급 서버 사용 (a.k.a. 성능 확장, Scale up)
- 서버 대수 증가 (Scale out)
- 단순히 서버의 대수를 늘리면 될까? 사용자는 어디로 가야되는지 어떻게 알까? (데이터 동기화 등의 문제들도 있겠지만 그건 여기선 다루지 않는걸로…) → 로드밸런서
로드밸런서
- 말 그대로 Load 를 Balance 있게 나눠주는 것
로드밸런서의 종류
- L2 - MAC 주소를 바탕으로 Load Balancing
- L3 - IP 주소를 바탕으로 Load Balancing
- L4 - Transport Layer(IP와 Port) Level 에서 Load Balancing
- L7 - Application Layer (사용자 Request) Level 에서 Load Balancing
L# ?
- OSI 7 계층 (layer) 의 L
나눠져있는 이유
- 계층간의 독립성 보장
- 각 단계에서 할 수있는 일들을 나눔으로써, 간결해짐
- 자신의 역할만 신경쓰면 되기 때문
- 시스템을 설계할 때 뿐 아니라 유지/보수 할 때도 훨씬 작업이 쉽고 단순하게 만듦
L4 로드밸런서
- 게이트웨이 혹은 L4 스위치에서 IP, Port 를 기준으로 스케줄링 알고리즘을 통해 부하를 분산
- Port기반 스위칭 지원, VIP를 이용하여 여러대를 한대로 묶어 부하 분산
- 스케줄링 알고리즘
- 🔥 Round Robin(순차방식): 요청을 순서대로 각 서버에 균등하게 분배하는 방식서버 커넥션 수나 응답시간에 상관없이 모든 서버를 동일하게 처리, 다른 알고리즘에 비해서 가장 빠르다 가장 많이 쓰인다
- IP 해시 방식(IP Hash Method)클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식, 사용자의 IP를 해싱해(Hashing, 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것, 또는 그러한 함수) 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장한다.
- Least Connection(최소접속방식): 서버에 연결되어 있는 Connection 개수만 갖고 단순비교하여 가장 적은곳에 연결
- Weighted Least Connections(가중치 최소접속방식): 서버에 부여된 Weight 값을 기반으로 Connection 수의 개수와 같이 고려하여 할당
- Fastest Response Time(응답시간방식): 가장 빨리 응답하는 서버에 이용자 요구를 연결하는 방법. 응답시간은 각 서버가 패킷 형태의 요구를 송수신하는데 걸리는 시간을 측정한 것이다.
- Adaptive(최소대기방식): Open또는 Pending(계류중인) 커넥션을 적게 가지고 있는 서버로 네트웍 커넥션 방향을 지정한다. Pending 커넥션은 Full TCP Handshake를 완성하지 않은 것으로, 이것은 초당 클라이언트 Thread의 수가 증가할 때 더욱 잘 수행된다.
- 게이트웨이 (라우터) 란?
- 하나의 AS(Autonomous System)에서 다른 AS 로 패킷을 전달하는 라우터
- AS? = 라우터 그룹 이라고 이해하여도 될 듯
L7 로드밸런서
- 사용자의 Request 내용을 기반으로 로드밸런싱함
- IP, Port 이외에도 URI, Payload, Http Header, Cookie 등의 내용을 기준으로 부하를 분산
- 콘텐츠 기반 스위칭이라고도 함
L4, L7 로드밸런서 비교
- L4 Load Balancer는 단지 부하를 분산시키는 것이라면, L7 Load Balancer는 요청의 세부적인 사항을 두고 결제만 담당하는 서버, 회원가입만을 담당하는 서버 등으로 분리해서 가볍고 작은 단위로 여러 개의 서비스를 운영하고 요청을 각각의 서버에 분산할 수 있는 것
- L7 Load Balancer는 L4 Load Balancer와 다르게 데이터를 분석해서 처리가 가능하기 때문에 악의적이거나 비 정상적인 콘텐츠를 감지해 보안 지점을 구축할 수도 있는 장점이 있고, 그 만큼 자원 소모가 크다는 단점이 있음
헬스체크
- 다수의 서버를 사용할 때, 서버의 상태를 점검하기 위한 것
- 서버의 상태가 원활하지 않을 경우, 해당 서버를 서비스에서 제거하여 안정적으로 제공하기 위함
참고 자료
- https://hellosamuel.tistory.com/8
- https://jaehoney.tistory.com/73
- https://velog.io/@makeitcloud/%EB%9E%80-L4-load-balancer-vs-L7-load-balancer-%EB%9E%80
- https://kemptechnologies.com/load-balancer/load-balancing-algorithms-techniques
- https://knight76.tistory.com/m/entry/nginx-L7-healthcheck
- https://jesc1249.tistory.com/6
'막개발글' 카테고리의 다른 글
CSR, SSR, Rendering (0) | 2023.06.17 |
---|---|
DOM 에 대해서 - 역사 / 의미 / 객체 / 호환성 (0) | 2023.05.11 |
[아티클 정리] 사용자 경험은 어떻게 측정할까요? - 오의택 (0) | 2023.04.09 |
상태관리 라이브러리 비교 (Redux Toolkit, Zustand, Recoil) (0) | 2023.04.02 |
라이브러리와 프레임워크 (feat. 리액트는 라이브러리일까 프레임워크일까) (2) | 2023.03.19 |