1. 왜 Load Balancer가 필요한가?
Client가 한 두명인 경우에는 Server가 여유롭게 사용자가 원하는 결과를 응답해 줄 수 있다.
2. Client가 한 두명이 아닌 수천만명이라면?
Server는 모든 사람들의 응답을 해주려고 하지만 결국 동작을 멈추게 될 것이다.
3. 문제해결을 위한 방법
- Scale-up : Server가 더 빠르게 동작하기 위해 하드웨어 성능을 올리는 방법.
- Scale-out : 하나의 Server보다는 여러대의 Server가 나눠서 일을 하는 방법.
1) Scale-Up(스케일 업)
- 데이터의 양이 늘어나거나, CPU 사용율이 높아지거나, 메모리가 부족할 때, ... 서버의 크기(용량)을 증가(고성능 장비로 대체하는 것)
- 프로그램 코드를 재작성하거나, 시스템 구성(아키텍쳐)를 변경할 필요가 없어 쉬워 보이지만 비용이 많이 발생한다.
- 가장 큰 문제는 비용 대비 효과가 낮다.
2) Scale-Out(스케일 아웃)
- 사용 중인 장비(하드웨어)를 대용량의 장비로 교체하는 것이 아니라, 같은 수준이거나 낮은 장비 여러 대로 재구성하는 방식(아마존 웹서비스(AWS), 구글 클라우드, MS Asure 등의 클라우드 서비스에서 권장하는 서버 확장 방안)
- 비교적 저렴한 다수의 서버로 구성하기 때문에 비용이 절감되고, 만일 일부 서버(노드)의 장애가 발생하더라도 전체 서비스가 중단되는 치명적 문제(critical issue)를 방지할 수 있으며, 추가 확장도 용이하다.
- 시스템 설계 및 운영을 담당하는 엔지니어가 분산처리에 대한 경험과 노하우를 가지고 있어야 하며, 필요 시 소프트웨어 코드 및 설계를 변경해야만 한다.(처음부터 분산환경에 맞추어 설계하지 않으면, 스케일 아웃으로 재구성하기 매우 어렵다.)
3) Scale-Down(스케일 다운), Scale-In(스케일 인)
- 서버의 용량을 늘리기 위한 방법이 스케일 업(Scale-Up)과 스케일 아웃(Scale-Up)이라면, 반대의 경우는 스케일 다운(Scale-Down)과 스케일 인(Scale-In)이라고 부른다.
* 참고
- 처리(혹은 저장)하는 데이터 크기릐 최대 용량을 충분히 예측할 수 있고 사용자 수가 일정하거나, 혹은 작은 규모의 팀(혹은 조직)에서 사용한다면 굳이 서버 증설을 고민할 필요가 없다.(다른 문제를 깊이 고민하는 것이 낫다.)
- Scale-Out(스케일 아웃)을 적용하기 위해서는 분산 처리에 대한 이론적 지식과 실무 경험이 필요하고, 그에 따른 소프트웨어 설계 및 각종 설정 작업이 필요하다.
- 클라우드 환경 및 대규모 서비스를 환경에서 '스케일 아웃' 구조는 가장 권장하는 방법이지만, 항상 옳은 것은 아니다.
(네트워크, 서버 설계 및 소프트웨어 변경 비용이 더 클 수도 있다.)
- 대규모 서비스를 지향하지만, 근시일(예를 들어 1년 내) 내에 성능 문제에 봉착할 것으로 예상되지 않는다면, 충분한 시간을 가지고 고민하고 경험과 지식을 쌓는 것이 낫다.
4. Load Balancing이란
- 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스이다.
4.1 주요기능
- NAT(Network Address Translation)
- 사설 IP 주소를 공인 IP 주소로 바꾸는 데 사용하는 통신망의 주소 변조기이다.
- Tunneling
- 인터넷상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념이다.
- 데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있다.
- DSR(Dynamic Source Routing protocol)
- 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP 주소가 아닌 클라이언트의 IP 주소로 전달해서 네트워크 스위치를 거치지 않고 바로 클라이언트를 찾아가는 개념이다.
4.2 Architecture
4.3 종류는 어떤 것이 있을까?
L2
-
Mac주소를 바탕으로 Load Balacing 한다.
L3
- IP주소를 바탕으로 Load Balancing 한다.
L4
- Trasport Layer(IP와 Port) Level에서 Load Balancing을 한다.
- TCP, UDP
L7
- Applicatno Layer(사용자의 Request) Level에서 Load Balancing을 한다.
- HTTP, HTTPS, FTP
- HTTP
- X-Forwarded-For : HTTP 또는 HTTPS 로드 밸런서를 사용할 때 클라이언트의 IP주소를 식별하는 데 도움을 준다.
- X-Forwarded-Proto : 클라이언트가 로드 밸런서 연결에 사용한 프로토콜(HTTP 또는 HTTPS)을 식별하는 데 도움을 준다.
- X-Forwarded-Port : 클라이언트가 로드 밸런서 연결에 사용한 포트를 식별하는 데 도움을 준다.
4.4 Load Balancer의 Server 선택 기준
- Round Robin
- 연결되어 있는 모든 서버에 동일한 세션을 라우팅
- 모든 서버의 연결 세션 갯수가 거의 비슷하게 됨
- 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로서, 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum)로 CPU를 할당하는 방식의 CPU스케줄링 알고리즘이다.
- Least Connections
- 연결 개수가 가장 적은 서버를 선택하는 방식
- 트래픽으로 인해 세션이 길어지는 경우 권장하는 방식
- 모든 서버의 Active 연결 세션이 거의 비슷하게 됨
- Hash(Source)
- 사용자의 IP를 Hasing하여 분배하는 방식
- 사용자는 항상 같은서버로 연결되는 것을 보장
- 세션의 유지가 가능하지만 서버의 연결 세션 갯수에 불균형이 발생할 수 있음
4.5 Load Balancer 장애대비
- Load Balancer를 이중화하여 장애를 대비할 수 있다.
- 장애 났을 경우
- 이중화된 Load Balancer들은 서로 Health Check
- Main Load Balancer가 동작하지 않으면 가상IP(VIP, Virtual IP)는 여분의 Load Balancer로 변경
- 여분의 Load Balancer로 운영
출처
www.slideshare.net/sunnykwak90/scale-up-and-scale-out
nesoy.github.io/articles/2018-06/Load-Balancer
'Web > 기초' 카테고리의 다른 글
[WEB기초] web.xml (0) | 2021.01.10 |
---|---|
[WEB기초] Servlet이란 (0) | 2021.01.10 |
[WEB기초] 소켓, 서킷, 패킷, TCP/IP 통신 (0) | 2020.12.13 |
[WEB기초] DNS (0) | 2020.12.12 |
[WEB기초] CGI(공용 게이트웨이 인터페이스) (0) | 2020.12.12 |