테넌트별 데이터베이스 SaaS 모델을 사용하는 다중 테넌트 Wingtip 애플리케이션 배포 및 탐색 - Azure SQL Database

적용 대상:Azure SQL Database

이 자습서에서는 Wingtip Tickets SaaS 데이터베이스당 테넌트 애플리케이션(Wingtip)을 배포하고 탐색합니다. 이 앱은 테넌트당 데이터베이스 패턴을 사용하여 여러 테넌트의 데이터를 저장합니다. 이 앱은 SaaS 시나리오 활성화 방법을 단순화하는 Azure SQL Database의 기능을 보여 주도록 설계되었습니다.

Azure에 배포를 선택한 후 5분 후에 다중 테넌트 SaaS 애플리케이션을 보유합니다. 앱에는 Azure SQL Database에서 실행되는 데이터베이스가 포함됩니다. 앱은 각각 고유한 데이터베이스를 사용하여 3개의 샘플 테넌트에서 배포됩니다. 모든 데이터베이스는 SQL 탄력적 풀에 배포됩니다. 이 앱은 Azure 구독에 배포됩니다. 앱의 개별 구성 요소를 탐색하고 작업할 수 있는 전체 액세스 권한이 있습니다. 애플리케이션 C# 소스 코드 및 관리 스크립트는 WingtipTicketsSaaS-DbPerTenant GitHub 리포지토리에서 사용할 수 있습니다.

이 자습서에서는 다음에 대해 알아봅니다.

  • Wingtip SaaS 애플리케이션 배포 방법
  • 애플리케이션 소스 코드 및 관리 스크립트를 가져올 위치.
  • 앱을 구성하는 서버, 풀 및 데이터베이스 정보.
  • 카탈로그를 사용하여 데이터에 테넌트를 매핑하는 방법
  • 새 테넌트를 프로비전하는 방법.
  • 앱에서 테넌트 활동을 모니터링하는 방법입니다.

다양한 SaaS 디자인 및 관리 패턴을 살펴보기 위한 일련의 관련 자습서가 제공됩니다. 자습서는 이 초기 배포를 넘어 빌드됩니다. 자습서를 사용하는 경우 제공된 스크립트를 검토하여 다양한 SaaS 패턴을 구현하는 방법을 확인할 수 있습니다. 스크립트는 SQL Database의 기능이 SaaS 애플리케이션 개발을 단순화하는 방법을 보여 줍니다.

필수 조건

이 자습서를 완료하려면 Azure PowerShell이 설치되어 있는지 확인하세요. 자세한 내용은 Azure PowerShell 시작을 참조하세요.

Wingtip 티켓 SaaS 애플리케이션 배포

이름 계획

이 섹션의 각 단계에서 리소스 이름이 전역적으로 고유한지 확인하는 데 사용되는 사용자 값을 제공하세요. 또한 앱 배포에서 만든 모든 리소스를 포함하는 리소스 그룹의 이름을 제공하세요. 앤 핀리라는 가상인물에게 제안합니다.

  • 사용자: af1은 Ann Finley의 이니셜에 숫자를 더한 값으로 이루어집니다. 앱을 두 번째로 배포하는 경우 다른 값을 사용하세요. af2를 예로 들 수 있습니다.
  • 리소스 그룹: wingtip-dpt-af1 은 테넌트당 데이터베이스 앱임을 나타냅니다. 사용자 이름 af1을 추가하여 리소스 그룹 이름과 해당 그룹에 포함된 리소스 이름이 연결됩니다.

이제 이름을 선택하고, 기록합니다.

