전통문화대전망 - 전통 미덕 - 흐름 제어
흐름 제어
리소스에 병목 현상이 발생하면 서비스 프레임워크는 소비자의 흐름을 제한하고 흐름 제어 보호 메커니즘을 활성화해야 합니다. 흐름 제어에는 여러 가지 전략이 있습니다. 가장 일반적으로 사용되는 전략으로는 액세스 속도에 대한 정적 흐름 제어, 리소스 점유에 대한 동적 흐름 제어, 동시 소비자 연결 수에 대한 연결 제어, 병렬 액세스 수에 대한 동시성 제어가 있습니다. 실제로 더 나은 결과를 얻으려면 다양한 교통 통제 전략을 종합적으로 사용해야 합니다.
정적 흐름 제어는 주로 클라이언트 액세스 속도를 제어합니다. 일반적으로 SLA(서비스 품질 수준 계약)에서 합의된 QPS를 기반으로 전역 흐름 제어를 수행합니다. 예를 들어 주문 서비스의 정적 흐름 제어 임계값입니다. 100QPS이면 클러스터에 얼마나 많은 주문 서비스 인스턴스가 있는지에 관계없이 총 처리 속도는 100QPS를 초과할 수 없습니다.
전통적인 정적 흐름 제어 설계는 설치 사전 할당 방식을 채택합니다. 소프트웨어 설치 시 각 서비스 노드에 할당되는 QPS 임계값은 클러스터 서비스 노드 수와 정적 흐름 제어를 기반으로 계산됩니다. 시스템이 실행 중일 때 각 서비스 노드는 자체 할당된 임계값에 따라 흐름 제어를 수행하고 흐름 제어 임계값을 초과하는 요청에 대한 액세스를 거부합니다.
서비스 아키텍처가 시작되면 이 노드의 정적 흐름 제어 임계값이 메모리에 로드되고 서비스 프레임워크는 핸들러 인터셉터를 사용하여 서비스 호출 전에 인터셉션 계산을 수행합니다. 카운터가 지정된 기간 T 내에 QPS 온라인에 도달하면 흐름 제어가 시작되고 새 요청 메시지 액세스가 거부됩니다.
주목해야 할 두 가지 사항이 있습니다:
정적 할당 방식의 가장 큰 단점은 서비스 인스턴스의 동적 변경을 무시한다는 것입니다.
다음 중 하나 분산 서비스 프레임워크의 특징은 서비스의 동적 온라인 및 오프라인 또는 자동 검색 메커니즘으로 인해 운영 중 비즈니스 규모의 변화에 따라 서비스 노드 수가 자주 변경된다는 점입니다. 이러한 상황에서 정적 할당 솔루션은 분명히 요구 사항을 충족할 수 없습니다.
애플리케이션과 서비스가 클라우드로 마이그레이션될 때 PaaS 플랫폼의 중요한 기능은 애플리케이션과 서비스의 탄력적인 확장을 지원하는 것입니다. 클라우드에서는 리소스가 동적으로 할당 및 조정되고 정적 할당 임계값이 설정됩니다. 체계가 적응할 수 없습니다. 서비스가 클라우드로 마이그레이션됩니다.
정적 할당의 단점을 해결하기 위해 실제로는 동적 할당량 할당이 일반적으로 채택됩니다. 작동 원리: 서비스 등록 센터는 흐름 제어 기간 T 단위로 각 노드에 할당된 흐름 제어 임계값 QPS를 동적으로 푸시합니다. 서비스 노드가 변경되면 서비스 등록 센터가 트리거되어 각 노드의 할당량을 다시 계산한 후 이를 푸시합니다. 이러한 방식으로 서비스 노드 수가 추가되거나 감소되는지 여부를 다음 흐름에서 식별하고 처리할 수 있습니다. 이는 전통적인 정적 할당 방식이 노드 수의 동적 변화에 적응할 수 없는 문제를 해결합니다.
프로덕션 환경에서는 각 시스템/VM의 구성이 다를 수 있습니다. 각 서비스 노드가 전체 흐름 제어 임계값/서비스 노드 수의 균등성을 채택하면 고성능 및 빠른 처리가 발생할 수 있습니다. 노드 할당량은 빨리 소모되지만 성능이 좋지 않은 노드의 할당량이 남아 있습니다. 이로 인해 전체 할당량이 소모되지 않지만 시스템에는 정적 흐름 제어 문제가 있습니다. 한 가지 해결책은 서비스 등록 센터가 할당량을 계산할 때 각 서비스 노드의 성능 KPI 데이터(예: 서비스 호출의 평균 지연)에 따라 할당량에 가중치를 부여하는 것입니다. 처리 능력이 낮은 서비스 노드에는 더 적은 수의 지표가 할당됩니다. 성능이 높을수록 더 적은 수의 지표가 할당되므로 흐름 제어 편차가 최대한 낮아질 수 있습니다.
또 다른 해결책은 할당량 지표를 반환하고 다시 적용하는 것입니다. 각 서비스 노드는 자체 할당된 지표 값과 처리 속도를 기반으로 계산 결과 잉여 지표가 있는 것으로 나타나면 초과분을 예측합니다. 할당량을 모두 사용한 서비스 노드는 서비스 등록 센터로 돌아가서 할당량을 다시 신청하기 위해 서비스 등록 센터로 이동합니다. N회 연속으로 새로운 할당량 표시를 신청할 수 없으면 흐름 제어가 수행됩니다. 새로 액세스된 요청 메시지에 대해 수행됩니다.
마지막 요점은 정적 흐름 제어와 로드 밸런싱을 결합하여 보다 정확한 스케줄링 및 제어를 달성하는 것입니다. 소비자는 각 서비스 노드의 로드를 기준으로 가중치가 부여된 라우팅을 수행하며, 할당량 계산도 로드에 따라 가중치가 적용되고 조정되므로 성능이 낮은 노드에는 더 적은 수의 할당량 표시기가 할당됩니다. 뿐만 아니라 이는 시스템의 로드 밸런싱을 보장하고 보다 합리적인 할당량 할당을 달성합니다.
동적 할당 할당 시스템은 노드 변경으로 인한 부정확한 흐름 제어 문제를 해결할 수 있고 평등한 할당 할당으로 인한 부의 불평등도 개선할 수 있지만 최적의 솔루션은 아니며 단점이 있습니다. 요약하면 다음과 같습니다.
동적 흐름 제어의 궁극적인 목적은 교통이나 접근 속도를 정밀하게 제어하는 것이 아니라 생명을 구하는 것입니다. 시스템 부하 압력이 매우 높을 경우 시스템은 과부하 상태에 들어갈 수 있으며, 이는 CPU 및 메모리 자원이 과부하되거나 응용 프로그램 프로세스 내의 자원이 거의 소진되는 경우가 있습니다. Full GC가 장기간 지속되면 심각한 메시지 백로그가 발생하거나 애플리케이션 프로세스가 다운되어 결국 클러스터의 다른 노드에 압력이 전달되어 계단식 오류가 발생하게 됩니다.
동적 흐름 제어를 유발하는 요소는 리소스입니다. 리소스는 서로 다른 리소스 로드 조건에 따라 여러 수준의 흐름으로 구분됩니다. 제어 제어 시스템이 다릅니다. 즉, 거부된 메시지의 비율이 다릅니다. 각 레벨에는 일반적으로 온라인 동적 조정을 지원하는 해당 흐름 제어 임계값이 있습니다.
동적 흐름 제어 요소에는 시스템 리소스와 애플리케이션 리소스라는 두 가지 범주가 포함됩니다. 일반적으로 사용되는 시스템 리소스는 다음과 같습니다.
일반적으로 동적 흐름 제어는 여러 수준으로 나뉘며 메시지는 서로 다른 수준에서 거부됩니다. 수준은 리소스의 로드 사용량에 따라 달라집니다. 예를 들어, 1차 흐름 제어가 발생하면 메시지의 1/8이 거부되고, 2차 흐름 제어가 발생하면 메시지의 1/4이 거부됩니다.
다양한 수준에는 서로 다른 흐름 제어 임계값이 있습니다. 시스템은 온라인 상태가 된 후 기본 흐름 제어 임계값을 제공합니다. 다양한 흐름 제어 요소에는 서로 다른 흐름 제어 임계값이 있으며 일반적으로 임계값은 이에 따라 조정됩니다. 따라서 흐름 제어 임계값은 온라인 수정 및 동적 효과를 지원해야 합니다.
시스템 변동으로 인한 간헐적인 흐름제어를 방지하기 위해서는 흐름제어 상태에 진입하든지 복귀하든지 연속적으로 N회 수집하여 평균값을 계산해야 한다는 점을 지적해야 한다. 평균값이 흐름 제어 임계값보다 크면 흐름 제어 상태에 진입합니다. 마찬가지로 평균 자원 사용량이 N회 연속 흐름 제어 임계값보다 낮을 경우에만 흐름 제어 상태가 정상으로 돌아갈 수 있습니다.
리소스 사용량의 변화에 따라 흐름 제어가 업그레이드되거나 다운그레이드됩니다. 동일한 흐름 제어 주기 내에서는 흐름 제어 수준이 점프하지 않습니다.
동시성 제어는 스레드의 동시 실행 수를 제어하여 특정 서비스 또는 서비스 메서드의 과도한 소비를 제한하여 너무 많은 리소스를 소비하고 다른 서비스의 정상적인 작동에 영향을 미치는 것입니다.
동시성 제어에는 두 가지 형태가 있습니다.
일반적으로 분산 서비스 프레임워크 서비스 공급자와 소비자 간에는 문제가 발생하는 것을 방지하기 위해 긴 연결 전용 프로토콜이 사용됩니다. 소비자 연결이 너무 많아 서버의 부하 압력이 너무 높으며 시스템에서 연결 수 제어를 지원해야 합니다.
서비스 호출 파이프라인 메커니즘을 기반으로 요청 메시지의 수신 및 전송, 응답 메시지의 수신 및 전송, 예외 메시지를 차단할 수 있습니다(Sprint의 AOP 메커니즘과 유사하지만 반사 메커니즘을 사용하지 않음) , 성능이 더 높음), 파이프라인 차단 측면 인터페이스를 사용하여 서비스 호출 전에 요청 메시지를 가로채서 계산하고 카운터를 기반으로 흐름 제어를 수행합니다.
흐름 제어. 서비스 SLA를 보장하는 중요한 조치이며 비즈니스 피크 기간에도 중요한 조치입니다. 효과적인 장애 예방 및 복구 수단이 되려면 분산 서비스 프레임워크가 다양한 흐름 제어 전략을 지원하고 흐름의 온라인 조정도 지원해야 합니다. 애플리케이션을 다시 시작하지 않고도 동적으로 적용할 수 있는 임계값 및 전략을 제어하여 온라인 서비스 거버넌스의 효율성과 민첩성을 향상시킵니다.