部署並探索將每一租用戶一個資料庫模式與 Azure SQL 資料庫結合使用的多租用戶 SaaS 應用程式

適用於:Azure SQL Database

在本教學課程中,您需要部署及探索每一租用戶一個資料庫的 Wingtip Tickets SaaS 應用程式 (Wingtip)。 應用程式會使用每一租用戶一個資料庫模式來儲存多個租用戶的資料。 此應用程式旨在展示 Azure SQL 資料庫的功能,以簡化啟用 SaaS 案例的方式。

選取 [部署至 Azure] 五分鐘後,您就會有多租用戶 SaaS 應用程式。 此應用程式包含在 Azure SQL 資料庫中執行的資料庫。 此應用程式部署有三個租用戶範例,每個租用戶都有自己的資料庫。 所有資料庫會部署到 SQL 彈性集區。 應用程式會部署至您的 Azure 訂用帳戶。 您可以完整存取探索和使用應用程式的個別元件。 在 WingtipTicketsSaaS-DbPerTenant GitHub 存放庫可取得應用程式 C# 原始程式碼和管理指令碼。

您會在本教學課程中學到:

  • 如何部署 Wingtip SaaS 應用程式。
  • 在何處取得應用程式原始程式碼和管理指令碼。
  • 關於組成應用程式的伺服器、工具和資料庫。
  • 如何使用「目錄」將租用戶對應到其資料。
  • 如何佈建新租用戶。
  • 如何監視應用程式中的租用戶活動。

一系列相關教學課程可供探索各種 SaaS 設計和管理模式。 本教學課程的建置超出了此初始部署的範圍。 當您使用教學課程時,可以檢查所提供的指令碼,以查看如何實作不同的 SaaS 模式。 指令碼示範了 SQL Database 的功能如何簡化 SaaS 應用程式的開發。

必要條件

要完成本教學課程,請確定已安裝 Azure PowerShell。 如需詳細資訊,請參閱開始使用 Azure PowerShell

部署 Wingtip Tickets SaaS 應用程式

計劃名稱

在本節的各步驟中,您需要提供使用者值,用來確定資源名稱是全域唯一的。 還需要提供資源群組的名稱,其中包含應用程式部署所建立的所有資源。 假設使用者的姓名為 Ann Finley,我們建議:

  • 使用者af1 由 Ann Finley 的首字母縮寫加上一個數字組成。 如果您第二次部署應用程式,請使用其他值。 例如 af2。
  • 資源群組wingtip-dpt-af1 指出這是每一租用戶一個資料庫應用程式。 附加使用者名稱 af1,將資源群組名稱與其所包含資源的名稱關聯起來。

現在請選擇您的名稱,然後將它們寫下來。

步驟

  1. 若要在 Azure 入口網站中開啟每一租用戶一個資料庫的 Wingtip Tickets SaaS 部署範本,請選取 [部署至 Azure]

    Image showing a button labeled

  2. 在範本中輸入所需參數的值。

    重要

    為了示範的目的,已刻意將某些驗證和伺服器防火牆設為不安全。 建議您建立新的資源群組。 請勿使用現有的資源群組、伺服器或集區。 請不要將此應用程式或任何它所建立的資源用於生產環境。 不使用應用程式之後請刪除此資源群組,以停止相關計費。

    • 資源群組:選取 [新建],並提供您稍早為資源群組選擇的唯一名稱。
    • 位置:從下拉式清單中選取位置。
    • 使用者:使用您稍早選擇的使用者名稱值。
  3. 部署應用程式。

    a. 選取以同意條款及條件。

    b. 選取 [購買] 。

  4. 若要監視部署狀態,請選取 [通知] (搜尋方塊右邊的鈴鐺圖示)。 部署 Wingtip Tickets SaaS 應用程式大約需要五分鐘。

    Deployment succeeded

下載並解除封鎖 Wingtip Tickets 管理指令碼

部署應用程式時,請下載原始程式碼和管理指令碼。

重要

從外部來源下載 .zip 檔案並進行解壓縮時,Windows 可能會封鎖可執行的內容 (指令碼和 DLL)。 請依循步驟解除封鎖.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. 將 ResourceGroupName 和 Name 更新為您部署的特定值 (只在第 10 行和第 11 行)。
  3. 儲存變更。

幾乎每個指令碼都會引用這些值。

執行應用程式

應用程式會示範裝載事件的場地。 場地類型包括音樂廳、爵士俱樂部和運動俱樂部。 在 Wingtip Tickets 中,場地會註冊為租用戶。 成為租用戶可讓場地輕鬆列出活動,並將門票銷售給客戶。 每個場地都有客製化網站可刊登其活動及售票。

在應用程式內部,每個租用戶都會取得部署到彈性集區的資料庫。

中央 [事件中樞] 頁面提供部署中租用戶的連結清單。

  1. 使用 URL 在網頁瀏覽器中開啟 [事件中樞]:http://events.wingtip-dpt.<user>.trafficmanager.net。 以部署的使用者值取代 <user>。

    Events Hub

  2. 選取 [事件中樞] 中的 [Fabrikam Jazz Club]

    Events

Azure 流量管理員