단계

  1. Azure Portal에서 Wingtip Tickets SaaS 테넌트당 데이터베이스 배포 템플릿을 열려면 Azure에 배포를 선택하세요.

    Image showing a button labeled

  2. 요구되는 매개 변수에 따라 템플릿에 필요한 값을 입력하세요.

    Important

    일부 인증 및 서버 방화벽은 데모 목적으로 의도적으로 보호되지 않습니다. 새로운 리소스 그룹을 만드는 것이 좋습니다. 기존 리소스 그룹, 서버 또는 풀을 사용하지 마세요. 이 애플리케이션, 스크립트 또는 배포된 리소스를 프로덕션에 사용하지 마세요. 관련된 결제를 중지하려면 애플리케이션을 완료할 때 이 리소스 그룹을 삭제합니다.

    • 리소스 그룹: 새로 만들기를 선택하고 리소스 그룹에서 이전에 선택한 고유 이름을 입력하세요.
    • 위치: 드롭다운 목록에서 위치를 선택합니다.
    • 사용자: 이전에 선택한 사용자 이름 값을 사용하세요.
  3. 애플리케이션을 배포합니다.

    a. 계약조건에 동의함을 선택하세요.

    b. 구매를 선택합니다.

  4. 배포 상태를 모니터하려면 도구 모음에서 알림(검색 박스 우측 종 아이콘)을 선택하세요. Wingtip Tickets SaaS 앱을 배포하는 데 약 5분이 걸립니다.

    Deployment succeeded

Wingtip Tickets 관리 스크립트 다운로드 및 차단 해제

애플리케이션이 배포되는 동안 소스 코드 및 관리 스크립트를 다운로드하세요.

Important

.zip 파일이 외부 원본에서 다운로드 및 추출될 때 실행 파일 콘텐츠(스크립트 및 DLL)가 Windows에 의해 차단될 수 있습니다. 스크립트를 추출하기 전에 단계를 따라 .zip 파일의 차단을 해제하세요. 차단을 해제하면 스크립트를 실행할 수 있습니다.

  1. WingtipTicketsSaaS-DbPerTenant GitHub 리포지토리를 찾아보세요.
  2. 복제 또는 다운로드를 선택하세요.
  3. ZIP 다운로드를 선택하고, 파일을 저장하세요.
  4. WingtipTicketsSaaS-DbPerTenant-master.zip 파일을 마우스 오른쪽 단추로 클릭한 다음 속성을 선택하세요.
  5. 일반 탭에서 차단 해제>적용을 선택합니다.
  6. 확인을 선택하고, 파일의 압축을 풉니다.

스크립트는 ...\WingtipTicketsSaaS-DbPerTenant-master\Learning Modules 폴더에 있습니다.

배포에 대한 사용자 구성 파일 업데이트

스크립트를 실행하기 전에 사용자 구성 파일에서 리소스 그룹 및 사용자 값을 업데이트하세요. 이러한 변수를 배포 중에 사용한 값으로 설정하세요.

  1. PowerShell ISE에서 ...\Learning Modules\UserConfig.psm1을 엽니다.
  2. ResourceGroupNameName을 배포에 대한 특정 값(줄 10 및 11에만 해당)으로 업데이트하세요.
  3. 변경 내용을 저장합니다.

이러한 값은 거의 모든 스크립트에서 참조됩니다.

애플리케이션 실행

앱은 이벤트를 호스트하는 장소를 표시합니다. 장소 유형에는 콘서트 홀, 재즈 클럽 및 스포츠 클럽 등이 포함됩니다. Wingtip Tickets에서 장소는 테넌트로 등록됩니다. 테넌트가 됨으로써 장소에서 이벤트 목록을 만들고 고객에게 티켓을 판매할 수 있는 쉬운 방법을 제공합니다. 각 장소는 해당 이벤트를 나열하고 티켓을 판매하기 위한 개인 설정 웹 사이트를 얻게 됩니다.

앱에서 내부적으로 각 테넌트는 탄력적 풀에 배포된 Database를 가져옵니다.

중앙 이벤트 허브 페이지는 배포에 있는 테넌트의 링크 목록을 제공합니다.

  1. URL을 사용하여 웹 브라우저: http://events.wingtip-dpt.<;user>.trafficmanager.net에서 이벤트 허브를 엽니다. <사용자>를 배포의 사용자 값으로 대체하세요.

    Events Hub

  2. 이벤트 허브에서 Fabrikam Jazz Club을 선택하세요.

    Events

