Разверните и изучите мультитенантное приложение SaaS, в котором используется отдельная База данных SQL Azure для каждого клиента.

Применимо к:База данных SQL Azure

В этом руководстве вы развернете и изучите приложение SaaS Wingtip Tickets, использующее одну базу данных на клиент (Wingtip). В этом приложении SaaS сохраняются данные нескольких клиентов, и для каждого клиента используется отдельная база данных. Приложение разработано для демонстрации возможностей Базы данных SQL Azure, которые обеспечивают реализацию сценариев SaaS.

Через пять минут после щелчка Развертывание в Azure вы получите мультитенантное приложение SaaS. Приложение включает базу данных, которая выполняется в Базе данных SQL Azure. Приложение развертывается с помощью трех примеров клиентов, каждый из которых содержит свою базу данных. Все базы данных развернуты в эластичном пуле SQL. Приложение развертывается в подписку Azure. Вы получите полный доступ для изучения отдельных компонентов приложения и экспериментов с ними. Исходный код C# приложения и скрипты управления доступны в репозитории WingtipTicketsSaaS-DbPerTenant на GitHub.

Из этого руководства вы узнаете следующее:

  • как развернуть приложение SaaS Wingtip;
  • где можно получить исходный код приложения и сценарии управления;
  • сведения о серверах, пулах и базах данных, формирующих приложение;
  • как сопоставить клиентов с данными с помощью каталога;
  • как подготовить новый клиент;
  • как выполнить мониторинг активности клиента в приложении.

Чтобы изучить различные модели проектирования и управления SaaS, вы можете ознакомиться с доступной серией связанных руководств. Они являются продолжением этого руководства, необходимого для выполнения первоначального развертывания. Изучая руководства, вы можете понять способ реализации различных шаблонов SaaS, ознакомившись с приведенными сценариями. В этих сценариях показано, как функции базы данных SQL упрощают развертывание приложений SaaS.

Необходимые компоненты

Для работы с этим руководством нужно установить Azure PowerShell. Дополнительные сведения см. в статье Начало работы с Azure PowerShell.

Развертывание приложения SaaS Wingtip Tickets

Планирование имен

При выполнении шагов в этом разделе необходимо указать значение пользователя, которое обеспечит глобальную уникальность имен ресурсов. Кроле того, следует указать имя группы ресурсов для хранения всех ресурсов, создаваемых при развертывании приложения. Для фиктивного пользователя Энн Финли мы указали следующие сведения.

  • Пользователь: af1. Это инициалы Энн Финли с цифрой. Используйте другое значение при развертывании приложения во второй раз. Например, af2.
  • Группа ресурсов:wingtip-dpt-af1. Она указывает, что это приложение, использующее одну базу данных на клиент. Добавление имени пользователя af1 позволяет сопоставить имя группы ресурсов с именами ресурсов, содержащихся в ней.

Теперь выберите ваши имена и запишите их.

Шаги

  1. Щелкните Развертывание в Azure, чтобы открыть на портале Azure шаблон развертывания приложения SaaS Wingtip Tickets, использующего одну базу данных на клиент.

    Image showing a button labeled

  2. В шаблоне введите значения обязательных параметров.

    Важно!

    Некоторые процессы аутентификации и брандмауэры сервера не защищены специально, так как предназначены для демонстрации. Рекомендуем создать группу ресурсов. Не используйте существующие группы ресурсов, серверы или пулы. Не используйте в рабочей среде это приложение, его сценарии или развернутые ресурсы. Поработав с приложением, удалите эту группу ресурсов, чтобы прекратить выставление счетов за нее.

    • Группа ресурсов. Выберите Создать и укажите выбранное ранее уникальное имя группы ресурсов.
    • Расположение. Выберите расположение из раскрывающегося списка.
    • Пользователь. Используйте значение имени пользователя, выбранное ранее.
  3. Разверните приложение.

    a. Установите флажок, чтобы принять условия.

    b. Щелкните Приобрести.

  4. Чтобы отслеживать состояние развертывания, щелкните Уведомления (значок колокольчика справа от поля поиска). Развертывание приложения SaaS Wingtip Tickets занимает примерно пять минут.

    Deployment succeeded

Загрузка и разблокировка скриптов управления для приложения Wingtip Tickets

Пока выполняется развертывание приложения, скачайте исходный код и сценарии управления.

Важно!

Исполняемое содержимое (сценарии и библиотеки DLL) может быть заблокировано Windows, в то время как ZIP-файлы можно скачать с внешнего источника, а затем извлечь их содержимое. Выполните действия по разблокированию ZIP-файла до извлечения сценариев из него. Это позволит выполнить их.

  1. Перейдите к репозиторию GitHub WingtipTicketsSaaS-DbPerTenant.
  2. Выберите Clone or download(Клонировать или скачать).
  3. Выберите Download ZIP (Скачать ZIP-файл) и сохраните файл.
  4. Щелкните правой кнопкой мыши файл WingtipTicketsSaaS-DbPerTenant-master.zip и выберите Свойства.
  5. На вкладке Общие выберите Разблокировать>Применить.
  6. Нажмите кнопку ОК и извлеките файлы.

