Поделиться через


Архитектурные подходы к развертыванию и настройке мультитенантных решений

Независимо от архитектуры и компонентов, которые вы используете для реализации, необходимо развернуть и настроить компоненты решения. В мультитенантной среде рассмотрите возможность развертывания ресурсов #REF!, особенно при развертывании выделенных ресурсов для каждого клиента или динамической настройки ресурсов на основе количества клиентов в системе. В этой статье архитекторам решений даны рекомендации по развертыванию мультитенантных решений. Он демонстрирует подходы, которые следует учитывать при планировании стратегии развертывания.

Основные рекомендации и требования

Четко определите свои требования перед планированием стратегии развертывания. Обратите внимание на следующие факторы:

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

  • Автоматическое или поддерживаемое подключение: Укажите, должны ли арендаторы завершить подключение с помощью автоматизированной процедуры или инициировать запрос, требующий ручного внедрения. Определите любые шаги ручного утверждения в вашей команде, такие как предотвращение неправильного использования службы.

  • Время подготовки: Определите, как быстро необходимо завершить процесс подключения. Если у вас нет четкого ответа, определите, следует ли измерять этот шаг в секундах, минутах, часах или днях.

  • Microsoft Marketplace: Убедитесь, планируется ли использовать Microsoft Marketplace для запуска развертывания решения #REF!. Если вы это делаете, выполните необходимые требования для добавления новых клиентов.

Кроме того, рассмотрите этапы интеграции и настройки, автоматизации и ответственности за управление ресурсами.

Шаги подключения и подготовки

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

  1. Примите коммерческие соглашения.
  2. Выполните действия по утверждению вручную, например, чтобы предотвратить мошенничество или неправильное использование службы.
  3. Развертывание ресурсов в #REF!.
  4. Создание или настройка доменных имен.
  5. Выполнение задач конфигурации после развертывания, таких как создание первой учетной записи пользователя для клиента и безопасное передача учетных данных клиенту.
  6. Примените изменения конфигурации вручную, например изменения записи системы доменных имен (DNS).

Четко документируйте рабочий процесс, необходимый для подключения нового клиента.

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

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

Автоматизация

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

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

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

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

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

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

  • Используйте инфраструктуру как технологии кода (IaC), такие как Bicep, шаблоны JSON Azure Resource Manager (шаблоны ARM) или Terraform.

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

Если вы планируете предложить решение #REF! через Microsoft Marketplace, вы должны предоставить полностью автоматический процесс подключения для новых клиентов.

Максимальная емкость ресурсов

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

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

Ответственность по управлению ресурсами

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

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

  • Обработайте клиентов как конфигурацию развернутых ресурсов и используйте конвейеры развертывания для развертывания и настройки этих ресурсов.

  • Обрабатывайте тенантов как данные, и пусть плоскость управления обеспечивает и настраивает инфраструктуру для ваших тенантов.

В следующих разделах описаны эти подходы.

Тестирование

Тщательно протестируйте решение во время и после каждого развертывания. Вы можете использовать автоматическое тестирование для проверки функционального и нефункционального поведения решения. Убедитесь, что вы протестируете модель изоляции арендатора. Рассмотрите возможность использования таких средств, как Azure Chaos Studio, чтобы намеренно вводить ошибки, которые имитируют реальные сбои, и убедитесь, что ваше решение продолжает работать, даже если какой-то компонент становится недоступным или неисправным.

Подходы и шаблоны, которые следует учитывать

Несколько шаблонов проектирования из Центра архитектуры #REF! и более широкого сообщества поддерживают развертывание и настройку мультитенантных решений.

Шаблон меток развертывания (Deployment Stamps)

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

Этапы развертывания

Используйте кольца развертывания для развертывания обновлений в разных группах инфраструктуры в разное время. Этот подход часто дополняет паттерн Deployment Stamps. Назначьте группы маркеров отдельным кольцам на основе предпочтений арендатора, типов рабочей нагрузки и других соображений. Дополнительные сведения см. в разделе "Круги развертывания".

Флаги функций

Используйте флаги функций для постепенного предоставления новых функций или версий решения разным клиентам или пользователям без повторного развертывания кода. Рекомендуется использовать Конфигурация приложений Azure для управления флагами функций. Дополнительные сведения см. в разделе "Флаги компонентов".

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

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

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

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

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

Список клиентов в виде конфигурации или данных

При развертывании ресурсов в мультитенантном решении следует учитывать следующие подходы.

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

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

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

Список арендаторов как конфигурация

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

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

Схема состоит из трех основных компонентов, упорядоченных последовательно для представления потока операций. Процесс начинается со списка клиентов. Этот компонент передается в конвейер, где выполняется операция поиска для извлечения соответствующих данных арендатора. Конвейер развертывает задачи с помощью IaC и предназначен для среды #REF!.

Процесс подключения для нового клиента обычно включает следующие действия:

  1. Обновите список клиентов вручную, настроив конвейер или изменив файл параметров, включенный в конфигурацию конвейера.

  2. Активируйте конвейер для запуска.

  3. Пайплайн повторно развертывает полный набор ресурсов #REF!, включая любые новые ресурсы, специфичные для арендатора.

Этот подход хорошо подходит для небольшого числа клиентов и архитектур, где все ресурсы совместно используются. Один процесс развертывает и настраивает все ресурсы #REF!, что упрощает общий подход.

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