Azure Traffic Manager

들어오는 요청의 배포를 제어하기 위해 Wingtip 애플리케이션에서는 Azure Traffic Manager를 사용합니다. 특정 테넌트의 이벤트 페이지에 액세스하는 URL은 다음 형식을 사용합니다.

  • http://events.wingtip-dpt.<user>.trafficmanager.net/fabrikamjazzclub

    이전 형식의 부분은 다음 표에 설명되어 있습니다.

    URL 부분 설명
    events.wingtip-dpt Wingtip 앱의 이벤트 부분

    -dpt는 Wingtip Tickets의 테넌트당 데이터베이스 구현을 다른 구현과 구분합니다. 예를 들어 단일 테넌트당 앱(-sa) 또는 다중 테넌트 데이터베이스(-mt) 구현을 구분합니다.
    .<사용자> 예제의 af1 입니다.
    .trafficmanager.net/ Traffic Manager, 기준 URL입니다.
    fabrikamjazzclub Fabrikam Jazz Club이라는 테넌트 식별
  • 이벤트 앱은 URL에서 테넌트 이름을 구문 분석합니다.

  • 테넌트 이름은 키를 만드는 데 사용됩니다.

  • 테넌트 데이터베이스의 위치를 가져오기 위해 카탈로그에 액세스하는 데 키를 사용합니다.

    • 카탈로그는 분할 맵 관리를 사용하여 구현됩니다.
  • 이벤트 허브는 각 테넌트에 대한 이벤트 페이지 URL의 목록을 구성하기 위해 카탈로그의 확장 메타데이터를 사용합니다.

프로덕션 환경에서는 일반적으로 CNAME DNS 레코드를 만들어 회사 인터넷 도메인이 Traffic Manager DNS 이름을 가리키도록 합니다.

참고 항목

이 자습서에서 트래픽 관리자의 사용이 무엇인지 즉시 명확히 이해되지 않을 수 있습니다. 이 자습서 시리즈의 목표는 복잡한 프로덕션 환경의 규모를 처리할 수 있는 패턴을 보여 주는 것입니다. 예를 들면, 그러한 경우에 데이터베이스와 공동 배치된 여러 웹앱이 전 세계에 배포되고 이러한 인스턴스 간에 라우팅하기 위한 Traffic Manager가 필요합니다. Traffic Manager를 사용하는 방법을 보여 주는 또 다른 자습서 집합은 지역 복원지역에서 복제 자습서입니다. 이러한 자습서에서 Traffic Manager는 지역 가동 중단 시 SaaS 앱의 복구 인스턴스로 전환하는 데 사용됩니다.

테넌트 데이터베이스에서 부하 생성 시작

이제 앱이 배포되었으므로 작동해 보도록 하겠습니다.

Demo-LoadGenerator PowerShell 스크립트는 모든 테넌트 데이터베이스에서 실행되는 워크로드를 시작합니다. 많은 SaaS 앱의 실제 로드는 산발적이고 예측할 수 없습니다. 이 유형의 로드를 시뮬레이션하기 위해 생성기는 각 테넌트에서 임의 급증 또는 버스트가 발생하는 로드를 생성합니다. 버스트는 임의 간격으로 발생합니다. 로드 패턴이 나타나는 데 몇 분 정도 걸립니다. 따라서 로드를 모니터링하기 전에 생성기를 최소 3~4분 이상 실행하는 것이 가장 좋습니다.

  1. PowerShell ISE에서 ...\Learning Modules\Utilities\Demo-LoadGenerator.ps1 스크립트를 엽니다.
  2. F5 키를 눌러 스크립트를 실행하고 부하 생성기를 시작합니다. 나머지 매개변수는 현재 값을 그대로 둡니다.
  3. Azure 계정에 로그인하고 필요한 경우 사용하고자 하는 구독을 선택하세요.

로드 생성기 스크립트는 카탈로그의 각 데이터베이스에 대한 백그라운드 작업을 시작한 다음 중지합니다. 로드 생성기 스크립트를 다시 실행하면 새 작업을 시작하기 전에 실행 중인 백그라운드 작업이 중지됩니다.

