다음을 통해 공유


안정성을 지원하는 아키텍처 디자인 패턴

워크로드 아키텍처를 디자인할 때 일반적인 문제를 해결하는 업계 패턴을 사용해야 합니다. 패턴은 워크로드 내에서 의도적으로 절충하고 원하는 결과를 최적화하는 데 도움이 될 수 있습니다. 또한 보안, 성능, 비용 및 운영에 영향을 줄 수 있는 특정 문제에서 발생하는 위험을 완화하는 데 도움이 될 수 있습니다. 완화되지 않으면 이러한 위험으로 인해 결국 안정성 문제가 발생합니다. 이러한 패턴은 실제 환경에서 지원되며, 클라우드 규모 및 운영 모델을 위해 설계되었으며, 본질적으로 공급업체에 구애받지 않습니다. 워크로드 디자인을 표준화하는 방법으로 잘 알려진 패턴을 사용하는 것은 운영 우수성의 구성 요소입니다.

많은 디자인 패턴은 하나 이상의 아키텍처 핵심 요소를 직접 지원합니다. 안정성 기둥을 지원하는 디자인 패턴은 워크로드 가용성, 자체 보존, 복구, 데이터 및 처리 무결성 및 오작동 억제의 우선 순위를 지정합니다.

다음 표에서는 안정성 목표를 지원하는 아키텍처 디자인 패턴을 요약합니다.

