학습 코드 부하 균형.

범드마틀람
아담은 당근 주스, 오렌지 주스, 사탕수수 주스 등 주스를 판매하는 상점을 열었다.아다브는 매우 열심히 일해서 상점의 청결을 유지했다.Adab은 무설탕 순수한 주스를 제공한다.그는 매일 믹서기를 씻고 양질의 과일을 사용한다.그는 품질에 전념하고 고객을 위해 최선을 다했다.그의 노력으로 그의 주스 가게는 성공을 거두었다.
일찍이 고객이 적었기 때문에 아다브는 자신이 주문을 받고 주스를 만들며 주스를 공급하고 돈을 지불하는 것에 익숙해졌다.이 고객들은 더 짧은 시간 안에 서비스를 받을 수 있다.
현재 그의 고객이 갈수록 많아져서, 그의 고객은 어쩔 수 없이 더 긴 시간을 기다려야 한다.Adab의 책임은 고객이 지불을 받을 때 가능한 한 고객에게 서비스를 제공하는 것이다.
그는 고객이 기다리는 시간을 줄이려고 하는데, 그는 어떻게 해야 합니까?
현재 Adab은 두 사람을 고용하여 주스를 만들고 한 사람이 주문서를 받고 돈을 지불해야 한다. 이것은 고객이 기다리는 시간을 줄이고 더 많은 고객에게 서비스를 제공할 수 있을 것이다.
Adab에서 전자 상거래 애플리케이션을 만들었습니다.프런트엔드는 React를 사용하고javascript를 사용하며,백엔드는 Django를 사용하고Python을 사용합니다.Django 응용 프로그램은 Postgres를 데이터베이스로 사용합니다.
Adab은 고객 수가 증가함에 따라 지연이 현저하게 증가한다는 것을 알아차렸다.adab은 백엔드의 지연을 줄이기 위해 무엇을 해야 합니까?
[Adab 문제의 해결 방안을 이해하려면 다음과 같은 개념을 이해해야 합니다.]
부하 평형기는 분포식 시스템의 구성 요소로 요청을 수신하고 여러 서버에 분포하는 것을 책임진다.
일반적으로 로드 밸런서는 서버 간에 HTTP 요청을 배포하는 데 사용됩니다.부하 균형기에서 요청을 받는 서버를 상위 서버라고 부른다.
다이어그램

위의 그림에 따르면 클라이언트는 부하 균형기에 HTTP 요청을 보내고 요청을 상위 서버로 전송합니다.업스트림 서버가 다운되면 로드 밸런서가 전송 요청을 중지하고
대신 활성 요청을 활성 업스트림 서버로 전달합니다.
로드 밸런서를 사용하면 여러 서버에서 HTTP 요청을 배포할 수 있습니다.이는 백엔드의 서비스 능력을 증가시켜 우리가 더 많은 요청을 처리할 수 있게 한다
부하 균형기는 서버가 정지된 상황에서 우리는 계속 요청을 위해 서비스를 제공할 수 있기 때문에 시스템의 가용성을 향상시켰다.
부하 균형기는 어떻게 요청을 어느 서버로 전달할 것인지를 결정합니까?
부하 균형기는 시작하는 상위 서비스에만 요청을 전달해야 합니다.부하 균형기는 정지된 서버에 요청을 보내는 것을 멈추고 서버가 시작될 때 서버에 요청을 전달해야 한다.
여러 가지 알고리즘을 사용하여 어느 서버에 요청을 보낼지 결정할 수 있습니다.
리그전
이 알고리즘에서 서버는 서버 목록을 순환하고 각 서버에 요청을 보냅니다.
이 예를 들어, 우리는 세 개의 상위 서버와 부하 균형기가 있다.

요청 1-> 서버 0
요청 2-> 서버 1
요청 3-> 서버 2
요청 4-> 서버 0
5->1번 서버 요청
요청 6->2번 서버
요청 7-> 서버 0
요청 8->1번 서버
요청 9->2번 서버
요청 10-> 서버 0
순환하는 변체를 가중순환이라고 하는데 우리는 모든 서버에 가중순환을 부여한다. 가중이 클수록 요청한 서비스가 많아진다.
이 예를 들어, 우리는 세 개의 상위 서버와 부하 균형기가 있다.
가중치는 다음과 같습니다.
{
서버 0: 2,
서버 1: 1,
서버 2: 1,
}

"권한이""2""인 경우 서버 0에, 권한이""1""인 경우 서버 1과 서버 2에 대해 동일한 예제를 사용합니다."그런 다음 요청이 다음과 같이 전달됩니다.
요청 1-> 서버 0
요청 2-> 서버 0
요청 3->1번 서버
요청 4->2번 서버
요청 5-> 서버 0
요청 6-> 서버 0
요청 7->1번 서버
요청 8->2번 서버
요청 9-> 서버 0
요청 10-> 서버 0
IP 해시
이 알고리즘에서 서버는 IP 전송 요청을 기반으로 합니다.동일한 IP에서 요청이 동일한 서버로 전송됩니다.요청을 전달할 서버를 결정하는 데 사용되는 알고리즘은 다음과 같은 공식에 의해 결정된다
server_number_to_send_to =  hash(IP) % number_of_servers

