Подготовка и каталогизация новых клиентов и в приложении SaaS с помощью сегментированной мультитенантной Базы данных SQL Azure

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

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

Эта статья состоит из двух основных частей:

  • Основное описание подготовки и каталогизации новых клиентов.

  • Руководство, в котором приведен код скрипта PowerShell, выполняющий подготовку и каталогизацию.

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

Шаблон базы данных

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

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

Изоляция и меньшая стоимость

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

При подготовке нового клиента он может использовать базу данных совместно с другими клиентами либо его можно поместить в собственную новую базу данных. Позже можно изменить свое решение и использовать базу данных в другом сценарии.

Базы данных с несколькими клиентами и с одним клиентом совместно используются в одном приложении SaaS для оптимизации затрат или изоляции каждого клиента.

Sharded multi-tenant database app with tenant catalog

Шаблон каталога клиента

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

Ключ клиента

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

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

Метаданные клиента за пределами расположения

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

  • уровень служб или выпуск базы данных;
  • Версия схемы базы данных.
  • имя клиента и его Соглашение об уровне обслуживания;
  • сведения для управления приложениями, работы службы поддержки клиентов или процессов DevOps.

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

Клиентская библиотека эластичной базы данных

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

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

Важно!

Не изменяйте данные в базе данных каталога с использованием прямого доступа! Прямые обновления не поддерживаются из-за высокого риска повреждения данных. Вместо этого измените данные сопоставления с использованием только API-интерфейсов EDCL.

Шаблон подготовки клиента

Контрольный список

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

  • Достаточно ли в ней места для нового клиента?
  • Содержит ли она таблицы с необходимыми эталонными данными для нового клиента или данные можно добавить?
  • Есть ли в ней соответствующий вариант базовой схемы для нового клиента?
  • Находится ли она в соответствующем географическом расположении, близком к новому клиенту?
  • Находится ли она на необходимом уровне служб для нового клиента?

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

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

Шаблон базы данных

Чтобы подготовить базу данных, выполните скрипты SQL, разверните файл BACPAC или скопируйте шаблон базы данных. Приложения Wingtip копируют шаблон базы данных, чтобы создать базы данных клиентов.

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

  • новая или измененная схема;
  • новые или измененные эталонные данные;
  • рутинные задачи обслуживания базы данных для обеспечения оптимальной производительности приложения.

С приложением SaaS эти изменения необходимо развертывать скоординировано в потенциально большом количестве баз данных клиентов. Чтобы эти изменения были внесены в будущие базы данных клиентов, их нужно включить в процесс подготовки. Эта задача описана далее в руководстве Управление схемой для нескольких клиентов в мультитенантном приложении, использующем Базу данных SQL Azure.

Сценарии

Скрипты подготовки клиентов в этом руководстве поддерживают оба следующих сценария:

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

Данные клиента затем инициализируются и регистрируются в карте сегментов каталога. В примере приложения базы данных, содержащие несколько клиентов, получают общее имя, например tenants1 или tenants2. Базы данных, содержащие один клиент, получают имя клиента. Определенные соглашения об именовании, используемые в примере, не являются критически важным требованием для шаблона, так как благодаря применению каталога базе данных можно присвоить любое имя.

Начало руководства

В этом руководстве описано следующее:

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

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

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

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

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

Основные действия по подготовке

Ниже приведены основные этапы рабочего процесса подготовки.

  • Вычисление нового ключа клиента. Для создания ключа клиента из имени клиента используется хэш-функция.

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

  • Подготовка клиента в базе данных клиента по умолчанию. База данных клиента обновляется путем добавления новых данных клиента.

  • Регистрация клиента в каталоге. Сопоставление нового ключа клиента и имеющейся базы данных tenants1 добавляется в каталог.

  • Добавление имени клиента в таблицу расширения каталога. Имя места проведения добавляется в таблицу клиентов в каталоге. Это добавление показывает, как можно расширить базу данных каталога для поддержки дополнительных данных приложения.

  • Открытие страницы мероприятий для нового клиента. Страница мероприятий Bushwillow Blues открыта в браузере.

    Screenshot that shows the Events page for a new tenant.

Действия отладчика

