전자상거래 프로모션 등 동시 접속률이 높은 상황에서는 트래픽이 계속해서 쏟아져 나오고, 서비스 간 상호 통화 빈도가 급격하게 늘어나 시스템 부하가 너무 높아지게 됩니다. 이때 시스템의 안정성이 너무 높아집니다. 시스템이 의존하는 서비스 시스템에 미치는 영향은 매우 크고, 네트워크 연결 중단, 서비스 다운타임 등 산사태를 일으키는 불확실한 요인이 많이 있습니다. 일반적으로 마이크로서비스 내결함성 구성 요소는 마이크로서비스 시스템을 효과적으로 보호할 수 있는 전류 제한, 격리, 성능 저하, 회로 차단기 및 기타 수단을 제공합니다. 이 기사에서는 주로 전류 제한에 대해 설명합니다.
전류 제한은 작동 주파수가 정의된 제한을 초과하지 않도록 최대 유량을 제한하는 것을 의미합니다. 시스템이 제공할 수 있는 최대 동시성은 제한되어 있고, 동시에 요청이 너무 많아서 반짝 세일, 대규모 프로모션 등 조절이 필요합니다. 즉각적으로 많은 요청이 쇄도하면 서버가 이를 처리할 수 없습니다. 그래서 스로틀링을 해야 합니다. 속도 제한은 특정 기간 동안 API에 도달할 수 있는 요청 수를 제한하여 우발적이거나 악의적인 남용으로부터 서비스를 보호합니다. 속도 제한이 없으면 모든 사용자가 서버에 요청을 쏟아부어 다른 사용자가 굶어 죽는 상황을 초래할 수 있습니다.
다음으로 4가지 일반적인 전류 제한 알고리즘
이 알고리즘의 장점은 급증하는 요청을 원활하게 하고 이를 일정한 속도로 처리한다는 것입니다. 또한 로드 밸런서에서 구현하기 쉽고 모든 사용자에게 메모리 효율적입니다. 요청 수에 관계없이 서버에 대한 일정하고 거의 균일한 트래픽을 유지합니다.
단점은 요청이 폭증하면 버킷이 가득 차서 새로운 요청이 부족해질 수 있다는 것입니다. 또한 요청이 지정된 시간 내에 완료된다는 보장도 없습니다.
장점:
교통이 원활합니다.
누수 버킷 알고리즘은 고정된 속도로 요청을 처리하기 때문에 트래픽을 효과적으로 원활하게 하고 형성하며 트래픽 버스트와 변동을 방지할 수 있습니다(메시지 대기열의 피크 감소 및 밸리 채우기 효과와 유사).토큰 버킷 알고리즘: 한도가 2r/s라고 가정하면 토큰은 500밀리초의 고정 속도로 버킷에 추가됩니다. 버킷에는 최대 b개의 토큰을 저장할 수 있습니다. 버킷이 가득 차면 새로 추가된 토큰은 폐기되거나 거부됩니다. n바이트 크기의 패킷이 도착하면 n개의 토큰이 버킷에서 제거되고 패킷이 네트워크로 전송됩니다. 버킷에 n개 미만의 토큰이 있는 경우 토큰은 삭제되지 않으며 패킷 흐름이 제한됩니다(폐기되거나 대기하도록 버퍼링됨). 토큰 버킷 전류 제한 원리는 그림과 같습니다.
현재 제한 서버의 토큰 버킷은 실제 서비스 성능 및 기간에 따라 토큰 생성 속도와 버킷 용량을 조정할 수 있습니다. 비율을 높여야 하는 경우 버킷에 넣는 토큰의 비율은 요청에 따라 늘릴 수 있습니다.
토큰이 생성되는 비율은 일정하지만 토큰을 얻기 위해 요청하는 비율은 제한되지 않습니다. 즉, 순간적인 대규모 트래픽에 직면했을 때 알고리즘은 짧은 시간 내에 많은 수의 토큰을 얻을 수 있으며 토큰을 얻는 과정에서 많은 리소스를 소비하지 않습니다
각 새로운 요청이 서버에 도착할 때 , 실행됩니다. 두 가지 작업:
장점:
카운터 알고리즘의 시간 임계점 결함으로 인해 시간 임계점을 중심으로 매우 짧은 시간 내에 공격에 취약합니다. 예를 들어 특정 인터페이스를 분당 최대 100번까지 요청하도록 설정되어 있습니다. 예를 들어 12:00:00~12:00:59 시간에는 데이터 요청이 없는데 갑자기 동시 요청이 있는 경우입니다. 12:00:59-12:01:00 기간 동안 100개의 요청이 있고 다음 계산 주기에 들어가면 카운터가 지워지고 12:01:00-12:01:01 사이에 100개의 요청이 있습니다. 즉, 시간 임계점 부근에서 동시에 임계값의 2배에 달하는 요청이 발생하여 백그라운드 처리 요청의 과부하가 발생하여 시스템 운영 능력이 부족해지고 심지어 시스템이 충돌하는 경우도 발생할 수 있습니다.
단점:
예: 현재 제한은 초당 3개이며, 첫 번째 초의 마지막 밀리초에 3개의 요청이 전송되고, 두 번째 초의 첫 번째 밀리초에 3개의 요청이 전송됩니다. 이 2밀리미터 내에서 6개의 요청이 처리되었지만 현재 제한이 트리거되지 않았습니다. 트래픽이 폭증하면 서버에 과부하가 걸릴 수 있습니다.
슬라이딩 윈도우 알고리즘은 고정된 기간을 분할하여 시간에 따라 이동하는 방식으로, 시작 시점이 시간 목록의 두 번째 시점이 되고 종료 시점이 추가됩니다. 특정 시점을 지정하고 이를 지속적으로 반복하면 카운터의 임계점 문제를 교묘하게 피할 수 있습니다.
슬라이딩 윈도우 알고리즘은 카운터 알고리즘의 시간 임계점 문제를 효과적으로 피할 수 있지만 여전히 시간 세그먼트 개념이 있습니다. 동시에 슬라이딩 윈도우 알고리즘의 계산 작업은 고정 시간 윈도우 알고리즘보다 시간이 더 많이 소요됩니다.
단점: 여전히 전류 한도가 충분히 원활하지 않다는 문제가 있습니다. 예를 들어 현재 제한은 초당 3개이며 첫 번째 밀리초에 3개의 요청이 전송됩니다. 현재 제한에 도달하면 남은 창 시간 내의 모든 요청이 거부되어 결과적으로 성능이 저하됩니다.
일반적으로 사용되는 4가지 전류 제한 알고리즘인 고정 창 알고리즘, 슬라이딩 창 알고리즘, 누출 버킷 알고리즘 및 토큰 버킷 알고리즘을 소개했습니다. 각 알고리즘마다 고유한 특성과 적용 가능한 시나리오가 있으므로 아래에서 간략하게 요약하고 비교해 보겠습니다.
위 내용은 일반적으로 사용되는 4가지 전류 제한 알고리즘을 마스터하면 반드시 인터뷰에 합격할 수 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!