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