Сценарии находятся в папке ...\WingtipTicketsSaaS-DbPerTenant-master\Learning Modules.

Обновление файла конфигурации пользователя для развертывания

Прежде чем запускать какие-либо сценарии, настройте значения resource group и user в файле UserConfig.psm1. Задайте для этих переменных значения, указанные во время развертывания.

  1. В интегрированной среде сценариев PowerShell откройте файл ...\Learning Modules\UserConfig.psm1
  2. В полях ResourceGroupName и Name введите специфические для развертывания значения (только в строках 10 и 11).
  3. Сохраните изменения.

Эти значения используются почти во всех скриптах.

Выполнение приложения

Приложение служит витриной для объектов, в которых проводятся культурные мероприятия. Чаще всего это концертные залы, джаз-клубы, спортивные клубы и т. п. В Wingtip Tickets объекты регистрируются как клиенты. Это дает каждому из них простую возможность предоставлять клиентам список мероприятий и продавать билеты. Для каждого объекта создается персонализированный веб-сайт для отображения списка мероприятий и продажи билетов.

В приложении каждый клиент получает базу данных, развернутую в эластичный пул.

Центральная страница Концентратор событий содержит список клиентов в вашем развертывании со ссылками.

  1. Откройте концентратор событий в веб-браузере по адресу:http://events.wingtip-dpt.<user>.trafficmanager.net. Значение <пользователь> замените именем пользователя для своего развертывания.

    Events Hub

  2. Щелкните Fabrikam Jazz Club в концентраторе событий.

    Events

Диспетчер трафика Azure

Приложение Wingtip использует диспетчер трафика Azure, чтобы управлять распределением входящих запросов. URL-адрес для доступа к странице событий для конкретного клиента указывается в следующем формате:

  • http://events.wingtip-dpt.<пользователь>.trafficmanager.net/fabrikamjazzclub

    В следующей таблице описываются элементы предыдущего формата.

    Часть URL-адреса Description
    events.wingtip-dpt Элементы события приложения Wingtip.

    Суффикс -dpt отличает реализацию Wingtip Tickets, использующую одну базу данных на клиент, от других вариантов реализации. Например, от отдельного однотенантного приложения (-sa) или приложения, использующего мультитенантную базу данных (-mt).
    .<пользователь> В этом примере — af1.
    .trafficmanager.net/ Базовый URL-адрес диспетчера трафика Azure.
    fabrikamjazzclub Указывает клиент Fabrikam Jazz Club.
  • Приложение событий выполняет анализ имени клиента в URL-адресе.

  • С помощью имени клиента можно создать ключ.

  • Ключ используется, чтобы получить доступ к каталогу и обнаружить расположение базы данных клиента.

    • Каталог реализуется с помощью управления размещением сегментов.
  • Концентратор событий использует расширенные метаданные из каталога для создания списка URL-адресов страниц событий для каждого клиента.

В рабочей среде обычно создается запись DNS CNAME, которая сопоставляет интернет-домен компании с DNS-именем диспетчера трафика.

Примечание.

Функция диспетчера трафика в рамках этого руководства может быть неочевидной. Вся эта серия учебников демонстрирует шаблоны, которые помогают масштабировать сложные рабочие среды. Например, у вас есть несколько веб-приложений, распределенных по всему миру совместно с базами данных, и вам нужен диспетчер трафика для маршрутизации трафика между этими экземплярами. Использование диспетчера трафика демонстрируется также в руководствах по геовосстановлению и георепликации. В этих руководствах диспетчер трафика помогает выполнять переключение на экземпляр восстановления приложения SaaS в случае регионального сбоя.

Запуск создания нагрузки в базах данных клиента

Теперь после развертывания приложение готово к работе.

Сценарий PowerShell Demo-LoadGenerator запускает рабочую нагрузку, выполняющуюся во всех базах данных клиента. Реальная нагрузка в приложении SaaS случайна и непредсказуема. Для моделирования этого типа нагрузки генератор создает нагрузку со случайными пиковыми нагрузками или вспышками активности на каждом клиенте. Пиковые нагрузки происходят со случайными интервалами. Шаблон нагрузки появляется в течение нескольких минут. Перед мониторингом нагрузки генератор должен работать по крайней мере три или четыре минуты.

  1. В интегрированной среде сценариев PowerShell откройте скрипт ...\Learning Modules\Utilities\Demo-LoadGenerator.ps1.
  2. Нажмите клавишу F5, чтобы запустить скрипт и генератор нагрузки. Оставьте значения параметров по умолчанию.
  3. Войдите с учетной записью Azure и, при необходимости, выберите подписку, которую вы хотите использовать.

Сценарий генератора нагрузки запускает фоновое задание для каждой базы данных в каталоге, а затем останавливается. При повторном запуске сценарий генератора нагрузки сначала остановит все выполняемые фоновые задания, прежде чем запускать новые.

Мониторинг фоновых заданий

