성능 효율성을 지원하는 클라우드 디자인 패턴

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

많은 디자인 패턴은 하나 이상의 아키텍처 핵심 요소들을 직접 지원합니다. 성능 효율성 핵심 요소 주소 확장성, 성능 조정, 작업 우선 순위 지정 및 병목 현상 제거를 지원하는 디자인 패턴입니다.

성능 효율성을 위한 디자인 패턴

다음 표에서는 성능 효율성의 목표를 지원하는 클라우드 디자인 패턴을 요약합니다.

패턴 요약
비동기 요청-회신 즉각적인 답변이 필요하지 않은 프로세스에 대한 상호 작용의 요청 및 회신 단계를 분리하여 시스템의 응답성 및 확장성을 개선합니다. 비동기 패턴을 사용하면 서버 쪽에서 동시성을 최대화할 수 있습니다. 이 패턴을 사용하여 용량이 허용하는 대로 완료될 작업을 예약할 수 있습니다.
프런트 엔드에 대한 백 엔드 특정 프런트 엔드 인터페이스에만 적용되는 별도의 서비스를 만들어 워크로드의 서비스 계층을 개별화합니다. 이 분리를 사용하면 공유 서비스 계층에서 불가능할 수 있는 방식으로 최적화할 수 있습니다. 개별 클라이언트를 다르게 처리할 때 특정 클라이언트의 제약 조건 및 기능에 대한 성능을 최적화할 수 있습니다.
격벽 오작동의 폭발 반경을 격리하기 위해 구성 요소 간 구분을 도입합니다. 이 설계를 통해 각 격벽을 개별적으로 확장하여 격벽에 캡슐화된 작업의 요구 사항을 충족할 수 있습니다.
Cache-Aside 요청 시 채워진 캐시를 도입하여 자주 읽는 데이터에 대한 액세스를 최적화합니다. 그런 다음 캐시는 동일한 데이터에 대한 후속 요청에 사용됩니다. 이 패턴은 자주 변경되지 않고 일정량의 부실을 허용할 수 있는 읽기가 많은 데이터에 특히 유용합니다. 이 구현의 목표는 데이터 저장소에서 데이터를 소싱하는 대신 이러한 유형의 데이터를 캐시로 오프로드하여 시스템 전체에서 더 나은 성능을 제공하는 것입니다.
연출 분산형 이벤트 기반 통신을 사용하여 워크로드에서 자율 분산 구성 요소의 동작을 조정합니다. 이 패턴은 중앙 집중식 오케스트레이션 토폴로지에서 성능 병목 현상이 발생할 때 대안을 제공할 수 있습니다.
회로 차단기 오작동하거나 사용할 수 없는 종속성에 대한 지속적인 요청을 방지합니다. 오류에 대한 재시도 접근 방식은 종속성 복구 중에 과도한 리소스 사용률로 이어질 수 있으며 복구를 시도하는 종속성에 대한 성능을 오버로드할 수도 있습니다.
클레임 검사 메시지 흐름과 데이터를 구분하여 메시지와 관련된 데이터를 별도로 검색하는 방법을 제공합니다. 이 패턴은 시스템에서 대용량 데이터 페이로드를 처리할 때 메시지 게시자, 구독자 및 메시지 버스 자체의 효율성과 성능을 향상시킵니다. 메시지 크기를 줄이며 소비자가 필요한 경우에만 적절한 시기에 페이로드 데이터를 검색하도록 하는 것이 좋습니다.
경쟁 소비자 분산 및 동시 처리를 적용하여 큐의 항목을 효율적으로 처리합니다. 이 모델은 모든 소비자 노드에 부하를 분산하고 큐 깊이를 기반으로 하는 동적 크기 조정을 지원합니다.
컴퓨팅 리소스 통합 밀도를 높여 컴퓨팅 리소스를 최적화하고 통합합니다. 이 패턴은 공유 인프라에서 워크로드의 여러 애플리케이션 또는 구성 요소를 결합합니다. 이 통합은 여분의 노드 용량을 사용하여 초과 프로비전을 줄여 컴퓨팅 리소스의 사용률을 최대화합니다. 컨테이너 오케스트레이터는 일반적인 예입니다. 대규모(수직 크기 조정) 컴퓨팅 인스턴스는 종종 이러한 인프라에 대한 리소스 풀에서 사용됩니다.
CQRS(명령 및 쿼리 책임 분리) 애플리케이션 데이터 모델의 읽기 및 쓰기 작업을 구분합니다. 이러한 분리를 통해 각 작업의 특정 목적에 대해 대상 성능 및 크기 조정 최적화를 수행할 수 있습니다. 이 디자인은 읽기-쓰기 비율이 높은 애플리케이션에서 가장 유용합니다.
배포 스탬프 동일하거나 다른 버전이 동시에 배포될 것이라는 가정하에 특정 버전의 애플리케이션 및 해당 인프라를 제어된 배포 단위로 릴리스하는 방법을 제공합니다. 이 패턴은 워크로드에서 정의된 배율 단위에 맞춰지는 경우가 많습니다. 단일 배율 단위가 제공하는 것 이상으로 추가 용량이 필요하므로 스케일 아웃을 위해 추가 배포 스탬프가 배포됩니다.
이벤트 소싱 상태 변경을 일련의 이벤트로 처리하여 변경할 수 없는 추가 전용 로그에 캡처합니다. 워크로드에 따라 일반적으로 CQRS, 적절한 도메인 디자인 및 전략적 스냅샷과 결합된 이 패턴은 성능을 향상시킬 수 있습니다. 성능 향상은 원자성 추가 전용 작업과 쓰기 및 읽기에 대한 데이터베이스 잠금 방지로 인해 발생합니다.
페더레이션 ID 사용자를 관리하고 애플리케이션에 대한 인증을 제공하기 위해 워크로드 외부에 있는 ID 공급자에게 트러스트를 위임합니다. 사용자 관리 및 인증을 오프로드할 때 애플리케이션 리소스를 다른 우선 순위에 적용할 수 있습니다.
게이트 키퍼 백 엔드 노드에 요청을 전달하기 전과 후에 특히 보안 및 액세스 제어 적용을 위한 요청 처리를 오프로드합니다. 이 패턴은 종종 노드 수준에서 속도 검사를 구현하는 대신 게이트웨이 수준에서 제한을 구현하는 데 사용됩니다. 모든 노드 간에 속도 상태를 조정하는 것은 본질적으로 성능이 좋지 않습니다.
게이트웨이 집계 단일 요청에서 여러 백 엔드 서비스에 대한 호출을 집계하여 워크로드와의 클라이언트 상호 작용을 간소화합니다. 이 디자인은 클라이언트가 여러 연결을 설정하는 디자인보다 대기 시간이 적을 수 있습니다. 캐싱은 백 엔드 시스템에 대한 호출을 최소화하기 때문에 집계 구현에서도 일반적입니다.
게이트웨이 오프로딩 요청을 백 엔드 노드로 전달하기 전과 후에 게이트웨이 디바이스에 요청 처리를 오프로드합니다. 요청 프로세스에 오프로드 게이트웨이를 추가하면 기능이 게이트웨이에서 중앙 집중화되기 때문에 노드당 리소스를 더 적게 사용할 수 있습니다. 애플리케이션 코드와 독립적으로 오프로드된 기능의 구현을 최적화할 수 있습니다. 오프로드된 플랫폼 제공 기능은 이미 높은 성능을 발휘할 가능성이 높습니다.
게이트웨이 라우팅 들어오는 네트워크 요청을 요청 의도, 비즈니스 논리 및 백 엔드 가용성에 따라 다양한 백 엔드 시스템으로 라우팅합니다. 게이트웨이 라우팅을 사용하면 부하를 분산하기 위해 시스템의 노드 간에 트래픽을 분산할 수 있습니다.
지오드 여러 지역에 걸쳐 활성-활성 가용성 모드로 작동하는 시스템을 배포합니다. 이 패턴은 데이터 복제를 사용하여 모든 클라이언트가 지리적 instance 연결할 수 있는 이상적인 기능을 지원합니다. 이를 사용하여 분산 사용자 기반과 가장 가까운 지역에서 애플리케이션을 제공할 수 있습니다. 이렇게 하면 장거리 트래픽을 제거하고 현재 동일한 지오드를 사용하는 사용자 간에만 인프라를 공유하므로 대기 시간이 줄어듭니다.
상태 엔드포인트 모니터링 해당 용도로 특별히 설계된 엔드포인트를 노출하여 시스템의 상태 또는 상태 모니터링하는 방법을 제공합니다. 이러한 엔드포인트를 사용하여 정상으로 확인된 노드로만 트래픽을 라우팅하여 부하 분산을 개선할 수 있습니다. 추가 구성을 사용하면 사용 가능한 노드 용량에 대한 메트릭을 가져올 수도 있습니다.
인덱스 테이블 클라이언트가 데이터를 직접 검색할 수 있도록 메타데이터를 조회할 수 있도록 하여 전체 데이터 저장소 검사를 수행할 필요가 없도록 하여 분산 데이터 저장소에서 데이터 검색을 최적화합니다. 클라이언트는 성능 최적화를 위해 동적 데이터 분할을 사용하도록 설정할 수 있는 분할, 파티션 또는 엔드포인트를 가리켰습니다.
구체화된 뷰 데이터의 미리 계산된 뷰를 사용하여 데이터 검색을 최적화합니다. 구체화된 뷰는 데이터베이스 엔진 또는 클라이언트가 모든 요청에 대해 다시 계산할 필요 없이 복잡한 계산 또는 쿼리의 결과를 저장합니다. 이 디자인은 전체 리소스 소비를 줄입니다.
우선 순위 큐 우선 순위가 낮은 항목보다 우선 순위가 높은 항목이 처리되고 완료되도록 합니다. 비즈니스 우선 순위에 따라 항목을 분리하면 가장 시간이 중요한 작업에 성능 노력을 집중할 수 있습니다.
게시자/구독자 중간 메시지 브로커 또는 이벤트 버스를 통해 직접 클라이언트-서비스 또는 클라이언트-서비스 통신과 통신을 대체하여 아키텍처의 구성 요소를 분리합니다. 소비자와 게시자를 분리하면 소비자가 특정 메시지에 대해 수행해야 하는 작업에 맞게 컴퓨팅 및 코드를 최적화할 수 있습니다.
큐 기반 부하 평준화 큐에서 버퍼링하고 큐 프로세서가 제어된 속도로 처리하도록 하여 들어오는 요청 또는 작업의 수준을 제어합니다. 이 방법을 사용하면 요청이 처리되는 속도와 상관 관계가 없어도 처리량 성능을 의도적으로 디자인할 수 있습니다.
Scheduler 에이전트 감독자 시스템에서 관찰 가능한 요인에 따라 시스템 전체에 작업을 효율적으로 배포하고 재배포합니다. 이 패턴은 성능 및 용량 메트릭을 사용하여 현재 사용률을 검색하고 용량이 있는 에이전트로 작업을 라우팅합니다. 이 작업을 사용하여 우선 순위가 낮은 작업보다 우선 순위가 높은 작업의 실행 우선 순위를 지정할 수도 있습니다.
분할 특정 요청을 처리하기 위해 특정 논리 대상으로 로드를 전달하여 최적화를 위해 공동 배치를 사용하도록 설정합니다. 크기 조정 전략에서 분할을 사용하는 경우 데이터 또는 처리는 분할된 데이터베이스로 격리되므로 해당 분할된 데이터베이스로 전달되는 다른 요청과만 리소스에 대해 경쟁합니다. 분할을 사용하여 지리에 따라 최적화할 수도 있습니다.
사이드카 기본 애플리케이션과 함께 존재하는 보조 프로세스에서 기본이 아닌 또는 교차 절단 작업을 캡슐화하여 애플리케이션의 기능을 확장합니다. 교차 절단 작업을 기본 프로세스의 여러 인스턴스에서 확장할 수 있는 단일 프로세스로 이동할 수 있으므로 애플리케이션의 각 instance 중복 기능을 배포할 필요가 줄어듭니다.
정적 콘텐츠 호스팅 해당 용도로 설계된 호스팅 플랫폼을 사용하여 워크로드 클라이언트에 정적 콘텐츠 배달을 최적화합니다. 외부화된 호스트에 대한 책임을 오프로드하면 혼잡을 완화하고 애플리케이션 플랫폼을 사용하여 비즈니스 논리를 제공할 수 있습니다.
제한 리소스 또는 구성 요소에 들어오는 요청의 속도 또는 처리량에 제한을 적용합니다. 시스템이 수요가 많은 경우 이 패턴은 성능 병목 현상으로 이어질 수 있는 정체를 완화하는 데 도움이 됩니다. 노이즈 네이버 시나리오를 사전에 방지하는 데 사용할 수도 있습니다.
발레 키 중간 리소스를 사용하여 액세스를 프록시하지 않고 리소스에 대한 보안 제한 액세스 권한을 부여합니다. 이렇게 하면 모든 클라이언트 요청을 성능이 뛰어난 방식으로 처리해야 하는 앰배서더 구성 요소가 필요 없이 클라이언트와 리소스 간의 배타적 관계로 처리가 오프로드됩니다. 프록시가 트랜잭션에 값을 추가하지 않는 경우 이 패턴을 사용하는 이점이 가장 중요합니다.

다음 단계

다른 Azure Well-Architected Framework 핵심 요소들을 지원하는 클라우드 디자인 패턴을 검토합니다.