為了控制傳入要求的散發,Wingtip 應用程式會使用 Azure 流量管理員。 用於存取特定租用戶事件頁面的 URL 會使用下列格式:

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

    上述格式的各部分說明如下表所示。

    URL 部分 描述
    events.wingtip-dpt Wingtip 應用程式的活動部分。

    -dpt 會將 Wingtip Tickets 每一租用戶一個資料庫的實作模式與其他實作區分開來。 範例包括 single app-per-tenant (-sa) 或 multitenant database (-mt) 實作。
    .<user> 範例中的 af1
    .trafficmanager.net/ 流量管理員,基底 URL。
    fabrikamjazzclub 識別名為 Fabrikam Jazz Club 的租用戶。
  • 事件應用程式會從 URL 剖析租用戶名稱。

  • 租用戶名稱用於建立金鑰。

  • 金鑰將用於存取目錄,以取得租用戶資料庫的位置。

    • 目錄是使用分區對應管理實作的。
  • 事件中樞會使用目錄中的擴充中繼資料來建構每個租用戶的事件清單頁面 URL。

在實際執行環境中,您通常會建立 CNAME DNS 記錄以將公司網際網路網域指向流量管理員 DNS 名稱。

注意

在本教學課程中,流量管理員的用途可能並不明顯。 本系列教學課程的目標是展示可處理複雜實際執行環境規模的模式。 例如,在這種情況下,您將擁有多個分佈在全球各地的 Web 應用程式,與資料庫位於同一位置,並且將需要流量管理員在這些執行個體之間路由。 另一組說明流量管理員用途的教學課程是異地還原異地複寫教學課程。 在這些教學課程中,流量管理員用於協助在發生區域性中斷時切換至 SaaS 應用程式的恢復執行個體。

開始在租用戶資料庫上產生負載

應用程式已部署完成,請立即使用。

Demo-LoadGenerator PowerShell 指令碼會啟動針對所有租用戶資料庫執行的工作負載。 許多 SaaS 應用程式的實際負載是偶發且無法預期的。 為了模擬這種類型的負載,產生器會在每個租用戶上產生具有隨機峰值或活動高載的負載。 高載以隨機間隔發生。 載入模式需要幾分鐘的時間才會出現。 讓產生器至少執行三四分鐘,再監視負載。

  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. 開啟新的 PowerShell ISE。

  2. 開啟 ...\Learning Modules\Provision and Catalog\Demo-ProvisionAndCatalog.ps1

  3. 若要執行指令碼,請按 F5。 暫時保留預設值。

    注意

    許多 Wingtip SaaS 指令碼使用 $PSScriptRoot 來瀏覽資料夾,以在其他指令碼中呼叫函式。 只有在按下 F5 執行完整指令碼時,才會評估此變數。 使用 F8 醒目標示和執行選取範圍可能會導致錯誤。 若要執行指令碼,請按 F5。

新的租用戶資料庫:

  • 已在 SQL 彈性集區中建立。
  • 已初始化。
  • 已在目錄中註冊。

佈建成功之後,新租用戶的事件網站會顯示在您的瀏覽器中。

New tenant

重新整理 [事件中樞] 讓新租用戶出現在清單中。

探索伺服器、集區和租用戶資料庫

既然您已經開始對租用戶集合執行負載,我們來看看已經部署的一些資源。

  1. Azure 入口網站中,瀏覽至您的 SQL Server 清單。 然後開啟 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 標準集區中的彈性標準資料庫。
    • Red Maple Racing 資料庫是您先前佈建的租用戶資料庫。

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

監視集區

LoadGenerator.ps1 執行數分鐘之後,應該有足夠的資料可供開始查看一些監視功能。 這些功能內建於集區和資料庫中。

瀏覽至伺服器 tenants1-dpt-<user>,然後選取 Pool1 以檢視集區的資源使用率。 在下列圖表中,負載產生器執行了一個小時。

Monitor pool

  • 第一張標示為資源使用率的圖表顯示集區 eDTU 使用率。
  • 第二張圖表顯示集區中五個最活躍資料庫的 eDTU 使用率。

這兩張圖表說明彈性集區和 SQL 資料庫非常適合無法預測的 SaaS 應用程式工作負載。 圖表顯示,四個資料庫中,每一個都會高載至使用多達 40 個 eDTU,但所有資料庫都可以由 50-eDTU 集區輕鬆支援。 50-eDTU 集區可支援更重的工作負載。 如果資料庫佈建為單一資料庫,則每個資料庫都必須是 S2 (50 DTU),才能支援高載。 四個單一 S2 資料庫的成本幾乎為集區價格的三倍。 現實狀況下,SQL Database 客戶在 200 個 eDTU 集區中最多執行 500 個資料庫。 如需詳細資訊,請參閱效能監控教學課程

其他資源

下一步

在本教學課程中,您已了解:

  • 如何部署 Wingtip Tickets SaaS 應用程式。
  • 關於組成應用程式的伺服器、工具和資料庫。
  • 如何使用「目錄」將租用戶對應到其資料。
  • 如何佈建新租用戶。
  • 如何檢視集區使用率以監視租用戶活動。
  • 如何刪除範例資源以停止相關計費。

接下來,請嘗試佈建和目錄教學課程