Hystrix에서 사용하는 벌크 헤드 패턴은 무엇입니까?


답변:


193

일반

일반적으로 벌크 헤드 패턴의 목표는 시스템의 한 부분에서 오류를 방지하여 전체 시스템을 중단하는 것입니다. 이 용어는 선박 전체가 범람하는 단일 선체 파손을 피하기 위해 선박이 별도의 수밀 구획으로 분할 된 선박에서 유래합니다. 하나의 격벽 만 침수됩니다.

벌크 헤드 패턴의 구현은 시스템을 보호하려는 오류의 종류에 따라 다양한 형태를 취할 수 있습니다. 이 답변에서 Hystrix가 처리하는 오류 유형에 대해서만 설명합니다.

격벽 패턴이 책 Release It! 작성자 : Michael T. Nygard.

Hystrix가 해결하는 것

Hystrix의 벌크 헤드 구현 은 구성 요소에 대한 동시 호출 수를 제한합니다 . 이렇게하면 구성 요소의 응답을 기다리는 리소스 (일반적으로 스레드)의 수가 제한됩니다.

세 가지 다른 구성 요소 A , BC 를 사용하는 요청 기반 다중 스레드 응용 프로그램 (예 : 일반적인 웹 응용 프로그램)이 있다고 가정합니다 . 구성 요소 C에 대한 요청이 중단되기 시작하면 결국 모든 요청 처리 스레드가 C 의 응답을 기다리는 동안 중단됩니다 . 이로 인해 응용 프로그램이 완전히 응답하지 않습니다. C에 대한 요청 이 느리게 처리되는 경우 부하가 충분히 높으면 비슷한 문제가 발생합니다.

Hystrix의 벌크 헤드 패턴 구현은 구성 요소에 대한 동시 호출 수를 제한하며이 경우 애플리케이션을 저장했을 것입니다. 요청 처리 스레드가 30 개이고 C에 대한 동시 호출이 10 개로 제한되어 있다고 가정합니다 . 그러면 C를 호출 할 때 최대 10 개의 요청 처리 스레드가 중단 될 수 있고 다른 20 개의 스레드는 여전히 요청을 처리하고 구성 요소 AB를 사용할 수 있습니다 .

Hystrix의 접근 방식

Hystrix는 벌크 헤드에 대해 스레드 격리와 세마포어 격리라는 두 가지 접근 방식을 가지고 있습니다.

스레드 격리

표준 접근 방식은 구성 요소 C 에 대한 모든 요청을 고정 된 수의 스레드가 있고 요청 대기열이없는 (또는 작은) 별도의 스레드 풀로 전달하는 것입니다.

세마포 분리

다른 방법은 C에 대한 요청 전에 모든 호출자가 허용 (시간 초과 0)을 얻도록하는 것 입니다. 세마포어에서 허가를 얻을 수없는 경우 C를 호출합니다. 이 통과되지 않습니다.

차이점

스레드 풀 방식의 장점은 C 로 전달되는 요청이 시간 초과 될 수 있다는 것입니다. 이는 세마포어를 사용할 때 불가능한 일입니다.


10
또한 원본 Hystrix 위키에는 두 가지 접근 방식에 대한 자세한 설명이 있습니다. github.com/Netflix/Hystrix/wiki/How-it-Works
Dmitry

1
회로 차단기와 격벽의 차이점은 무엇입니까?
voipp

4
@voipp 회로 차단기는 완전히 다릅니다. 그들은 서비스가 비정상 상태에있을 때를 감지하고 비정상 서비스를 호출하지 않는 "빠른 실패"상태로 호출자를 이동하지만 서비스가 다시 정상화 될 때까지 대신 오류 코드를 반환합니다. 이렇게하면 비정상 서비스의 오버로드를 방지하여 복구 할 수 있으며 호출자의 속도가 느려지지 않기 때문에 계단식 오류가 방지됩니다.
K Erlandsson 2018

1

다음은 Netflix Hystrix에서 영감을 얻은 Resilience4j의 벌크 헤드에 대한 런타임 설명 이 포함 된 좋은 예입니다 .

아래 예제 구성은 사용의 명확성을 제공 할 수 있습니다.

구성 예 : 주어진 시간에 최대 5 개의 동시 통화를 허용합니다. 진행중인 5 개 중 하나가 동시에 완료 될 때까지 또는 최대 2 초까지 다른 통화를 기다리십시오.

아이디어는 소비 할 수있는 것보다 더 많은 부하로 시스템에 부담을주지 않는 것입니다. 들어오는 부하가 소비량보다 크면 적절한 시간 동안 기다리거나 시간 초과를 기다렸다가 대체 경로로 이동하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.