dubbo 부하 균형 알고리즘 및 소스 코드 분석

5148 단어 소스 코드 분석
  • dubbo 부하 균형 알고리즘 및 소스 코드 분석
  • 1. 일치 성 Hash 부하 균형 알고리즘 소개 및 소스 코드 해석 (ConsistentHash 부하 균형)
  • 1. 일치 성 Hash 알고리즘 소개
  • 2. 일치 성 Hash 가 해결 한 문제
  • 3. dubbo 사용 일치 성 Hash 알고리즘 의 특징
  • 4. 알고리즘 중점 소스 분석 (ConsistentHashLoadBalance 류)
  • 2. 최소 활성 호출 수 부하 균형 전략 (LeastActive LoadBalance)
  • 1. 알고리즘 설명
  • 2. 알고리즘 중점 소스 분석 LeastActiveLoadBalance 류
  • 3. 윤 문 부하 균형 전략 (RoundRobin LoadBalance)
  • 1. 알고리즘 설명
  • 4. 무 작위 부하 균형 전략 (무 작위 부하 균형)
  • 1. 알고리즘 설명




  • dubbo 부하 균형 알고리즘 및 소스 코드 분석
    dubbo 의 부하 균형 전략 은 네 가지 가 있 습 니 다. 랜 덤 (Random), 폴 링 (RoundRobin), 최소 활성 호출 수 (LeastActive), 일치 성 Hash (ConsistentHash), 결 성 설정 은 기본적으로 Random 랜 덤 부하 균형 전략 입 니 다.
    1. 일치 성 Hash 부하 균형 알고리즘 소개 및 소스 코드 해석 (ConsistentHash 부하 균형)
    1. 일치 성 Hash 알고리즘 소개
  • 가상 링: 일치 성 하 쉬 는 전체 하 쉬 값 공간 을 가상 링 으로 구성 했다.예 를 들 어 특정한 해시 함수 의 값 공간 이 0 ~ 2 ^ 32 - 1 이 라 고 가정 하면 전체 공간 은 시계 방향 으로 조직 되 고 0 과 2 ^ 32 - 1 은 0 시 에 겹 친다.
  • 맵 서버 를 가상 링 (가상) 노드 에 매 핑 합 니 다. 모든 서버 를 지정 한 Hash 함수 로 Hash 값 을 계산 하고 가상 링 의 대응 위치 에 매 핑 합 니 다. 즉, 서비스 에 대응 하 는 노드 입 니 다.
  • 포 지 셔 닝 데이터 가 접근 하 는 서버: 데이터 키 를 같은 Hash 함수 로 Hash 값 을 계산 하고 이 데이터 가 Hash 링 에 있 는 위 치 를 확인 합 니 다. 이 위 치 는 시계 방향 으로 찾 은 첫 번 째 서버 노드, 즉 현재 데이터 키 가 접근 할 서버 입 니 다.
  • 서버 가 가상 노드 를 사용 하 는 목적: 서버 의 수량 이 변동 하 는 상황 에서 자원 을 고 르 게 분포 할 수 있 도록 보장 할 수 있다 (즉, 부하 균형).
  • KETAMA_HASH 알고리즘 의 장점: Hash 값 분포 가 고 르 지 않 은 문 제 를 해결 합 니 다.
  • 트 리 맵 을 자주 사용 하여 Hash 링 을 나타 내 는 이 유 는 트 리 맵 의 시간 복잡 도 는 O (logN) 로 상대 적 으로 효율 이 높 고 트 리 맵 은 빨 간 검 은 나무 구조 로 실체 대상 을 저장 하 는 것 이다.

  • 2. 일치 성 Hash 해결 문제
  • 일치 성 해시 알고리즘 은 부하 균형 에서 자원 이 모든 노드 에 고 르 게 분포 되 고 자원 에 대한 요 구 는 해당 하 는 노드 로 신속하게 이동 할 수 있 도록 요구 하 는 데 자주 사용 된다.
  • 일반적인 해시 알고리즘 에 비해 간단 한 모델 링 방식 으로 캐 시 서버 를 해시 합 니 다.일치 성 해시 알고리즘 은 서버 개수 변화 가 전체 캐 시 에 미 치 는 영향 을 효과적으로 낮 출 수 있 습 니 다.
  • MemCache 클 러 스 터 는 각종 데 이 터 를 클 러 스 터 의 각 노드 에 골 고루 저장 하고 이 데 이 터 를 방문 할 때 클 러 스 터 에 해당 하 는 노드 로 빠르게 이동 할 수 있 도록 요구한다.또한 클 러 스 터 의 노드 가 전체 클 러 스 터 에 미 치 는 영향 이 매우 적 고 큰 동요 로 인해 전체 부하 가 불안정 하지 않도록 해 야 한다.
  • RPC 과정 에서 서비스 제공 자 는 N 개 노드 의 클 러 스 터 배 치 를 하고 서비스 에서 일부 업무 상 태 를 유지 할 수 있 도록 같은 요청 이 매번 같은 서비스 에 떨 어 지 기 를 바란다.

  • 3. dubbo 사용 일치 성 Hash 알고리즘 의 특징
  • 일치 성 Hash 부하 균형 알고리즘, 같은 매개 변수의 요청 은 항상 같은 서비스 제공 자 (서비스 제공 자 목록 이 변 하지 않 는 전제 에서)
  • 특정한 공급 자가 끊 을 때 이 공급 자 에 게 보 낸 요청 은 가상 노드 를 바탕 으로 다른 공급 자 에 게 평평 하 게 펼 쳐 져 심각 한 변동 을 일 으 키 지 않 을 것 이다.
  • 기본 적 인 상황 에서 일치 성 Hash 는 160 개의 가상 노드 구조의 일치 성 Hash 링 을 사용 하고 대응 하 는 방법 첫 번 째 매개 변수 인 Hash 값 만 key 로 Hash 링 에 대응 하 는 서비스 제공 자 대상 (Invoker) 을 가 져 옵 니 다. 기본 설정 방식 을 바 꾸 면 다음 과 같 습 니 다.
  • 4. 알고리즘 중점 소스 분석 (ConsistentHashLoadBalance 클래스)
  • ConcurrentMap> selectors 모든 요청 url (dubbo 설정 의 interface + group + versi on + methodName 으로 조립) 과 일치 성 Hash 대상 ConsistentHashSelector (서비스 제공 자 목록, 서버 목록 구조 에 해당 함) 을 저장 하 는 맵 맵 맵 맵 (일치 성 Hash 대상 의 구성 은 구체 적 으로 2 참조)
  • 구조 일치 성 Hash 링 의 중요 한 속성: TreeMap> virtualInvokers 일치 성 Hash 대상 링 의 가상 노드 를 저장 하 는 데 사용 되 고 각 노드 저장 공급 자 url 의 Hash 값 과 서비스 제공 자 대상 (Invoker) 의 대응 관계
  • 서비스 제공 자 를 가 져 오 는 절차: 1. url 요청 을 통 해 해당 하 는 일치 성 Hash 대상 을 가 져 옵 니 다.2. 요청 매개 변수의 Hash 값 을 통 해 일치 성 hash 링 에서 해당 하 는 가상 노드 를 찾 아 서비스 제공 자 를 가 져 옵 니 다.이 곳 은 TreeMap.tailMap(key) 키 가 from Key 보다 크 거나 같은 맵 집합 을 되 돌려 주 는 특성 을 이용 합 니 다.
  • 알고리즘 의 구체 적 인 실현 과 소스 코드 의 완전한 주 해 는 ConsistentHashLoadBalance 류
  • 참조
    2. 최소 활성 호출 수 부하 균형 정책 (LeastActive LoadBalance)
    1. 알고리즘 설명
  • 최소 활성 화 된 스토리 지 수, 같은 활성 화 된 수 (호출 수가 가장 적 고 동일) 의 무 작위 배분, 활성 화 된 수 는 스토리 지 전후 계수 차 를 말한다.
  • 느 린 공급 자 에 게 더 적은 요 구 를 받 게 합 니 다. 느 린 공급 자가 처리 하고 있 는 서비스 수가 누적 되 어 커지 기 때문에 이 알고리즘 을 사용 하면 적은 요 구 를 할 수 있 습 니 다.

  • 2. 알고리즘 중점 소스 분석 LeastActiveLoadBalance 류
  • int active = RpcStatus.getStatus(invoker.getUrl(),invocation.getMethodName()).getActive(); // 현재 서비스 제공 자 url + method 에 대응 하 는 active 수량 을 가 져 옵 니 다.RpcStatus 는 active (활성 수), totalk (요청 을 처리 하 는 총수), failed (요청 실패 수량), 그리고 각종 상황 의 서비스 처리 시간 을 포함 한 모든 서비스 제공 자의 모든 서비스 (url + mothod 로 표시) 를 기록 하 는 RpcStatus 를 통 해 기록 합 니 다.
  • dubbo 는 서비스 제공 자의 각 서비스 url 의 active 수량 을 어떻게 기록 합 니까?
  • Filter (ActiveLimitFilter (소비자 대응) 와 ExecuteLimitFilter (공급 자 대응) 를 통 해 active 를 업데이트 합 니 다. 특정한 provider 의 특정한 서비스 가 요청 에 배정 되면 이 두 필 터 는 서비스 제공 자가 요청 을 처리 하기 전에 avtive 속성 을 추가 합 니 다.또한 처리 가 완료 되 거나 이상 할 때 avtive 속성 을 줄 입 니 다.


  • 3. 윤 문 부하 균형 전략 (RoundRobin LoadBalance)
    1. 알고리즘 설명
  • 순환 하고 공약 후의 가중치 에 따라 순환 율 을 설정한다.
  • 느 린 공급 자가 누적 요청 하 는 문제 가 존재 합 니 다.

  • 4. 무 작위 부하 균형 전략 (무 작위 부하 균형)
    1. 알고리즘 설명
  • 랜 덤 으로 가중치 에 따라 랜 덤 확률 을 설정 합 니 다.
  • 전체 12032 ℃ 에서 부 딪 힐 확률 은 12220 ℃ 이지 만 스토리 보드 의 양 을 조절 할 수록 분포 가 고 르 고 전체 12157 ℃ 이 며 확률 에 따라 스토리 보드 의 가중치 도 고 르 기 때문에 동태 적 으로 공급 자의 가중치 를 조정 하 는 데 유리 하 다.
  • 좋은 웹페이지 즐겨찾기