클라우드 디자인 패턴

이러한 디자인 패턴은 클라우드에서 안정적이고 확장성 있는 안전한 애플리케이션을 빌드하는 데 유용합니다.

각 패턴은 패턴이 해결하는 문제, 패턴을 적용하기 위한 고려 사항 및 Microsoft Azure 기반의 예제에 대해 설명합니다. 대부분의 패턴은 Azure에서 패턴을 구현하는 방법을 보여주는 코드 샘플 또는 코드 조각을 포함하고 있습니다. 그러나 대부분의 패턴은 Azure에 호스팅되든 다른 클라우드 플랫폼에 호스팅되든, 분산 시스템과 관련되어 있습니다.

클라우드 개발의 과제

Data management

데이터 관리

데이터 관리는 클라우드 애플리케이션의 핵심 요소이며 대부분의 품질 특성에 영향을 줍니다. 일반적으로 데이터는 성능, 확장성, 가용성 등의 이유로 여러 위치의 여러 서버에 호스팅되며, 이로 인해 다양한 문제가 발생할 수 있습니다. 예를 들어 데이터 일관성을 유지해야 하며, 일반적으로 여러 위치 간에 데이터를 동기화해야 합니다.

Design and implementation

디자인 및 구현

좋은 디자인이 되려면 구성 요소 디자인 및 배포의 일관성, 관리 및 배포 방법이 간단한 유지 관리 용이성, 구성 요소 및 하위 시스템을 다른 애플리케이션 및 다른 시나리오에 사용할 수 있는 재사용 가능성 등의 요소를 고려해야 합니다. 디자인 및 구현 단계에서 결정된 사항은 클라우드에 호스팅되는 애플리케이션과 서비스의 품질 및 총 소유 비용에 엄청난 영향을 미칩니다.

Messaging icon

메시징

클라우드 애플리케이션은 기본적으로 분산되기 때문에 구성 요소와 서비스를 연결하는 메시지 인프라가 필요하며, 가용성을 최대화할 수 있도록 느슨하게 결합된 인프라가 가장 이상적입니다. 널리 사용되는 비동기 메시지는 여러 가지 이점이 있지만 메시지 순서 지정, 포이즌 메시지 관리, 멱등성 같은 문제도 있습니다.

패턴 카탈로그