위 그림과 아래 10개의 요청을 고려하세요.
IP(127.0.0.1) -> 서버 0에 대한 요청
IP(127.0.0.2) -> 서버 2의 요청
IP(127.0.0.3) -> 서버 1의 요청
IP(127.0.0.1) -> 서버 0에 대한 요청
IP(127.0.0.2) -> 서버 2의 요청
IP(127.0.0.3) -> 서버 1의 요청
IP(127.0.0.1) -> 서버 0에 대한 요청
IP(127.0.0.2) -> 서버 2의 요청
IP(127.0.0.3) -> 서버 1의 요청
IP(127.0.0.1) -> 서버 0에 대한 요청
...
Nginx(Engine X)와 apacheweb 서버는 로드 밸런싱이 가능한 두 개의 웹 서버입니다.
Kubernetes는 Nginx를 기본 로드 밸런서로 사용합니다.루프는 Nginx에서 사용되는 기본 로드 밸런싱 알고리즘입니다.
이제 Nginx에서 로드 밸런싱을 구현하는 방법을 보여 드리려고 합니다.
127.0.0.1:8000, 127.0.0.1:8001, 127.0.0.1:8001, 127.0.0.1:8002에서 3개의 웹 서버가 실행되고 있다고 가정합니다.
Nginx는 로드 밸런싱을 위해 사용됩니다.nginx 설정은nginx에서 정의합니다.conf 파일.Ubuntu에서 Nginx 경로를 가리킵니다.conf는'/etc/nginx/nginx입니다.형태
다음 코드는 순환 부하 균형에 사용됩니다.
(코드를 이해하기 위해 주석 읽기)
events {
    worker_connections 768;
}

# Define the http Block
http {

    # Tell nginx about our upstream servers and give them the namespace of 'api'
    upstream api {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
     }

    # Define the server Block
    server {
        # Tell nginx to listen for traffic on PORT 80.
        listen 80;
        # Define the name of server
        server_name localhost;
        # Forward all requests starting from index('/') endpoint location.
        location / {
            # Pass the requests to 'api' upstream servers which were defined above.
            proxy_pass http://api;
            # When passing the request to upstream server also add the Host header to request. The Host header comes from the request that nginx recieved.
            proxy_set_header Host $host;
        }
    }
}
IP 해시를 실행하려면 다음 코드를 사용하십시오.
events {
    worker_connections 768;
}

http {
    upstream api {
        # Tell nginx we are using ip hashing for 'api' upstream servers.;
        ip_hash;
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
     }

    server {
        listen 80;
        server_name localhost;
         location / {
            proxy_pass http://api;
            proxy_set_header Host $host;
         }
    }
}
Nginx를 통해 순환 로드 밸런싱 수행
이제 우리 아담 문제의 해결 방안을 토론합시다.
Adab은 Nginx를 로드 밸런서로 사용해야 합니다.그리고 Django 응용 프로그램을 실행하는 3개의 웹 서버 사이에 HTTP 요청을 배포합니다.
질문:
Q) 로드 밸런싱의 예를 보여 줍니다.
A) 여러 웹 서버 간에 HTTP 요청을 배포합니다.
Q) 로드 밸런싱을 사용하는 두 가지 이점을 제공합니다.
A)* 업스트림 서버가 다운되면 요청이 다른 업스트림 서버로 전달되기 때문에 시스템 가용성이 향상됩니다.
  • 더 많은 요청을 처리할 수 있기 때문에 우리 시스템의 토출량을 증가시켰다.
  • Q) 로드 밸런싱이 가능한 두 웹 서버의 이름을 표시합니다.
    A) Nginx 및 apacheweb 서버
    Q) Nginx는 기본적으로 어떤 로드 밸런싱 알고리즘을 사용합니까?
    A) 리그
    Q) IP 해시와 루프를 설명합니다.
    A) 순환 중에 우리는 일련의 서버를 통해 번갈아 요청을 보냅니다.
    동일한 IP에서 요청을 다른 서버로 전달할 수 있습니다.
    IP 해시 아래 알고리즘을 통해 요청이 전송될 서버를 확인합니다
    hash(IP) % number_of_servers
    
    IP 해시에서 동일한 IP를 사용하는 장치에서 요청이 동일한 서버로 전달됩니다.
    Q) JWT를 사용하여 사용자를 인증하고 있습니다.당신은 IP 해시를 사용해야 합니까 아니면 순환을 사용해야 합니까? 왜요?
    A) JWT는 무상태입니다.따라서 모든 업스트림 서버가 요청을 처리할 수 있다.간단하게 보기 위해서 우리는 반드시 순환법을 사용해야 한다.
    Q) 업스트림 서버 2대가 127.0.0.1:8000 및 127.0.0.1:8001에서 실행됩니다.
    Nginx conf 작성
    리그전
    IP 해시
    A) 리그
      events {
        worker_connections 768;
      }
    
      http {
    
        upstream api {
            server 127.0.0.1:8000;
            server 127.0.0.1:8001;
        }
    
        server {
            listen 80;
            server_name localhost;
            location / {
                proxy_pass http://api;
                proxy_set_header Host $host;
            }
        }
      }
    
    IP 해시용
      events {
        worker_connections 768;
      }
    
      http {
    
        upstream api {
            ip_hash;
            server 127.0.0.1:8000;
            server 127.0.0.1:8001;
        }
    
        server {
            listen 80;
            server_name localhost;
            location / {
                proxy_pass http://api;
                proxy_set_header Host $host;
            }
        }
      }
    
    범드마틀람

    좋은 웹페이지 즐겨찾기