패턴 요약
대사 네트워크 통신과 관련된 교차 절단 작업을 오프로드하여 네트워크 통신을 캡슐화하고 관리합니다. 결과 도우미 서비스는 클라이언트를 대신하여 통신을 시작합니다. 이 조정 지점은 다시 시도 또는 버퍼링과 같은 네트워크 통신에 안정성 패턴을 추가할 수 있는 기회를 제공합니다.
프런트 엔드의 백 엔드 특정 프런트 엔드 인터페이스에만 적용되는 별도의 서비스를 만들어 워크로드의 서비스 계층을 개별화합니다. 이러한 분리로 인해 한 클라이언트를 지원하는 서비스 계층의 오작동은 다른 클라이언트의 액세스 가용성에 영향을 미치지 않을 수 있습니다. 다양한 클라이언트를 다르게 처리하는 경우 예상 클라이언트 액세스 패턴에 따라 안정성 작업의 우선 순위를 지정할 수 있습니다.
벌크헤드 오작동의 폭발 반경을 격리하기 위해 구성 요소 간의 의도적이고 완전한 분할을 소개합니다. 이 오류 격리 전략은 문제가 발생한 격벽에 대한 오류를 포함하려고 시도하여 다른 격벽에 미치는 영향을 방지합니다.
캐시 배제 요청 시 채워진 캐시를 도입하여 자주 읽는 데이터에 대한 액세스를 최적화합니다. 그런 다음, 캐시는 동일한 데이터에 대한 후속 요청에 사용됩니다. 캐싱은 데이터 복제를 만들고, 제한된 방법으로 원본 데이터 저장소를 일시적으로 사용할 수 없는 경우 자주 액세스하는 데이터의 가용성을 유지하는 데 사용할 수 있습니다. 또한 캐시에 오작동이 있는 경우 워크로드는 원본 데이터 저장소로 대체됩니다.
차단기 오작동 또는 사용할 수 없는 종속성에 대한 지속적인 요청을 방지합니다. 이렇게 하면 이 패턴은 오류 종속성을 오버로드하는 것을 방지합니다. 이 패턴을 사용하여 워크로드에서 정상 성능 저하를 트리거할 수도 있습니다. 회로 차단기는 자동 복구와 결합되어 자기 보존과 자동 복구를 모두 제공하는 경우가 많습니다.
클레임 확인 메시지 흐름과 데이터를 구분하여 메시지와 관련된 데이터를 별도로 검색하는 방법을 제공합니다. 메시지 버스는 전용 데이터 저장소에 있는 것과 동일한 안정성 및 재해 복구를 제공하지 않으므로 메시지에서 데이터를 분리하면 기본 데이터에 대한 안정성이 향상될 수 있습니다. 또한 이 분리를 통해 재해 발생 후 메시지 큐 복구 방법을 사용할 수 있습니다.
보상 트랜잭션 이전에 적용된 작업의 효과를 반전하여 오류를 복구하는 메커니즘을 제공합니다. 이 패턴은 데이터 변경 내용을 직접 롤백하거나 트랜잭션 잠금을 끊거나 네이티브 시스템 동작을 실행하여 효과를 되돌리는 등의 프로세스를 포함할 수 있는 보정 작업을 사용하여 중요한 워크로드 경로의 오작동을 해결합니다.
경쟁 소비자 분산 및 동시 처리를 적용하여 큐의 항목을 효율적으로 처리합니다. 이 모델은 소비자를 복제본으로 처리하여 큐 처리에서 중복성을 구축하므로 인스턴스 오류로 인해 다른 소비자가 큐 메시지를 처리하는 것을 방지하지 못합니다.
이벤트 소싱 상태 변경을 일련의 이벤트로 처리하여 변경할 수 없는 추가 전용 로그에 캡처합니다. 복잡한 비즈니스 프로세스에서 신뢰할 수 있는 변경 기록이 중요한 경우 이 패턴을 사용할 수 있습니다. 또한 상태 저장소를 복구해야 하는 경우 상태 재구성을 용이하게 합니다.
페더레이션 ID 사용자를 관리하고 애플리케이션에 대한 인증을 제공하기 위해 워크로드 외부에 있는 ID 공급자에게 트러스트를 위임합니다. 사용자 관리 및 인증을 오프로드하면 해당 구성 요소에 대한 안정성이 일반적으로 SLA가 높은 ID 공급자로 전환됩니다. 또한 워크로드 재해 복구 중에는 인증 구성 요소를 워크로드 복구 계획의 일부로 해결할 필요가 없습니다.
게이트웨이 집계 단일 요청에서 여러 백 엔드 서비스에 대한 호출을 집계하여 워크로드와의 클라이언트 상호 작용을 간소화합니다. 이 토폴로지에서는 임시 오류 처리를 클라이언트의 분산 구현에서 중앙 집중식 구현으로 전환할 수 있습니다.
게이트웨이 오프로드 요청을 백 엔드 노드로 전달하기 전과 후에 게이트웨이 디바이스에 요청 처리를 오프로드합니다. 이 책임을 게이트웨이에 오프로드하면 백 엔드 노드에서 애플리케이션 코드의 복잡성이 줄어듭니다. 경우에 따라 오프로드는 기능을 신뢰할 수 있는 플랫폼 제공 기능으로 완전히 대체합니다.
게이트웨이 라우팅 들어오는 네트워크 요청을 요청 의도, 비즈니스 논리 및 백 엔드 가용성에 따라 다양한 백 엔드 시스템으로 라우팅합니다. 게이트웨이 라우팅을 사용하면 시스템의 정상 노드로만 트래픽을 라우팅할 수 있습니다.
정동 여러 지역에서 활성-활성 가용성 모드로 작동하는 시스템을 배포합니다. 이 패턴은 데이터 복제를 사용하여 모든 클라이언트가 모든 지리적 인스턴스에 연결할 수 있는 이상을 지원합니다. 워크로드가 하나 이상의 지역 중단을 견딜 수 있습니다.
상태 엔드포인트 모니터링 해당 용도로 특별히 설계된 엔드포인트를 노출하여 시스템의 상태 또는 상태를 모니터링하는 방법을 제공합니다. 이 엔드포인트를 사용하여 워크로드의 상태를 관리하고 경고 및 대시보드를 관리할 수 있습니다. 자체 복구 수정을 위한 신호로 사용할 수도 있습니다.
인덱스 테이블 클라이언트가 데이터를 직접 검색할 수 있도록 메타데이터를 조회할 수 있도록 하여 분산 데이터 저장소에서 데이터 검색을 최적화하여 전체 데이터 저장소 검사를 수행할 필요가 없습니다. 클라이언트는 조회 프로세스를 통해 분할, 파티션 또는 엔드포인트를 가리키므로 이 패턴을 사용하여 데이터 액세스에 대한 장애 조치(failover) 방법을 용이하게 할 수 있습니다.
리더 선거 분산 애플리케이션 인스턴스의 리더 를 설정합니다. 리더는 목표 달성과 관련된 책임을 조정합니다. 이 패턴은 안정적으로 작업을 리디렉션하여 노드 오작동의 영향을 완화합니다. 또한 리더가 오작동할 때 합의 알고리즘을 통해 장애 조치(failover)를 구현합니다.
파이프 및 필터 복잡한 데이터 처리를 일련의 독립적인 단계로 분해하여 특정 결과를 달성합니다. 각 단계의 단일 책임은 집중된 주의를 끌 수 있게 하고 데이터 처리가 방해되는 것을 방지합니다.
우선 순위 큐 우선 순위가 낮은 항목보다 우선 순위가 높은 항목이 처리되고 완료되는지 확인합니다. 비즈니스 우선 순위에 따라 항목을 분리하면 가장 중요한 작업에 안정성 노력을 집중할 수 있습니다.
게시자/구독자 중간 메시지 브로커 또는 이벤트 버스를 통한 통신과 직접 클라이언트-서비스 또는 클라이언트-서비스 통신을 대체하여 아키텍처의 구성 요소를 분리합니다.
Queue-Based 부하 평준화 큐에서 버퍼링하고 큐 프로세서가 제어된 속도로 처리하도록 하여 들어오는 요청 또는 작업의 수준을 제어합니다. 이 방법은 작업의 도착을 처리에서 분리하여 갑작스런 수요 급증에 대한 복원력을 제공할 수 있습니다. 또한 큐 처리에서 오작동을 격리하여 섭취에 영향을 주지 않도록 할 수 있습니다.
속도 제한 클라이언트 요청의 속도를 제어하여 제한 오류를 줄이고 무제한 재시도 오류 시나리오를 방지합니다. 이 전술은 서비스가 지정된 제한에 도달하지 않도록 설계된 경우 서비스와 통신하는 제한 사항 및 비용을 인정하여 클라이언트를 보호합니다. 특정 기간 동안 서비스로 전송되는 작업의 수 및/또는 크기를 제어하여 작동합니다.
재시도 제어된 방식으로 특정 작업을 다시 시도하여 일시적이거나 간헐적일 수 있는 오류를 해결합니다. 분산 시스템에서 일시적인 오류를 완화하는 것은 워크로드의 복원력을 개선하기 위한 핵심 기술입니다.
Saga 분산 트랜잭션 작업을 더 작고 독립적인 트랜잭션 시퀀스로 분해하여 장기 실행 및 잠재적으로 복잡한 트랜잭션을 조정합니다. 또한 각 트랜잭션에는 실행 오류를 되돌리고 무결성을 유지하기 위한 보상 작업이 있어야 합니다. 여러 분산 시스템에서 모놀리식 트랜잭션은 일반적으로 불가능하기 때문에 이 패턴은 원자성 및 보정을 구현하여 일관성과 안정성을 제공합니다.
Scheduler 에이전트 감독자 시스템에서 관찰할 수 있는 요인에 따라 시스템 전체에 작업을 효율적으로 배포하고 재배포합니다. 이 패턴은 상태 메트릭을 사용하여 오류를 감지하고 오작동의 영향을 완화하기 위해 작업을 정상 에이전트로 다시 라우팅합니다.
순차적 호송 정의된 순서로 처리를 지원하면서 동시 메시징 수신을 유지 관리합니다. 이 패턴은 문제 해결이 어려운 경합 조건, 논쟁의 여지가 있는 메시지 처리 또는 오작동으로 이어질 수 있는 잘못 주문된 메시지를 해결하기 위한 기타 해결 방법을 제거할 수 있습니다.
샤 딩 특정 요청을 처리하기 위해 특정 논리 대상으로 로드를 전달하여 최적화를 위해 공동 배치를 사용하도록 설정합니다. 데이터 또는 처리가 분할된 데이터베이스에 격리되므로 한 분할된 데이터베이스의 오작동은 해당 분할된 데이터베이스에 격리된 상태로 유지됩니다.
스트랭글러 무화과 시스템을 마이그레이션하거나 현대화하는 동안 실행 중인 시스템의 구성 요소를 새 구성 요소로 체계적으로 교체하는 방법을 제공합니다. 이 패턴의 증분 접근 방식은 전환 중에 위험을 완화하는 데 도움이 될 수 있습니다.
속도 제한 리소스 또는 구성 요소에 들어오는 요청의 속도 또는 처리량에 제한을 적용합니다. 오작동으로 이어질 수 있는 리소스 소모를 방지하기 위해 제한을 디자인할 수 있습니다. 이 패턴을 정상적인 성능 저하 계획에서 제어 메커니즘으로 사용할 수도 있습니다.

다음 단계

다른 Azure Well-Architected Framework 핵심 요소를 지원하는 아키텍처 디자인 패턴을 검토합니다.