패턴 요약 Category
특사 소비자 서비스 또는 애플리케이션을 대신하여 네트워크 요청을 전송하는 도우미 서비스를 만듭니다. 디자인 및 구현,
운영 효율성
손상 방지 레이어 현대식 애플리케이션과 레거시 시스템 사이에 외관 또는 어댑터 레이어를 구현합니다. 디자인 및 구현,
운영 효율성
비동기 요청-회신 백 엔드 처리는 비동기적이어야 하지만 프런트 엔드에는 여전히 명확한 응답이 필요한 프런트 엔드 호스트에서 백 엔드 처리를 분리합니다. 메시징
프런트 엔드에 대한 백 엔드 특정 프런트 엔드 애플리케이션 또는 인터페이스에서 사용할 별도의 백 엔드 서비스를 만듭니다. 디자인 및 구현
격벽 하나가 고장 나더라도 나머지는 정상적으로 작동하도록 애플리케이션의 요소를 여러 풀에 격리합니다. 신뢰성
Cache-Aside 필요할 때 데이터를 데이터 저장소에서 캐시로 로드 데이터 관리,
성능 효율성
연출 중앙 오케스트레이터에 의존하는 대신 각 서비스에서 비즈니스 작업이 처리되는 시기와 방법을 결정하도록 합니다. 메시징,
성능 효율성
회로 차단기 원격 서비스 또는 리소스에 연결할 때 해결하는 데 걸리는 시간이 유동적인 오류를 처리합니다. 신뢰성
클레임 검사 큰 메시지를 클레임 검사 및 페이로드로 분할하면 메시지 버스의 과부하를 피할 수 있습니다. 메시징
보정 트랜잭션 여러 단계로 나뉘어 있지만 결국에는 일관적인 작업을 정의하는 일련의 단계에서 수행한 작업을 실행 취소합니다. 신뢰성
경쟁 소비자 여러 동시 소비자가 동일한 메시징 채널에 수신된 메시지를 처리할 수 있게 해 줍니다. 메시징
컴퓨팅 리소스 통합 여러 작업을 단일 계산 단위로 통합합니다. 디자인 및 구현
CQRS 별도의 인터페이스를 사용하여 데이터를 업데이트하는 작업과 데이터를 읽는 작업을 분리합니다. 데이터 관리,
디자인 및 구현,
성능 효율성
배포 스탬프 데이터 저장소를 포함하여 애플리케이션 구성 요소의 여러 독립 복사본을 배치합니다. 안정성,
성능 효율성
이벤트 소싱 추가 전용 저장소를 사용하여 도메인의 데이터에 대해 수행된 작업을 설명하는 일련의 이벤트 전체를 기록합니다. 데이터 관리,
성능 효율성
외부 구성 저장소 구성 정보를 애플리케이션 배포 패키지에서 중앙 위치로 이동합니다. 디자인 및 구현,
운영 효율성
페더레이션 ID 외부 ID 공급자에게 인증을 위임합니다. 보안
게이트 키퍼 클라이언트와 애플리케이션 또는 서비스 간 브로커 역할을 하며, 요청을 검사 및 정리하고, 요청 및 데이터를 전달하는 전용 호스트 인스턴스를 사용하여 애플리케이션 및 서비스를 보호합니다. 보안
게이트웨이 집계 게이트웨이를 사용하여 여러 개별 요청을 단일 요청으로 집계합니다. 디자인 및 구현,
운영 효율성
게이트웨이 오프로딩 공유 또는 특수 서비스 기능을 게이트웨이 프록시에 오프로드합니다. 디자인 및 구현,
운영 효율성
게이트웨이 라우팅 단일 엔드포인트를 사용하여 요청을 여러 서비스에 라우팅합니다. 디자인 및 구현,
운영 효율성
Geodes 백 엔드 서비스를 지리적 노드 세트에 배포합니다. 각 노드는 모든 지역의 클라이언트 요청을 처리할 수 있습니다. 안정성,
운영 효율성
상태 엔드포인트 모니터링 외부 도구가 노출된 엔드포인트를 통해 주기적으로 액세스할 수 있는 기능 검사를 애플리케이션 내부에 구현합니다. 안정성,
운영 효율성
인덱스 테이블 쿼리에서 자주 참조하는 데이터 저장소의 필드에 대한 인덱스를 만듭니다. 데이터 관리,
성능 효율성
리더 선택 인스턴스 중 하나를 다른 인스턴스를 관리하는 리더로 선택하여 분산된 애플리케이션의 공동 작업 인스턴스 컬렉션이 수행하는 작업을 조정합니다. 디자인 및 구현,
신뢰성
구체화된 뷰 데이터가 필요한 쿼리 작업에 대해 이상적으로 포맷되지 않은 경우 하나 이상의 데이터 저장소에 있는 데이터에 대한 미리 채워진 뷰를 생성합니다. 데이터 관리,
운영 효율성
파이프 및 필터 복잡한 처리를 수행하는 작업을 재사용 가능한 일련의 별도 요소로 분류합니다. 디자인 및 구현,
메시징
우선 순위 큐 우선 순위가 높은 요청을 우선 순위가 낮은 요청보다 먼저 받아서 처리하도록 서비스로 전송된 요청의 우선 순위를 지정합니다. 메시징,
성능 효율성
게시자/구독자 애플리케이션이 발신자와 수신자를 연결하지 않고 여러 관심 있는 소비자에게 이벤트를 비동기적으로 알릴 수 있습니다. 메시징
큐 기반 부하 평준화 작업 그리고 그 작업이 일시적인 높은 부하를 부드럽게 처리하기 위해 호출하는 서비스 사이에서 버퍼 역할을 하는 큐를 사용합니다. 안정성,
메시징,
복원력,
성능 효율성
다시 시도 이전에 실패한 작업을 투명하게 다시 시도하여 서비스 또는 네트워크 리소스에 연결하려 할 때 애플리케이션을 사용하여 예상된 일시적 오류를 처리합니다. 신뢰성
Scheduler 에이전트 감독자 서비스 및 기타 원격 리소스의 분산된 집합에서 일련의 작업을 조정합니다. 메시징,
신뢰성
순차 호위(convoy) 다른 메시지 그룹의 처리를 차단하지 않고 정의된 순서대로 관련 메시지 세트를 처리합니다. 메시징
분할 데이터 저장소를 수평 파티션 또는 분할 집합으로 나눕니다. 데이터 관리,
성능 효율성
사이드카 격리 및 캡슐화를 제공하는 별도의 프로세스 또는 컨테이너에 애플리케이션 구성 요소를 배포합니다. 디자인 및 구현,
운영 효율성
정적 콘텐츠 호스팅 정적 콘텐츠를 클라이언트에 직접 제공할 수 있는 클라우드 기반 스토리지 서비스에 배포합니다. 디자인 및 구현,
데이터 관리,
성능 효율성
스트랭글러 그림 특정 기능을 새로운 애플리케이션 및 서비스로 점진적으로 교체하여 레거시 시스템을 단계적으로 마이그레이션합니다. 디자인 및 구현,
운영 효율성
제한 애플리케이션 인스턴스, 개별 테넌트 또는 서비스 전체의 리소스 사용량을 제어합니다. 안정성,
성능 효율성
발레 키 클라이언트에 특정 리소스 또는 서비스에 대한 제한된 직접 액세스를 제공하는 토큰 또는 키를 사용합니다. 데이터 관리,
보안