部署及探索搭配 Azure SQL Database 使用每一租用戶一個資料庫模式的多租用戶 SaaS 應用程式

適用於:Azure SQL Database

在本教學課程中,您將部署及探索 Wingtip Tickets SaaS 每一租用戶一個資料庫應用程式 (Wingtip)。 本應用程式使用每一租用戶一個資料庫模式來儲存多租用戶的資料。 本應用程式專為展示簡化 SaaS 案例啟用方式的 Azure SQL Database 功能而設計。

選取 [部署至 Azure] 後五分鐘,多租用戶 SaaS 應用程式便部署完成。 應用程式包含 Azure SQL Database 中執行的資料庫。 應用程式中部署了三個範例租用戶,每個租用戶都有自己的資料庫。 所有資料庫均已部署到 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 資料夾中。

更新此部署的使用者組態檔

執行任何指令碼之前,請更新 User Config 檔案中「資源群組」和「使用者」的值。 將這些變數設定為您在部署期間使用的值。

  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 的「每一租用戶一個資料庫」實作與其他實作進行區分。 例如,「單一」每一租用戶一個應用程式 (-sa),或「多租用戶資料庫」 (-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 伺服器清單。 然後開啟 catalog-dpt-<USER> 伺服器。

    • 目錄伺服器包含兩個資料庫,tenantcatalogbasetenantdb (basetenantdb 是複製的範本資料庫,用以建立新租用戶)。

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

  2. 返回 SQL Server 清單。

  3. 開啟內含租用戶資料庫的 tenants1-dpt-<USER> 伺服器。

  4. 查看下列項目:

    • 每個租用戶資料庫都是 50-eDTU 標準集區中的「彈性標準」資料庫。
    • Red Maple Racing 資料庫是您先前佈建的租用戶資料庫。

    Server with databases

監視集區

LoadGenerator.ps1 執行幾分鐘之後,您應該能獲得足夠的資料來觀察一些監視功能。 這些監視功能已內建在集區和資料庫中。

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

Monitor pool

  • 第一個圖表 (標示為資源使用率) 顯示集區的 eDTU 使用率。
  • 第二個圖表顯示集區中五個最常使用之資料庫的 eDTU 使用率。

這兩個圖表說明彈性集區和 SQL Database 非常適合無法預期的 SaaS 應用程式工作負載。 圖表顯示這 4 個資料庫的使用率均爆增至 40 eDTU,不過所有資料庫都受到一個 50-eDTU 集區的支援,所以不需擔心。 50-eDTU 集區甚至能支援更繁重的工作負載。 如果這些資料庫是以單一資料庫形式佈建,則它們每個都必須是 S2 (50 DTU) 才能支援高載。 4 個單一 S2 資料庫的成本幾乎是集區價格的 3 倍。 在現實情況下,SQL Database 客戶會在 200 eDTU 集區中執行多達 500 個資料庫。 如需詳細資訊,請參閱效能監視教學課程

其他資源

後續步驟

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

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

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