백그라운드 작업 모니터링

백그라운드 작업을 제어하고 모니터링하려면 다음 cmdlet을 사용하세요.

  • Get-Job
  • Receive-Job
  • Stop-Job

Demo-LoadGenerator.ps1 작업

Demo-LoadGenerator.ps1은 고객 트랜잭션의 활성 워크로드를 모방합니다. 다음 단계는 Demo-LoadGenerator.ps1이 시작하는 작업의 시퀀스를 설명합니다.

  1. Demo-LoadGenerator.ps1 은 전경에서 LoadGenerator.ps1 을 시작합니다.

    • 두 .ps1 파일은 모두 Learning Modules\Utilities\ 폴더에 저장됩니다.
  2. LoadGenerator.ps1은 카탈로그의 모든 테넌트 데이터베이스를 반복합니다.

  3. LoadGenerator.ps1은 각 테넌트 데이터베이스에 대한 백그라운드 PowerShell 작업을 시작합니다.

    • 기본적으로 백그라운드 작업은 120분 동안 실행됩니다.
    • 각 작업은 sp_CpuLoadGenerator를 실행함으로써 하나의 테넌트 데이터베이스에서 CPU 기반 로드를 발생시킵니다. 로드의 강도 및 지속 기간은 $DemoScenario에 따라 다릅니다.
    • sp_CpuLoadGenerator는 높은 CPU 로드를 초래하는 SQL SELECT 문 주위에서 반복합니다. SELECT 문제 사이의 시간 간격은 제어 가능한 CPU 로드를 만들기 위한 매개 변수 값에 따라 달라집니다. 로드 수준 및 간격은 보다 현실적인 로드를 시뮬레이션하기 위해 임의로 지정됩니다.
    • 이 .sql 파일은 WingtipTenantDB\dbo\StoredProcedures\에 저장됩니다.
  4. $OneTime = $false 경우 로드 생성기가 백그라운드 작업을 시작한 다음 계속 실행됩니다. 10초마다 프로비전된 새 테넌트에 대해 모니터링합니다. $OneTime = $true을(를) 설정하는 경우 LoadGenerator가 백그라운드 작업을 시작한 다음, 전경에서 실행을 중지합니다. 이 자습서에서는 $OneTime = $false을(를) 그대로 둡니다.

    로드 생성기를 중지하거나 다시 시작하려면 Ctrl-C 또는 중지 작업 Ctrl-Break를 사용하세요.

    로드 생성기를 전경에서 실행 중인 상태로 두었으면 다른 PowerShell ISE 인스턴스를 사용하여 다른 PowerShell 스크립트를 실행하세요.

 

다음 섹션을 계속 진행하기 전에 로드 생성기를 작업 호출 상태에서 실행 상태로 둡니다.

새 테넌트 프로비전

초기 배포에서는 세 개의 샘플 테넌트가 만들어집니다. 또 다른 테넌트를 만들어 이것이 배포된 애플리케이션에 미치는 영향을 확인해 보겠습니다. Wingtip 앱에서 새 테넌트를 프로비전하는 워크플로는 프로비전 및 카탈로그 자습서에 설명되어 있습니다. 이 단계에서는 1분 미만이 걸리는 새 테넌트를 만듭니다.

  1. 새 PowerShell ISE를 엽니다.

  2. ...\Learning Modules\Provision and Catalog\Demo-ProvisionAndCatalog.ps1을 엽니다.

  3. 스크립트를 실행하려면 F5 키를 누릅니다. 현재 기본값을 그대로 둡니다.

    참고 항목

    대부분의 Wingtip SaaS 스크립트는 $PSScriptRoot를 사용하여 폴더를 찾아 다른 스크립트에서 함수를 호출합니다. 이 변수는 F5 키를 눌러 전체 스크립트를 실행할 때만 평가됩니다. F8을 사용하여 선택 영역을 강조 표시하고 실행하면 오류가 발생할 수 있습니다. 스크립트를 실행하려면 F5 키를 누릅니다.