Чтобы понять, как приложение Wingtip подготавливает новый клиент в общей базе данных, добавьте точку останова и перейдите к выполнению рабочего процесса:

  1. В интегрированной среде сценариев PowerShell откройте файл ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 и задайте следующие параметры.

    • $TenantName = Bushwillow Blues — имя нового места проведения.
    • $VenueType = blues — один из предопределенных типов мест проведения: blues, classicalmusic, dance, jazz, judo, motorracing, multipurpose, opera, rockmusic, soccer (строчными буквами, без пробелов).
    • Задайте $DemoScenario = 1, чтобы подготовить клиент в базе данных, используемой совместно с другими клиентами.
  2. Добавьте точку останова, поместив курсор в любом месте строки 38, содержащей New-Tenant `, а затем нажмите клавишу F9.

    Screenshot that highlights the line that includes New Tenant.

  3. Запустите сценарий, нажав клавишу F5.

  4. После остановки выполнения скрипта в точке останова нажмите клавишу F11, чтобы пошагово выполнить код.

    Screenshot shows the Windows PowerShell ISE with the Debug menu open and Step Into selected.

  5. Отслеживайте выполнение скрипта и используйте клавиши F10 и F11 (меню Отладка), чтобы обойти вызываемые функции или перейти в них по очереди.

Дополнительные сведения об отладке сценариев PowerShell см. в разделе Отладка сценариев в интегрированной среде сценариев Windows PowerShell.

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

Основные действия по подготовке

Ниже приведены основные этапы рабочего процесса при трассировке скрипта.

  • Вычисление нового ключа клиента. Для создания ключа клиента из имени клиента используется хэш-функция.

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

  • Создание базы данных клиента. База данных создается путем копирования базы данных basetenantdb с помощью шаблона Resource Manager. Имя новой базы данных основано на имени клиента.

  • Добавление базы данных в каталог. Новая база данных клиента регистрируется в качестве сегмента в каталоге.

  • Подготовка клиента в базе данных клиента по умолчанию. База данных клиента обновляется путем добавления новых данных клиента.

  • Регистрация клиента в каталоге. Сопоставление ключа нового клиента и базы данных sequoiasoccer добавляется в каталог.

  • Имя клиента добавляется в каталог. Имя места проведения добавляется в таблицу расширения клиентов в каталоге.

  • Открытие страницы мероприятий для нового клиента. Страница мероприятий Sequoia Soccer открыта в браузере.

    events

Действия отладчика

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

  1. В том же файле ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 задайте следующие параметры.

    • $TenantName = Sequoia Soccer — имя нового места проведения.
    • $VenueType = soccer — один из предопределенных типов мест проведения: blues, classicalmusic, dance, jazz, judo, motorracing, multipurpose, opera, rockmusic, soccer (строчными буквами, без пробелов).
    • Задайте $DemoScenario = 2, чтобы подготовить клиент в собственной базе данных.
  2. Добавьте новую точку останова, поместив курсор в любое место в строке 57, строку, которая говорит: &$PSScriptRoot\New-TenantAndDatabase ", и нажмите клавишу F9.

    break point

  3. Запустите сценарий, нажав клавишу F5.

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

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

В этом упражнении подготавливается пакет из 17 клиентов. Рекомендуется подготовить этот пакет клиентов перед началом других руководств по Wingtip Tickets, чтобы работать с другими базами данных.

  1. В интегрированной среде сценариев PowerShell откройте файл ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 и укажите для параметра $DemoScenario новое значение 4.

    • Задайте $DemoScenario = 4, чтобы подготовить пакет клиентов в общей базе данных.
  2. Нажмите клавишу F5 для запуска скрипта.

Проверка развернутого набора клиентов

На этом этапе у вас есть клиенты, развернутые в общей базе данных, и клиенты, развернутые в собственных базах данных. С помощью портала Azure можно просмотреть созданные базы данных. На портале Azure откройте сервер tenants1-mt-<Пользователь>, перейдя к списку серверов SQL. Список баз данных SQL должен включать общую базу данных tenants1 и базы данных для клиентов, которые расположены в собственных базах данных.

Screenshot of the tenants1-mt-USER server Overview page that highlights the databases.

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

Использование страницы концентратора событий Wingtip Tickets

Откройте страницу концентратора событий в браузере (http:events.wingtip-mt.<Пользователь>.trafficmanager.net).

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

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

  • Представление SQL содержится в базе данных tenantcatalog.
  • Имя клиента хранится в таблице клиентов.
  • Имя базы данных хранится в таблицах управления сегментами.
  1. В SQL Server Management Studio (SSMS) подключитесь к серверу арендаторов по адресу catalog-mt.<ПОЛЬЗОВАТЕЛЬ>.database.windows.net, указав в для входа имя developer и пароль P@ssword1

    SSMS connection dialog

  2. В обозревателе объектов SSMS перейдите к представлениям в базе данных tenantcatalog.

  3. Щелкните правой кнопкой мыши представление TenantsExtended и выберите "Выбрать первые 1000 строк". Обратите внимание на сопоставление имени клиента и базы данных для разных клиентов.

    ExtendedTenants view in SSMS

Другие шаблоны подготовки

В этом разделе приведены другие интересные шаблоны подготовки.

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

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

Автоматическая подготовка

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

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

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

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

Из этого руководства вы узнали, как выполнять такие задачи:

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

Ознакомьтесь с руководством по мониторингу производительности.