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