새 테넌트 데이터베이스는 다음과 같습니다.

  • SQL 탄력적 풀에 만들어집니다.
  • 초기화되었습니다.
  • 카탈로그에 등록

프로비전에 성공하면 새 테넌트 이벤트 사이트가 브라우저에 표시됩니다.

New tenant

Events Hub를 새로 고치면 목록에 새 테넌트가 나타납니다.

서버, 풀 및 테넌트 데이터베이스 탐색

테넌트 컬렉션에 대한 로드 실행을 시작했으므로 배포된 리소스 중 일부를 살펴보겠습니다.

  1. Azure 포털에서 SQL 서버 목록으로 이동하세요. 그런 다음 catalog-dpt-<USER> 서버를 여세요.

    • 카탈로그 서버에는 tenantcatalogbasetenantdb(새 테넌트를 만들기 위해 복사된 템플릿 데이터베이스) 두 데이터베이스가 포함됩니다.

    Screenshot that shows a catalog server Overview page with the two databases.

  2. SQL 서버 목록으로 돌아가세요.

  3. 테넌트 데이터베이스가 있는 tenants1-dpt-<USER> 서버를 엽니다.

  4. 다음 항목을 확인하세요.

    • 각 테넌트 데이터베이스는 50-eDTU 표준 풀의 Elastic Standard 데이터베이스입니다.
    • 이전에 프로비전한 테넌트 데이터베이스인 Red Maple Racing 데이터베이스입니다.

    Screenshot that shows the four databases in the server with red maple racing database highlighted.

풀 모니터링

LoadGenerator.ps1이 몇 분 동안 실행된 후 일부 모니터링 기능을 살펴보기 위해 충분한 데이터를 사용할 수 있어야 합니다. 이러한 기능은 풀 및 데이터베이스에 기본 제공됩니다.

서버 tenants1-dpt-<user>로 이동하고 Pool1을 선택하여 풀의 리소스 사용률을 확인하세요. 다음 차트에서 로드 생성기는 1시간 동안 실행되었습니다.

Monitor pool

  • 리소스 사용률 레이블이 지정된 첫 번째 차트에는 풀 eDTU 사용률이 표시됩니다.
  • 두 번째 차트는 풀에서 가장 활성 상태인 5개의 데이터베이스의 eDTU 사용률을 보여줍니다.

두 차트는 탄력적 풀 및 SQL Database가 예기치 않은 SaaS 애플리케이션 워크로드에 얼마나 적합한지 설명합니다. 차트에 따르면 4개의 데이터베이스가 각각 40개의 eDTU로 버스팅되지만 모든 데이터베이스는 50-eDTU 풀에서 편안하게 지원됩니다. 50-eDTU 풀은 더 많은 워크로드를 지원할 수 있습니다. 데이터베이스가 단일 데이터베이스로 프로비전되는 경우 각 데이터베이스는 버스트를 지원하는 S2(50 DTU)여야 합니다. 4개의 단일 S2 데이터베이스 비용은 풀의 거의 3배에 달하는 가격입니다. 실제 상황에서 SQL Database 고객은 200 eDTU 풀에서 데이터베이스를 최대 500개까지 실행합니다. 자세한 내용은 성능 모니터링 자습서를 참조하세요.

추가 리소스

다음 단계

이 자습서에서는 다음에 대해 알아보았습니다.

  • Wingtip 티켓 SaaS 애플리케이션 배포 방법
  • 앱을 구성하는 서버, 풀 및 데이터베이스 정보.
  • 카탈로그를 사용하여 데이터에 테넌트를 매핑하는 방법
  • 새 테넌트를 프로비전하는 방법.
  • 풀 사용률을 보고 테넌트 활동을 모니터링하는 방법입니다.
  • 샘플 리소스를 삭제하여 관련 결제를 중지하는 방법

다음으로 프로비전 및 카탈로그 자습서를 사용해 보세요.