팁 (조언)
이 콘텐츠는 .NET Docs 또는 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공되는 컨테이너화된 .NET 애플리케이션용 .NET 마이크로 서비스 아키텍처인 eBook에서 발췌한 내용입니다.
부분 오류를 처리하려면 여기에 설명된 전략 중 하나를 사용합니다.
내부 마이크로 서비스에서 비동기 통신(예: 메시지 기반 통신)을 사용합니다. 잘못된 디자인이 결국 잘못된 중단의 주요 원인이 되기 때문에 내부 마이크로 서비스에서 동기 HTTP 호출의 긴 체인을 만들지 않는 것이 좋습니다. 반대로 클라이언트 애플리케이션과 첫 번째 수준의 마이크로 서비스 또는 세분화된 API 게이트웨이 간의 프런트 엔드 통신을 제외하고 내부 마이크로 서비스에서 초기 요청/응답 주기를 지나면 비동기(메시지 기반) 통신만 사용하는 것이 좋습니다. 최종 일관성 및 이벤트 기반 아키텍처는 파급 효과를 최소화하는 데 도움이 됩니다. 이러한 접근 방식은 더 높은 수준의 마이크로 서비스 자율성을 적용하므로 여기에 언급된 문제를 방지합니다.
지수 백오프와 함께 재시도를 사용합니다. 이 기술은 서비스를 짧은 시간 동안만 사용할 수 없는 경우 호출 재시도를 특정 횟수만큼 수행하여 짧고 일시적인 오류를 방지하는 데 도움이 됩니다. 이 문제는 일시적인 네트워크 문제 또는 마이크로 서비스/컨테이너가 클러스터의 다른 노드로 이동될 때 발생할 수 있습니다. 그러나 이러한 재시도가 회로 차단기를 사용하여 제대로 설계되지 않은 경우 파급 효과를 악화시켜 궁극적으로 DoS(서비스 거부)를 유발할 수도 있습니다.
네트워크 시간 제한을 해결합니다. 일반적으로 클라이언트는 무기한으로 차단되지 않고 응답을 기다릴 때 항상 시간 제한을 사용하도록 설계해야 합니다. 시간 제한을 사용하면 리소스가 무기한으로 연결되지 않습니다.
회로 차단기 패턴을 사용합니다. 이 방법에서 클라이언트 프로세스는 실패한 요청 수를 추적합니다. 오류율이 설정된 제한을 초과하면, 추가 시도가 즉시 실패하도록 "회로 차단기"가 작동합니다. (많은 수의 요청이 실패하는 경우 서비스를 사용할 수 없고 요청을 보내는 것은 무의미하다는 것을 시사합니다.) 시간 제한 기간이 지나면 클라이언트가 다시 시도해야 하며, 새 요청이 성공하면 회로 차단기를 닫습니다.
대체 기능을 제공하세요. 이 방법에서 클라이언트 프로세스는 캐시된 데이터 또는 기본값 반환과 같은 요청이 실패할 때 대체 논리를 수행합니다. 이는 쿼리에 적합한 접근 방식이며 업데이트 또는 명령에 더 복잡합니다.
대기 중인 요청 수를 제한합니다. 또한 클라이언트는 클라이언트 마이크로 서비스가 특정 서비스에 보낼 수 있는 미해결 요청 수에 상한을 적용해야 합니다. 제한에 도달한 경우 추가 요청을 수행하는 것은 무의미할 수 있으며 이러한 시도는 즉시 실패해야 합니다. 구현 측면에서 Polly Bulkhead 격리 정책을 사용하여 이 요구 사항을 충족할 수 있습니다. 이 접근 방식은 SemaphoreSlim를 구현하여 병렬 처리 속도를 조절하는 것입니다. 또한 격벽 외부의 "대기열"을 허용합니다. 실행 전에 과도한 부하를 사전에 제거할 수 있습니다(예: 용량이 전체로 간주되기 때문). 이렇게 하면 회로 차단기가 오류를 대기하므로 회로 차단기보다 특정 오류 시나리오에 대한 응답이 더 빠릅니다. Polly의 BulkheadPolicy 개체는 벌크헤드와 큐가 얼마나 꽉 찼는지 노출하고 오버플로에 대한 이벤트를 제공하므로 자동화된 수평 크기 조정을 구동하는 데도 사용할 수 있습니다.
추가 리소스
복원력 패턴
https://learn.microsoft.com/azure/architecture/framework/resiliency/reliability-patterns복원력 추가 및 성능 최적화
https://learn.microsoft.com/previous-versions/msp-n-p/jj591574(v=pandp.10)벌크헤드. GitHub 리포지토리. Polly 정책을 사용하여 구현합니다.
https://github.com/App-vNext/Polly/wiki/BulkheadAzure용 복원 애플리케이션 디자인
https://learn.microsoft.com/azure/architecture/framework/resiliency/app-design일시적인 오류 처리
https://learn.microsoft.com/azure/architecture/best-practices/transient-faults
.NET