Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

알고리즘 공부방

CS 정리(Network 3) 본문

카테고리 없음

CS 정리(Network 3)

head89 2023. 10. 16. 01:57

1. 로드 밸런서(Load Balancer)

 

 (1) 로드 밸런서가 필요한 이유는?

  : 클라이언트 사용자가 한 두명인 경우는 서버에 가는 부담이 적다. 하지만 클라이언트 사용자가 수천명이라면?

       그렇다면 서버는 모든 사람들의 응답을 하려고 노력하겠지만 결국 동작을 멈추게 된다.

       이러한 문제를 해결하기 위해서 어떤 방법이 있을까?

  • Scale-Up: 서버가 더 빠르게 동작하기 위해 하드웨어 성능을 높이는 방법
  • Scale-Out: 하나의 서버보다 여러 대의 서버가 나누어 일을 하는 방법

    Scale-Up 방식보다 Scale-Out 방식을 더욱 많이 사용한다. 왜?

  • 하드웨어의 성능을 올리는 비용보다 서버를 하나 더 추가하는 비용이 적게 나간다.
  • 여러 대의 서버 덕분에 무중단 서비스를 제공할 수 있다.

    여러 대의 서버에게 균등하게 Traffic을 분산시켜주는 역할을 하는 것이 Load Balancer이다.

 

 (2) Load Balancing이란?

  : 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량,

    속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스

 

 (3) 주요 기능은 어떤게 있을까?

  • NAT(Network Address Translation)
    : 사설 IP주소를 공인 IP주소로 바꾸는 데 사용하는 통신만 주소 변조기
  • Tunneling
    : 인터넷상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념
      데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있다.
  • DSR(Dynamic Source Routing Protocol)
     : 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP 주소가 아닌
       클라이언트의 IP 주소로 전달해서 네트워크 스위치를 거치지 않고 바로 클라이언트를 찾아가는 개념

 

 (4) 다양한 로드밸런싱 알고리즘

  • 라운드로빈 방식(Round Robin)
     : 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식. 클라이언트의 요청을 순서대로 분배하기 때문에
       여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결이 오래 지속되지 않는 경우에 활용하기 적합
  • 가중 라운드로빈 방식(Weighted Round Robin)
     : 각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분.
       주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식.
  • IP 해시 방식(IP Hash)
     : 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식. 사용자의 IP를 해싱하여 로드를 분배
       하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장.
       (Hasing: 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것)
  • 최소 연결 방식(Least Connection)
     : 요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트래픽을 배분.
       자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합한 방식
  • 최소 리스폰 타임 방식(Least Response Time)
     : 서버에 현재 연결 상태와 응답시간을 모두 고려하여 트래픽을 배분.
       가장 적은 연결 상태와 가장 짧은 응답시간을 보이는 서버에 우선적으로 로드를 배분하는 방식

 (5) L4 로드밸런서 VS L7 로드밸런서

 

2. Blocking/Non-Blocking & Synchronous/AsSynchronous

(1) Blocking/Non-Blocking

  : Blocking/Non-Blocking은 간단히 말해서 호출된 함수가 호출한 함수에게 제어권을 건네주는 유무의 차이

  함수 A,B가 있고, A안에서 B를 호출했다고 가정해보자. 이때 호출한 함수는 A이고, 호출된 함수는 B가 된다.

   현재 B가 호출되면서 B는 자신의 일을 진행해야한다.

  • Blocking: 함수 B는 내 할 일을 다 마칠 때까지 제어권을 가지고 있는다. A는 B가 다 마칠 때까지 기다려야 한다.
  • Non-Blocking: 함수 B는 할 일을 마치지 않았어도 A에게 제어권을 바로 넘겨준다. A는 B를 기다리면서도 다른 일을
    진행할 수 있다.

   즉, 호출된 함수에서 일을 시작할 때 바로 제어권을 리턴해주냐 안 해주냐로 나뉘는 것이다.

 

(2) Synchronous/Asynchronous

  : 동기/비동기는 일을 수행 중인 동시성에 주목해보자.
    아까처럼 함수 A와 B라고 똑같이 생각했을 때, B의 수행 결과나 종료 상태를 A가 신경쓰고 있는 유무 차이이다.

  • Synchronous: 함수 A는 함수 B가 일을 하는 중에 기다리면서, 현재 상태가 어떤지 계속 체크한다.
  • Asynchronous: 함수 B의 수행 상태를 B 혼자 직접 신경쓰면서 처리한다(CallBack). 즉 함수 B에서 할 일이 끝나면
                             CallBack을 해줌으로써 상태를 체크한다.

   즉, 호출된 함수(B)를 호출한 함수(A)가 신경쓰는지, 호출된 함수(B) 스스로 신경쓰는지를 동기/비동기이다.

 

 아래는 4가지 Case의 설명이다.