부하 평형기가 무엇인지, 언제 사용하는지 찾았습니다.

TL;박사
...네, 많은 일을 하면서 천천히 저를 괴롭히고 있습니다. 이것이 바로 제가 당신의 도움을 필요로 하는 이유입니다.청하다

우리 내 문제부터 시작합시다.


상상해 봐, 내가 새로운 모바일 응용 프로그램을 만들었어.내 시스템은 REST API를 사용하여 통신하는 프런트엔드 및 백엔드 서비스로 구성됩니다.이것은 나의 시스템 구조다.

단일 백엔드 인스턴스가 있는 아키텍처
나의 제품은 처음으로 출시되었는데, 단지 소수의 사용자만이 그것을 사용하고 있다.나의 백엔드 서비스는 여전히 예상대로 요청을 처리할 수 있다.나의 고객은 응용 프로그램이 매우 빨리 실행되기 때문에 매우 기쁘다.
현재, 내가 응용 프로그램에 더 많은 기능을 추가하면서 사용자도 증가하고 있다.나의 백엔드 서비스 처리 요청은 이전보다 많다.요청의 증가는 나의 백엔드 서비스에 영향을 미치기 시작하여 성능을 떨어뜨린다.모든 요청을 처리할 수 없기 때문에 백엔드 서비스도 중지되었습니다.이것은 가용성도 떨어졌다는 것을 의미한다.
사용자들은 프로그램이 느려졌다고 불평하기 시작했다.그들은 기분이 좋지 않다. 나도 마찬가지다. 왜냐하면 나는 사용자를 잃을까 봐 두렵기 때문이다.백엔드 성능을 향상시키기 위해 무엇을 할 수 있습니까?가용성을 높이기 위해 무엇을 할 수 있습니까?
몇 가지 방법으로 그것을 실현할 수 있다.응용 프로그램 알고리즘에 다시 접근할 수 있습니다.프로그래밍 언어를 바꿀 수 있습니다.서버에 더 많은 자원을 추가할 수 있습니다.백엔드 서비스 실례를 더 추가할 수 있습니다.네가 명명한 것이다.
이런 상황에서 나는 백엔드 서비스의 실례를 더 많이 추가할 것이다. 왜냐하면 나는 백엔드 서비스를 다시 쓸 시간이 충분하기 때문이다.

로드 밸런싱 도입


백엔드 서비스의 여러 가지 실례를 만들고 싶기 때문에, 요청을 모바일 응용 프로그램에서 이 실례로 바꾸는 메커니즘이 필요합니다.이곳에서 나는 부하 평형기를 사용했다.말 그대로 부하 평형기는 백엔드 실례 간에 작업 부하를 공유하는 데 쓰인다.여기는 나의 구조다.

여러 백엔드 인스턴스가 있는 아키텍처
부하 평형기는 자신의 알고리즘을 가지고 작업 부하를 공유한다.내가 선택할 수 있는 알고리즘은 매우 적다. 예를 들어 순환, 가중 순환, 최소 연결 등이다.나는 내가 필요로 하는 알고리즘을 선택할 수 있다.
이 장면을 사용하면 현재 나의 백엔드 서비스는 이전보다 더 적은 요청을 처리할 것이다.만약 내가 분당 평균 6000개의 요청을 처리한다고 가정한다면, 이 요청들은 백엔드 서비스로 처리된다.현재 나는 작업 부하를 세 개의 실례에 분배할 수 있다. 이것은 한 실례가 분당 2000개의 요청을 처리한다는 것을 의미한다.이것은 내가 성능과 정상적인 운행 시간을 향상시키는 데 도움을 줄 것이다.
우리는 HAProxy, Nginx, 클라우드 부하 균형 같은 부하 균형 기술을 사용할 수 있다.너는 네가 원하는 어떤 것도 고를 수 있다.
그 사건만 처리합니까?
분명히 아니야!부하 균형은 내가 고부하를 처리하고 싶은 상황만 처리하는 것이 아니다.그럼 또 뭐가 있을까요?

VM에서 컨테이너로 마이그레이션


