이 문서에서는 Azure Container Apps에서 10개의 마이크로 서비스로 주문 관리 시스템을 실행하기 위한 솔루션을 설명합니다. 이 솔루션은 또한 Dapr을 통한 마이크로 서비스 모범 사례와 KEDA를 통한 이벤트 기반 확장을 사용합니다.
Dapr 및 Traefik은 해당 회사의 상표입니다. 이러한 상표를 사용한다고 해서 어떠한 보증도 암시되지 않습니다.
아키텍처
이 아키텍처의 PowerPoint 파일을 다운로드합니다.
데이터 흐름
이 솔루션은 Bicep 템플릿을 사용하여 Reddog 주문 관리 시스템 및 지원 Azure 인프라의 배포를 실행합니다. 아키텍처는 10개의 .NET Core 마이크로 서비스 애플리케이션을 호스트하는 단일 Azure Container Apps 환경으로 구성됩니다. .NET Core Dapr SDK를 사용하여 게시-구독(pub/sub) 및 상태 및 바인딩 구성 요소를 통해 Azure 리소스와 통합합니다. Dapr은 일반적으로 구성 요소를 구현할 때 유연성을 제공하지만 이 솔루션은 의견을 기반으로 합니다. 또한 서비스는 KEDA 크기 조정 규칙을 사용하여 이벤트 트리거를 기반으로 크기 조정하고 제로 시나리오로 크기 조정할 수 있습니다.
다음 목록에서는 각 마이크로 서비스와 함께 배포하는 Azure Container Apps 구성에 대해 설명합니다. 코드를 보려면 GitHub의 reddog-code 리포지토리를 참조하세요.
Traefik: 사용자 요청을 UI에서 대화형 대시보드에 대한 회계 및 Makeline 서비스로 라우팅하는 기본 프록시입니다.
UI: Reddog 주문 관리 시스템의 실시간 주문 및 집계된 판매 데이터를 보여 주는 대시보드입니다.
가상 고객: 주문 서비스를 통해 주문하는 고객을 시뮬레이션하는 고객 시뮬레이션 프로그램입니다.
주문 서비스: 주문을 접수하고 관리하는 CRUD API입니다.
회계 서비스: 주문 데이터를 처리, 저장 및 집계하는 서비스입니다. 고객 주문을 UI에 표시되는 의미 있는 판매 메트릭으로 변환합니다.
영수증 서비스: 감사 및 기록 목적으로 주문 영수증을 생성하고 저장하는 보관 프로그램입니다.
로열티 서비스: 주문 지출을 기반으로 고객 보상 포인트를 추적하여 로열티 프로그램을 관리하는 서비스입니다.
Makeline 서비스: 처리 대기 중인 현재 주문 큐를 관리하는 서비스입니다. 가상 작업자 서비스에 의한 주문 처리 및 완료를 추적합니다.
가상 작업자: 고객 주문 완료를 시뮬레이션하는 작업자 시뮬레이션 프로그램입니다.
부트스트래퍼(표시되지 않음): 회계 서비스와 함께 사용하기 위해 Entity Framework Core를 통해 Azure SQL Database 내의 테이블을 초기화하는 서비스입니다.
서비스 | 수신 | Dapr 구성 요소 | KEDA 크기 조정 규칙 |
---|---|---|---|
Traefik | 외부 | Dapr을 사용할 수 없음 | HTTP |
UI | 내부 | Dapr을 사용할 수 없음 | HTTP |
가상 고객 | None | 서비스 간 호출 | 해당 없음 |
주문 서비스 | 내부 | 게시/구독: Azure Service Bus | HTTP |
회계 서비스 | 내부 | 게시/구독: Azure Service Bus | Azure Service Bus 항목 길이, HTTP |
영수증 서비스 | 내부 | Pub/sub: Azure Service Bus 바인딩: Azure Blob |
Azure Service Bus 항목 길이 |
로열티 서비스 | 내부 | Pub/sub: Azure Service Bus 상태: Azure Cosmos DB |
Azure Service Bus 항목 길이 |
Makeline 서비스 | 내부 | Pub/sub: Azure Service Bus 상태: Azure Redis |
Azure Service Bus 항목 길이, HTTP |
가상 작업자 | None | 서비스 대 서비스 호출 바인딩: Cron |
해당 없음 |
참고
컨테이너 앱에서 부트스트래퍼를 실행할 수도 있습니다. 그러나 이 서비스는 데이터베이스 만들기를 수행하기 위해 한 번 실행된 다음 Azure SQL Database에서 필요한 개체를 만든 후 0으로 조정됩니다.
구성 요소
이 솔루션은 다음과 같은 구성 요소를 사용합니다.
- Azure 리소스 그룹은 Azure 리소스의 논리적 컨테이너입니다. 단일 리소스 그룹을 사용하여 Azure Portal에서 이 솔루션과 관련된 모든 항목을 구성합니다.
- Azure Container Apps는 최신 앱을 대규모로 빌드하고 배포하는 데 사용되는 완전 관리형 서버리스 컨테이너 서비스입니다. 이 솔루션에서는 Azure Container Apps에서 마이크로 서비스 10개를 모두 호스팅하고 단일 Container App 환경에 배포합니다. 이 환경은 시스템 주변의 보안 경계 역할을 합니다.
- Azure Service Bus는 큐 및 게시-구독 항목이 포함된 완전 관리형 엔터프라이즈 메시지 브로커입니다. 이 솔루션에서는 Dapr 게시/구독 구성 요소 구현에 사용합니다. 여러 서비스에서 이 구성 요소를 사용합니다. 주문 서비스는 버스에 메시지를 게시하고 Makeline, 회계, 로열티 및 영수증 서비스는 이러한 메시지를 구독합니다.
- Azure Cosmos DB는 NoSQL, 다중 모델 관리 데이터베이스 서비스입니다. 고객의 로열티 데이터를 저장하기 위해 로열티 서비스의 Dapr 상태 저장소 구성 요소로 사용합니다.
- Azure Cache for Redis는 확장 가능한 메모리 내 분산 관리 Redis Cache입니다. 처리 중인 주문에 대한 데이터를 저장하기 위해 Makeline 서비스의 Dapr 상태 저장소 구성 요소로 사용됩니다.
- Azure SQL Database는 클라우드용으로 빌드된 지능적이고 확장 가능한 관계형 데이터베이스 서비스입니다. Entity Framework Core를 사용하여 데이터베이스와 인터페이스하는 회계 서비스용으로 만듭니다. 부트스트래퍼 서비스는 데이터베이스에서 SQL 테이블을 설정하는 역할을 하며 계정 서비스에 대한 연결을 설정하기 전에 한 번 실행됩니다.
- Azure Blob Storage는 텍스트 또는 이진 파일과 같은 구조화되지 않은 방대한 양의 데이터를 저장합니다. 영수증 서비스는 Dapr 출력 바인딩을 통해 Blob Storage를 사용하여 주문 영수증을 저장합니다.
- Traefik는 마이크로 서비스를 쉽게 배포할 수 있게 해주는 선도적인 최신 역방향 프록시 및 부하 분산 장치입니다. 이 솔루션에서는 Traefik의 동적 구성 기능을 사용하여 Vue.js SPA(단일 페이지 애플리케이션)인 UI에서 경로 기반 라우팅을 수행합니다. 이 구성을 사용하면 테스트를 위해 백 엔드 서비스에 대한 직접 API 호출도 가능합니다.
- Azure Monitor를 사용하면 Azure 인프라 환경에서 고객 콘텐츠 데이터를 수집, 분석 및 처리할 수 있습니다. 이를 Application Insights와 함께 사용하여 컨테이너 로그를 보고 마이크로 서비스에서 메트릭을 수집합니다.
대안
이 아키텍처에서는 Traefik 프록시를 배포하여 Vue.js API에 대한 경로 기반 라우팅을 사용하도록 설정합니다. 이 용도로 사용할 수 있는 대체 오픈 소스 프록시가 많이 있습니다. 다른 두 가지 자주 사용되는 프로젝트는 NGINX와 HAProxy입니다.
Azure SQL Database를 제외한 모든 Azure 인프라는 상호 운용성을 위해 Dapr 구성 요소를 사용합니다. Dapr의 한 가지 이점은 Container Apps 배포 구성을 변경하여 이러한 모든 구성 요소를 교환할 수 있다는 것입니다. 이 경우 사용 가능한 70개 이상의 Dapr 구성 요소 중 일부를 보여 주기 위해 Azure Service Bus, Azure Cosmos DB, Cache for Redis 및 Blob Storage가 선택되었습니다. 대체 pub/sub 브로커, 상태 저장소 및 출력 바인딩 목록은 Dapr 문서에 있습니다.
시나리오 정보
마이크로 서비스는 높은 확장성, 짧은 개발 주기, 향상된 단순성을 포함하여 많은 이점을 가질 수 있고 점점 더 자주 사용되는 아키텍처 스타일입니다. 컨테이너를 메커니즘으로 사용하여 마이크로 서비스 애플리케이션을 배포한 다음 Kubernetes와 같은 컨테이너 오케스트레이터를 사용하여 작업을 단순화할 수 있습니다. 대규모 마이크로 서비스 아키텍처에 대해 고려해야 할 많은 요소가 있습니다. 일반적으로 인프라 플랫폼에는 컨테이너 오케스트레이터와 같은 복잡한 기술에 대한 상당한 이해가 필요합니다.
Azure Container Apps는 최신 애플리케이션을 대규모로 실행하기 위한 완전 관리형 서버리스 컨테이너 서비스입니다. 기본 플랫폼의 추상화를 통해 컨테이너화된 앱을 배포할 수 있습니다. 이렇게 하면 복잡한 인프라를 관리할 필요가 없습니다. Azure Container Apps는 오픈 소스 기술로 구동됩니다.
이 아키텍처는 Dapr(Distributed Application Runtime)의 관리 버전과 Azure Container Apps 통합을 사용합니다. Dapr은 상태 관리 및 서비스 호출과 같은 분산 애플리케이션의 고유한 문제로 개발자를 돕는 오픈 소스 프로젝트입니다.
Azure Container Apps는 KEDA(Kubernetes Event-driven Autoscaling)의 관리 버전도 제공합니다. KEDA를 사용하면 Azure Service Bus 및 Azure Cache for Redis와 같은 외부 서비스에서 수신되는 이벤트를 기반으로 컨테이너가 자동 크기 조정됩니다.
Azure 네트워킹 리소스를 추가로 만들지 않고 Azure Container Apps에서 HTTPS 수신을 사용하도록 설정할 수도 있습니다. 트래픽 분할 시나리오도 허용하는 Envoy 프록시를 사용할 수 있습니다.
Azure Container Apps를 Azure의 다른 컨테이너 호스팅 플랫폼과 비교하는 방법을 알아보려면 다른 Azure 컨테이너 옵션과 Container Apps 비교를 참조하세요.
이 문서에서는 Azure Container Apps에서 10개의 마이크로 서비스로 주문 관리 시스템을 실행하기 위한 솔루션을 설명합니다. 이 솔루션은 또한 Dapr을 통한 마이크로 서비스 모범 사례와 KEDA를 통한 이벤트 기반 확장을 사용합니다.
잠재적인 사용 사례
이 솔루션은 분산 시스템에 상태 비저장 및 상태 저장 마이크로 서비스를 사용하는 모든 조직에 적용됩니다. 이 솔루션은 주문 및 이행 시스템을 갖춘 소비자 패키지 상품 및 제조 업계에 가장 적합합니다.
이러한 다른 솔루션의 디자인은 비슷합니다.
- AKS(Azure Kubernetes Service)의 마이크로 서비스 아키텍처
- Azure Functions의 마이크로 서비스 아키텍처
- 이벤트 기반 아키텍처
고려 사항
이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일련의 기본 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.
안정성
안정성은 애플리케이션이 고객에 대한 약속을 충족할 수 있도록 합니다. 자세한 내용은 안정성 핵심 요소 개요를 참조하세요.
Azure Container Apps는 내부적으로 Kubernetes에서 실행됩니다. 복원력 메커니즘은 문제가 있는 경우 컨테이너 또는 Pod를 모니터링하고 다시 시작하는 Kubernetes에 기본 제공되어 있습니다. 복원력 메커니즘은 기본 제공 부하 분산 장치와 결합하여 각 컨테이너 앱의 여러 복제본을 실행합니다. 이 중복성을 통해 솔루션은 사용할 수 없는 인스턴스를 허용할 수 있습니다.
Azure Monitor 및 Application Insights를 사용하여 Azure Container Apps를 모니터링할 수 있습니다. 포털에서 각 컨테이너 앱의 로그 창으로 이동한 후 다음 Kusto 쿼리를 실행하여 컨테이너 로그를 볼 수 있습니다. 이 예는 Makeline 서비스 앱에 대한 로그를 보여 줍니다.
ContainerAppConsoleLogs_CL |
where ContainerAppName_s contains "make-line-service" |
project TimeGenerated, _timestamp_d, ContainerGroupName_s, Log_s |
order by _timestamp_d asc
Application Insights의 애플리케이션 맵은 서비스가 실시간으로 통신하는 방법도 보여 줍니다. 그런 다음 디버깅 시나리오에 사용할 수 있습니다. Application Insights 리소스 아래의 애플리케이션 맵으로 이동하여 다음과 같은 내용을 확인합니다.
Azure Container Apps 모니터링에 대한 자세한 내용은 Azure Container Apps에서 앱 모니터링을 참조하세요.
비용 최적화
불필요한 비용을 줄이고 운영 효율성을 개선하는 방법을 찾아 비용을 최적화합니다. 자세한 내용은 비용 최적화 핵심 요소 개요를 참조하세요.
이 아키텍처의 서비스 비용을 예상하려면 Azure 가격 책정 계산기를 사용합니다.
성능 효율성
성능 효율성은 워크로드에 대한 요구 사항을 효율적으로 충족하도록 크기를 조정할 수 있는 기능입니다. 자세한 내용은 성능 효율성 핵심 요소 개요를 참조하세요.
이 솔루션은 이벤트 기반 확장을 위해 Azure Container Apps의 KEDA 구현에 크게 의존합니다. 가상 고객 서비스를 배포하면 지속적으로 주문이 이루어지므로 HTTP KEDA 배율 조정기를 통해 주문 서비스가 스케일 업됩니다. 주문 서비스가 서비스 버스에 주문을 게시하면 서비스 버스 KEDA 배율 조정기가 회계, 영수증, Makeline 및 로열티 서비스를 스케일 업합니다. UI 및 Traefik Container Apps는 더 많은 사용자가 대시보드에 액세스함에 따라 앱이 크기 조정되도록 HTTP KEDA 배율 조정기도 구성합니다.
가상 고객이 실행되고 있지 않으면 이 솔루션의 모든 마이크로 서비스는 가상 작업자 및 Makeline 서비스를 제외하고 0으로 크기가 조정됩니다. 가상 작업자는 주문 이행을 지속적으로 확인하므로 스케일 다운되지 않습니다. Container Apps의 확장에 대한 자세한 내용은 Azure Container Apps에서 확장 규칙 설정을 참조하세요. KEDA 배율 조정기에 대한 자세한 내용은 배율 조정기에 대한 KEDA 설명서를 참조하세요.
시나리오 배포
배포 지침은 GitHub의 Red Dog 데모: Azure Container Apps 배포를 참조하세요.
Red Dog 데모: 마이크로 서비스 통합은 패키지된 앱 템플릿입니다. 이는 Azure Container Apps, App Service, Functions 및 API Management의 통합을 보여 주기 위해 이전 코드 자산을 기반으로 빌드하고, 인프라를 프로비전하고, GitHub Actions를 사용하여 코드를 배포합니다.
참가자
Microsoft에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.
보안 주체 작성자:
- Alice Gibbons | 클라우드 네이티브 글로벌 블랙 벨트
기타 기여자:
- Kendall Roden | 선임 프로그램 관리자
- Lynn Orrell | 주요 솔루션 전문가(GBB)
비공용 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.
다음 단계
- Azure Container Apps 문서
- Azure의 컨테이너 제품 비교
- 기타 Reddog 주문 관리 시스템 구현: