Развертывание и изучение сегментированного мультитенантного приложения

Область применения: База данных SQL Azure

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

Эта реализация приложения Wingtip Tickets использует шаблон сегментированной мультитенатной базы данных. Сегментирование выполняется по идентификатору клиента. Данные клиента распределяются в конкретную базу данных в соответствии со значениями идентификаторов клиентов.

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

Быстрое развертывание приложения

Это приложение выполняется в облаке Azure и использует Базу данных SQL Azure. В приведенном ниже разделе о развертывании предоставлена синяя кнопка Deploy to Azure (Развертывание в Azure). Нажатие этой кнопки приведет к тому, что приложение будет развернуто с вашей подпиской Azure в течение пяти минут. Вы получите полный доступ для работы с отдельными компонентами приложения.

Приложение развертывается с данными для трех примеров клиентов. Клиенты будут храниться вместе в одной мультитенантной базе данных.

Вы можете скачать исходный код C# и PowerShell для Wingtip Tickets из его репозитория на сайте GitHub.

В этом руководстве рассматривается:

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

Доступна серия связанных руководств, в основе которых лежит это первоначальное развертывание. В них рассматривается ряд шаблонов проектирования и управления SaaS. При работе с руководствами рекомендуется пошагово выполнять указанные выше скрипты, чтобы увидеть, как реализованы различные шаблоны SaaS.

Предварительные требования

Для работы с этим руководством выполните следующие предварительные требования:

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

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

В инструкциях в этом разделе необходимо указать значение user, которое используется для обеспечения глобальной уникальности имен ресурсов, и значение resource group для всех ресурсов, созданных при развертывании приложения. Для пользователя с именем Энн Финли мы указали следующие сведения.

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

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

Шаги

  1. Нажмите синюю кнопку Deploy to Azure (Развертывание в Azure).

    • Откроется портал Azure с шаблоном развертывания SaaS-приложения Wingtip Tickets.

      Кнопка для развертывания в Azure.

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

    Важно!

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

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

    • Установите флажок, чтобы принять условия.
    • Щелкните Приобрести.
  4. Отслеживайте состояние развертывания. Для этого щелкните Уведомления (значок колокольчика справа от поля поиска). Развертывание приложения Wingtip занимает примерно пять минут.

    Развертывание выполнено

Скачивание и разблокирование скриптов управления

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

Примечание

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

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

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

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

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

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

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

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

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

Для каждого объекта создается персонализированное веб-приложение для отображения списка мероприятий и продажи билетов. Каждое веб-приложение является независимым и изолировано от других клиентов. По умолчанию База данных Azure SQL хранит все данные каждого клиента в общедоступной базе данных для нескольких клиентов. Все данные отмечаются тегами с идентификатором клиента.

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

  1. Откройте концентратор событий в браузере:

    • http://events.wingtip-mt.<пользователь>.trafficmanager.net (Замените <пользователь> именем пользователя для своего развертывания.)

      Концентратор событий

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

    События

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

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

  • http://events.wingtip-mt.<пользователь>.trafficmanager.net/fabrikamjazzclub
  1. Приложения событий выполняют синтаксический анализ имени клиента в URL-адресе. В предыдущем примере URL-адреса имя клиента — fabrikamjazzclub.
  2. Затем приложение применяет к имени клиента алгоритм хэш, чтобы создать ключ для доступа к каталогу при помощи управления размещением сегментов.
  3. Приложение находит ключ в каталоге и получает соответствующее расположение базы данных клиента.
  4. Приложение использует данные о расположении для поиска одной базы данных, которая содержит все данные клиента, и получения доступа к ней.

Концентратор событий

  1. В концентраторе событий перечислены все клиенты, зарегистрированные в каталоге, и их объекты.
  2. Концентратор событий использует расширенные метаданные в каталоге, чтобы получить имя клиента, связанное с каждым сопоставлением, для создания URL-адресов.

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

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

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

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

Скрипт Demo-LoadGenerator.ps1 отрывает другой сеанс PowerShell, где выполняется генератор нагрузки. Он выполняется в сеансе в качестве задачи переднего плана, которая вызывает фоновые задания создания нагрузки для каждого клиента.

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

Закрытие сеанса PowerShell останавливает все задания.

Может потребоваться перезапустить сеанс генератора нагрузки для использования других значений параметров. Если да, закройте сеанс PowerShell для создания нагрузки и повторно запустите Demo-LoadGenerator.ps1.

Подготовка нового клиента в сегментированной базе данных

Первоначальное развертывание включает в себя три примера клиентов в базе данных Tenants1. Давайте создадим другой клиент, чтобы увидеть, как это влияет на развернутое приложение. На этом шаге вы сможете быстро создать клиент, нажав одну клавишу.

  1. В интегрированной среде сценариев PowerShell откройте файл ...\Learning Modules\Provision and Catalog\Demo-ProvisionTenants.ps1.

  2. Нажмите клавишу F5 (а не F8) для запуска сценария (оставьте значения по умолчанию).

    Примечание

    Чтобы запустить выбранную часть сценария, необходимо выполнять сценарии PowerShell только нажатием клавиши F5, а не F8. Вы не можете сделать это, нажав клавишу F8, так как переменная $PSScriptRoot не вычисляется. Эта переменная требуется во многих скриптах для перехода по папкам, вызова других скриптов или импорта модулей.

Новый клиент Red Maple Racing добавлен в базу данных Tenants1 и зарегистрирован в каталоге. В вашем браузере откроется новый сайт продажи билетов Events клиента:

Новый клиент

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

подготовка нового клиента в собственной базе данных.

Сегментированная мультитенантная модель позволяет выбрать, где подготавливать новый клиент: в базе данных, содержащей другие клиенты, или в собственной базе данных. Клиент, использующий собственную базу данных, имеет следующие преимущества.

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

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

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

  1. В файле ...\Learning Modules\Provision and Catalog\Demo-ProvisionTenants.ps1 измените $TenantName на Salix Salsa, $VenueType на dance, а $Scenario на 2.

  2. Нажмите клавишу F5 для повторного запуска скрипта.

    • Нажатие клавиши F5 подготавливает новый клиент в отдельной базе данных. Базы данных и клиент регистрируются в каталоге. Затем браузер открывает страницу мероприятий клиента.

    Страница мероприятий Salix Salsa

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

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

Теперь рассмотрим подробнее некоторые из развернутых ресурсов:

  1. На портале Azure перейдите к списку групп ресурсов. Откройте группу ресурсов, которая была создана при развертывании приложения.

    resource group

  2. Щелкните сервер catalog-mt<пользователь> . На сервере каталога содержится две базы данных с именем tenantcatalog и basetenantdb. База данных basetenantdb — это пустой шаблон базы данных. Он копируется для создания клиентской базы данных, используемой для нескольких клиентов или только для одного.

    сервер каталога

  3. Вернитесь в группу ресурсов и выберите сервер tenants1-mt, который содержит клиентские базы данных.

    • База данных tenants1 — это мультитенантная база данных, в которой хранятся три исходных клиента, а также первый добавленный вами клиент. Она настроена как стандартная база данных с 50 DTU.
    • База данных salixsalsa содержит место проведения Salix Salsa в качестве единственного клиента. Она настроена в качестве стандартной базы данных с 50 DTU по умолчанию.

    Сервер клиентов

Мониторинг производительности базы данных

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

  1. Перейдите на сервер tenants1-mt<пользователь> и щелкните tenants1, чтобы просмотреть сведения об использовании ресурсов базы данных, в которой есть четыре клиента. Каждый арендатор подвергается случайной высокой нагрузке от генератора нагрузки:

    Мониторинг tenants1

    Диаграмма использования DTU хорошо демонстрирует, как мультитенантная база данных может поддерживать непредсказуемую рабочую нагрузку во многих клиентах. В этом случае генератор нагрузки применяет случайные нагрузки примерно по 30 DTU для каждого клиента. Эта нагрузка равнозначна использованию базы данных с 50 DTU на 60 %. Пики, которые превышают 60 %, являются результатом нагрузки, применяемой к более чем одному клиенту одновременно.

  2. Перейдите к серверу tenants1-mt<пользователь> и щелкните базу данных salixsalsa. Вы можете увидеть использование ресурсов в этой базе данных, содержащей только один клиент.

    База данных salixsalsa

Генератор нагрузки применяет аналогичную нагрузку для всех клиентов, независимо от того, в какой базе данных находится каждый клиент. База данных salixsalsa с одним клиентом может выдержать гораздо большую нагрузку, чем база данных с несколькими клиентами.

Различия выделений ресурсов в зависимости от рабочей нагрузки

Иногда базе данных с несколькими клиентами требуется больший объем ресурсов для оптимальной производительности, чем базе данных с одним клиентом (но не всегда). Оптимальное распределение ресурсов зависит от характеристик конкретной рабочей нагрузки для клиентов в системе.

Рабочие нагрузки, созданные сценарием генератора нагрузки, используются только для иллюстрации.

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

Дальнейшие действия

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

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

А теперь рекомендуем ознакомиться со статьей Provision new tenants and register them in the catalog (Подготовка новых клиентов и их регистрация в каталоге).