가상 머신에서 실행되는 서비스가 있다는 것을 다시 한 번 상상해 봅시다.하지만 모든 배치를 용기로 옮기고 싶다는 것을 알아야 한다.간단하게 들린다. 왜냐하면 나는 용기를 사용하여 나의 모든 서비스를 재배치할 수 있기 때문이다.그 후에, 나는 모든 요청을 용기 집단으로 다시 정할 것이다.그런데 이게 좋은 방법인가요?
이런 방법은 위험이 너무 크다.용기 집단에 잘못된 배치가 있다고 가정해 보세요.그것은 정지를 초래할 수 있다.그렇다면 부하 평형기는 어떻게 나를 도와줍니까?

VM에서 컨테이너로의 마이그레이션 모드
용기 집단으로 직접 이동하는 것은 위험하기 때문에 나는 부분적으로 이동할 수 있다.모든 서비스를 용기 집단에 배치한 후, 나는 우선 그것에 대한 요청을 보내서 그것을 테스트하고 싶다.VM 클러스터와 컨테이너 클러스터 간에 로드 밸런싱을 공유할 수 있습니다.나는 부하 평형기를 20% 의 요청을 용기 집단에 공유하고 80% 의 요청을 가상 기기 집단에 공유하도록 설정했다.이런 방법을 사용하면 내 용기 집단을 감시해서 그 배치가 양호하다는 것을 확보할 수 있다.그때가 되면, 용기 집단을 완전히 사용할 자신이 있을 때까지 용기 집단에 더 많은 요청을 추가할 수 있다.

전체에서 마이크로 서비스로 마이그레이션


VM 클러스터를 컨테이너 클러스터로 마이그레이션하는 것과 유사합니다.내가 직접monolith를 옮길 때, 나는 위험이 있다.부하 평형기는 내가 일부분 이동하는 것을 도울 수 있다.나는 부하 평형기를 사용하여 나의 monolith 집단과 나의 microservices 집단 사이에서 요청을 공유할 수 있다.나는 마이크로서비스가 이미 잘 작동하고 있다고 확신할 때까지 부하 평형기를 사용한다.그리고 나는 완전히 옮겼다.

우리 고젝에서 뭐 했어요?


Gojek에서는 Weaver라는 내부 로드 밸런싱도 만들었습니다.이것은 개원 프로젝트이니, 너는 여기서 찾을 수 있다.

고잭 / 직물공


동적 분할 정책을 가진 고급 HTTP 리버스 에이전트


Weaver - 고급 기능을 갖춘 최신 HTTP 에이전트






  • Description
  • Features
  • Installation
  • Architecture
  • Configuration
  • Contributing
  • License
  • 묘사


    Weaver는 동적 분할 정책을 가진 Tier 7 로드 밸런서입니다.
    이것은 고급 기능을 갖춘 현대 HTTP 리버스 에이전트입니다.

    특징:

  • 헤더/경로/본문 필드 기반 분할 요청
  • 백엔드 당
  • 라우팅에 대한 요청 지표
  • 라우팅별 동적 구성(재부팅 없음!)
  • 빠르다
  • 분할 요청을 지원하는 다양한 알고리즘(일치 산열, 모드, s2 등)
  • 바이너리 파일이 포함된 단일 패키지로 포장
  • 장애 로그(관찰 가능)
  • 설치


    소스 코드에서 생성

  • 클론 재구매:
  • git clone [email protected]:gojektech/weaver.git
    
  • 위버 바이너리 파일 만들기
  • make build
    

    다양한 구조의 바이너리 파일


    바이너리 파일을 다운로드하여 다음 위치에서 게시합니다. here

    건축학



    Weaver는 제어 평면etcd을 사용하여 특정한 루트 설정에 따라 전송 요청을 일치시키고 일부 분할 정책을 바탕으로 데이터를 서로 다른 백엔드로 구분합니다.
    Weaver는 서로 다른 라우팅으로 구성될 수 있습니다.
    View on GitHub
    우리는 기존의 부하 평형기 기술을 사용할 수 있다는 것을 알고 있기 때문에, 우리가 그것을 만든 이유를 읽을 수 있습니다.




    나는 네가 그것을 즐겨 읽기를 바란다.
    카피호딘💻 ☕️

    좋은 웹페이지 즐겨찾기