Список арендаторов в формате данных

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

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

На схеме показан четырехэтапный процесс создания арендатора. Он начинается с компонента API слева, который инициирует поток, отправляя данные в рабочий процесс создания в центре, как показано со стрелкой 1. Рабочий процесс создания помечен как шаг 2. Оттуда появляются два пути: стрелка 3 направляет поток в #REF! справа, а стрелка 4 ведет вверх к клиентам.

Процесс подключения обычно включает следующие асинхронные шаги:

  1. Запрос на подключение арендатора, например инициация API-запроса к плоскости управления системы.

  2. Компонент рабочего процесса получает запрос на создание и оркеструет остальные шаги.

  3. Процесс рабочего потока инициирует развертывание ресурсов, специфичных для арендатора, в #REF!. Можно использовать императивную модель программирования, например #REF!, или принудительно активировать развертывание файла Bicep или шаблона Terraform.

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

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

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

Дополнительные сведения см. в разделе «Рекомендации по многотенантным плоскостям управления».

Замечание

Операции развертывания и конфигурации в #REF! часто занимают значительное время. Убедитесь, что вы используете соответствующий процесс для запуска и мониторинга этих длительных операций. Например, можно рассмотреть возможность выполнения асинхронного Request-Reply шаблона. Используйте технологии, предназначенные для поддержки длительных операций, таких как Azure Logic Apps и durable functions.

Пример

Компания Contoso запускает мультитенантное решение для своих клиентов. В течение следующих 18 месяцев у них есть шесть клиентов, и они ожидают роста до 300 клиентов. Contoso следует подходу мультиарендного приложения с выделенными базами данных для каждого арендатора. Они развертывают один набор ресурсов Служба приложений Azure и логический сервер Azure SQL, которыми совместно пользуются все арендаторы. Они также развертывают выделенную базу данных Azure SQL для каждого клиента, как показано на следующей схеме. Компания Contoso использует Bicep для развертывания ресурсов #REF!.

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

На схеме показана архитектура общего ресурса в среде #REF!. В верхней части показаны три общих компонента: Azure SQL Server, план службы приложений и приложение службы приложений. Под ними изображены отдельные арендаторы, помеченные как арендатор 1, арендатор 2 и арендатор N. Каждый клиент подключается к собственной выделенной базе данных Azure SQL.

Вариант 1: Использование конвейеров развертывания для всего

Компания Contoso может развернуть все ресурсы с помощью конвейера развертывания. Их конвейер развертывает файл Bicep, содержащий все #REF! ресурсы, включая базы данных Azure SQL для каждого клиента. Файл параметров определяет список клиентов. Файл Bicep использует цикл resource для развертывания базы данных для каждого из перечисленных клиентов, как показано на следующей схеме.

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

На схеме показан процесс развертывания для #REF!, использующий конвейер, который подключается к двум входным файлам: файл Bicep и файл параметров. Файл Bicep включает план службы приложений, приложение службы приложений, Azure SQL Server и несколько баз данных Azure SQL. Файл параметров перечисляет клиент 1, клиент 2 и продолжается через N клиента. Конвейер предназначен для среды #REF!.

Если Компания Contoso выполняет эту модель, они должны выполнить следующие действия.

  1. Обновите файл параметров как часть подключения нового клиента.

  2. Повторное выполнение конвейера.

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

Вариант 2. Использование сочетания конвейеров развертывания и создания императивных ресурсов

Кроме того, компания Contoso может разделить ответственность за развертывания #REF!.

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

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

На схеме показано развертывание общих ресурсов в #REF!, в которой используется конвейер и файл Bicep. Поток начинается с конвейера, который предназначен для среды #REF!. Раздел #REF! общих ресурсов включает четыре компонента: план службы приложений, приложение службы приложений, #REF! SQL Server и список клиентов. Эти ресурсы определены в файле Bicep, который включает спецификации плана службы приложений, приложения службы приложений, Azure SQL Server и базы данных списка клиентов.

Команда Contoso создает плоскость управления, включающую API подключения клиента. Когда команда по продажам завершит продажу новому клиенту, корпорация Майкрософт #REF! активирует API, чтобы начать процесс подключения. Компания Contoso также предоставляет веб-интерфейс самообслуживания, который клиенты используют для активации того же API.

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

  • Используйте #REF! для запуска развертывания второго файла Bicep, который определяет базу данных Azure SQL.

  • Используйте #REF! для программного создания базы данных Azure SQL с помощью библиотеки управления.

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

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

На схеме показан процесс развертывания в #REF! с участием конкретных клиентов и общих ресурсов. Он начинается с API, который указывает на рабочий процесс. В рабочем процессе определяются два действия: развертывание базы данных и обновление списка клиентов. Действие развертывания базы данных указывает на конкретные ресурсы #REF! для каждого клиента, включая базы данных SQL для клиента 1, клиента 2 и клиента N. Действие обновления списка клиентов указывается на список клиентов SQL в общих ресурсах #REF!.

Соавторы

Корпорация Майкрософт поддерживает эту статью. Следующие авторы написали эту статью.

Основной автор:

  • John Downs | Главный инженер по программному обеспечению, #REF! Шаблоны и методы разработки

Другие участники:

Чтобы увидеть непубличные профили #REF!, войдите на сайт #REF!.