Если вы хотите отслеживать фоновые задания и управлять ими, вы можете выполнить следующие командлеты.

  • 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. Интенсивность и продолжительность нагрузки изменяется в зависимости от $DemoScenario.
    • sp_CpuLoadGenerator циклически выполняет инструкцию SQL SELECT, которая создает высокую нагрузку на ЦП. Интервал времени между вызовами инструкции SELECT зависит от значений параметров, что позволяет управлять нагрузкой на ЦП. Уровни нагрузки и интервалы выбираются в случайном порядке, чтобы имитация нагрузки была более реалистичной.
    • Этот SQL-файл хранится в папке WingtipTenantDB\dbo\StoredProcedures\.
  4. Если указано $OneTime = $false, то генератор нагрузки запускает фоновые задания, а затем продолжает выполняться. Каждые 10 секунд он отслеживает наличие новых подготовленных клиентов. Если указано $OneTime = $true, то генератор нагрузки запускает фоновые задания, а затем его выполнение на переднем плане останавливается. В рамках этого руководства оставьте $OneTime = $false.

    Если вы хотите остановить или перезапустить генератор нагрузки, используйте клавиши CTRL+C или CTRL+BREAK.

    Если вы оставили генератор нагрузки работать на переднем плане, используйте другой экземпляр интегрированной среды сценариев PowerShell для запуска других сценариев PowerShell.

 

Прежде чем перейти к следующему разделу, оставьте генератор нагрузки запущенным в состоянии вызова задания.

Подготовка нового клиента

При первоначальном развертывании создается три примера клиента. Теперь вы создадите другой клиент, чтобы увидеть, как это влияет на развернутое приложение. Рабочий процесс подготовки новых клиентов для приложения Wingtip описан в статье Сведения о подготовке новых клиентов и их регистрации в каталоге. На этом этапе вы создадите клиент, что займет не больше одной минуты.

  1. Откройте новый экземпляр интегрированной среды сценариев PowerShell.

  2. Откройте файл ...\Learning Modules\Provision and Catalog\Demo-ProvisionAndCatalog.ps1.

  3. Нажмите клавишу F5, чтобы запустить скрипт. Не изменяйте значения по умолчанию.

    Примечание.

    Во многих сценариях SaaS Wingtip переменная $PSScriptRoot используется для перехода по папкам и вызова функций из других сценариев. Эта переменная вычисляется только при выполнении полного сценария путем нажатия клавиши F5. Если выделить несколько сценариев и запустить их клавишей F8, может произойти ошибка. Используйте клавишу F5 для запуска сценариев.

Новая база данных клиента:

  • создана в эластичном пуле SQL;
  • инициализирована;
  • зарегистрирована в каталоге.

Когда подготовка успешно завершится, созданный сайт Events (События) для нового клиента откроется в браузере.

New tenant

Обновите концентратор событий, чтобы отобразить в списке новый клиент.

Изучение серверов, пулов и клиентских баз данных

Теперь, когда вы запустили выполнение нагрузки в коллекции клиентов, давайте рассмотрим некоторые из развернутых ресурсов.

  1. На портале Azure перейдите к списку серверов SQL Server. Откройте сервер catalog-dpt-<Пользователь>.

    • Этот сервер каталога содержит две базы данных: tenantcatalog и basetenantdb. Вторая из них является шаблоном базы данных, который копируется для создания новых клиентов.

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

  2. Вернитесь к списку серверов SQL.

  3. Откройте сервер tenants1-dpt-<пользователь>, который содержит клиентские базы данных.

  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-<пользователь>, а затем щелкните Pool1, чтобы просмотреть использование ресурсов для пула. На следующих диаграммах показан генератор нагрузки, который работал в течение часа.

Monitor pool

  • На первой диаграмме с меткой Использование ресурсов показано использование eDTU для пула в целом.
  • На второй диаграмме показано использование eDTU для пяти наиболее активных баз данных в пуле.

На этих двух диаграммах хорошо видно, что эластичные пулы и база данных SQL хорошо подходят для непредсказуемых рабочих нагрузок приложения SaaS. На диаграммах показано, что четыре базы данных передают 40 eDTU. Все базы данных легко поддерживаются пулом, рассчитанным на 50 eDTU. Пул с 50 eDTU может поддерживать даже более высокие рабочие нагрузки. Если бы базы данных были подготовлены как отдельные, то каждая из них должна быть уровня S2 (50 DTU), чтобы поддерживать пиковые нагрузки. Стоимость четырех отдельных баз данных уровня S2 в три раза превышала бы стоимость пула. На самом деле клиенты базы данных SQL используют до 500 баз данных в пулах на 200 eDTU. Дополнительные сведения см. в статье Мониторинг производительности баз данных и пулов SQL Azure в мультитенантном приложении SaaS и управление ею.

Дополнительные ресурсы

Следующие шаги

Из этого руководства вы узнали следующее:

  • развертывание приложения SaaS Wingtip Tickets;
  • сведения о серверах, пулах и базах данных, формирующих приложение;
  • как сопоставить клиентов с данными с помощью каталога;
  • как подготовить новые клиенты;
  • как просмотреть историю использования пула для отслеживания работы клиента;
  • как удалить примеры ресурсов, чтобы не оплачивать их.

Далее ознакомьтесь со статьей Сведения о подготовке новых клиентов и их регистрации в каталоге.