Обзор Azure Well-Architected Framework — Azure Cosmos DB для NoSQL

В этой статье описаны рекомендации по Azure Cosmos DB для NoSQL. Эти рекомендации позволяют развертывать решения в Azure Cosmos DB, которые являются эффективными, надежными, безопасными, оптимизированными для затрат и эксплуатации. В этом руководстве рассматриваются пять основных принципов архитектуры в рамках хорошо спроектированной платформы:

В этом руководстве предполагается, что у вас есть рабочие знания о Azure Cosmos DB и хорошо знакомы с ее функциями. Дополнительные сведения см. в статье Azure Cosmos DB для NoSQL.

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

Общие сведения о принципах хорошо спроектированной платформы могут помочь в создании высококачественной, стабильной и эффективной облачной архитектуры. Мы рекомендуем начать с проверки рабочей нагрузки с помощью оценки проверки платформы Azure Well-Architected Framework.

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

Надежность

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

Контрольный список проектирования

  • Рассмотрим, как выбранный уровень согласованности и режим реплика влияет на целевую точку восстановления (RPO) в пределах региона.
  • Создайте развертывание учетной записи базы данных, чтобы она охватывала по крайней мере два региона в Azure. Кроме того, распределяйте свою учетную запись между несколькими зонами доступности, если они предлагаются в вашем регионе Azure.
  • Оцените стратегии записи с несколькими регионами и одним регионом для рабочей нагрузки. Для записи в одном регионе создайте рабочую нагрузку, чтобы иметь по крайней мере второй регион чтения для отработки отказа. Включите автоматическую отработку отказа для сценариев чтения с одним регионом и несколькими регионами. Для записи в нескольких регионах сравните компромиссы в сложности и согласованности с преимуществами записи в несколько регионов. Просмотрите ожидания во время регионального сбоя для учетных записей с одним регионом и несколькими регионами.
  • Включите отработку отказа, управляемой службой, для учетной записи.
  • Создайте комплексный тест высокой доступности для приложения.
  • Ознакомьтесь с общими процессами резервного копирования, включая, но не ограничено; восстановление на определенный момент времени, восстановление от случайных разрушительных операций, восстановление удаленных ресурсов и восстановление в другом регионе в определенный момент времени. Настройте учетную запись с непрерывным резервным копированием, выбрав соответствующий период хранения на основе бизнес-требований.
  • Изучите руководство по проектированию устойчивых приложений, просмотрите политику повторных попыток по умолчанию для пакетов SDK и запланируйте настраиваемую обработку для конкретных временных ошибок. В этих руководствах приведены рекомендации по обеспечению устойчивости кода приложения к временным ошибкам.

Рекомендации

Рекомендация Преимущества
Распределите учетную запись Azure Cosmos DB между зонами доступности (если она доступна). Зоны доступности обеспечивают различные возможности питания, сети и охлаждения изолируют аппаратные сбои в подмножестве реплика. Azure Cosmos DB имеет несколько реплика, охватывающих одну случайную зону доступности, если функция зон доступности не используется. Если используется функция зоны доступности, реплика охватывает несколько зон доступности.
Настройте учетную запись Azure Cosmos DB, чтобы охватывать по крайней мере два региона. Охватывая несколько регионов, ваша учетная запись не может быть полностью недоступна, если произошел сбой изолированного региона.
Включите отработку отказа, управляемой службой, для учетной записи. Отработка отказа, управляемой службой, позволяет Azure Cosmos DB изменить область записи учетной записи с несколькими регионами, чтобы сохранить доступность. Это изменение происходит без взаимодействия с пользователем. Сведения о компромиссах с отработкой отказа, управляемой службой, и планирование принудительной отработки отказа при необходимости. Дополнительные сведения см. в статье о создании высокодоступных приложений.
Проверка доступности путем тестирования отработки отказа вручную с помощью временной отработки отказа, управляемой службой. Временное отключение отработки отказа управления службами позволяет проверить сквозную высокую доступность приложения с помощью ручной отработки отказа, запущенной с помощью скрипта или портал Azure. После этого можно повторно включить отработку отказа, управляемой службой.

Определения политики Azure

Безопасность

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

Контрольный список проектирования

Рекомендации

Рекомендация Преимущества
Реализуйте как минимум базовые показатели безопасности защиты данных и управления удостоверениями. Ознакомьтесь с базовыми показателями безопасности, включая управление удостоверениями и защиту данных. Реализуйте рекомендации для защиты учетной записи Azure Cosmos DB.
Отключите общедоступные конечные точки и по возможности используйте частные конечные точки. Избегайте ненужных или неиспользуемых общедоступных конечных точек, доступных для атак поверхностной области в вашей учетной записи.
Используйте управление доступом на основе ролей, чтобы ограничить доступ на уровне управления определенным удостоверениям и группам и в область четко определенных назначений. Используйте управление доступом на основе ролей для предотвращения непреднамеренного доступа к учетной записи. Назначьте соответствующие роли и разрешения пользователям или приложениям, обращаюющимся к Azure Cosmos DB.
Создайте конечные точки и правила виртуальной сети, чтобы ограничить доступ к учетной записи. Реализуйте конечные точки службы виртуальной сети и правила брандмауэра, чтобы ограничить доступ к учетной записи Azure Cosmos DB. Используйте группы безопасности сети (NSG), чтобы контролировать входящий и исходящий трафик из ресурсов Azure Cosmos DB. Ограничение доступа к доверенным сетям и применение соответствующих мер безопасности сети помогает защитить данные от несанкционированного доступа.
Следуйте рекомендациям по разработке программного обеспечения для безопасного доступа к данным. Следуйте рекомендациям по безопасному написанию кода и выполняйте безопасные проверки кода при разработке приложений, взаимодействующих с Azure Cosmos DB. Защита от распространенных уязвимостей безопасности, таких как атаки на внедрение, межсайтовые скрипты (XSS) или небезопасные прямые ссылки на объекты (IDOR). Реализуйте входную проверку, параметризованные запросы и соответствующую обработку ошибок для распространенных кодов состояния HTTP, чтобы предотвратить риски безопасности.
Отслеживайте журналы уровня управления для нарушений. Мониторинг помогает отслеживать шаблоны доступа и журналы аудита, обеспечивая безопасность и соответствие базы данных соответствующим правилам защиты данных. Мониторинг метрик плоскости данных также может помочь определить незнакомые шаблоны, которые могут выявить нарушение безопасности. Дополнительные сведения см. в списке проверка безопасности для баз данных Azure.
Включение Microsoft Defender для Azure Cosmos DB Microsoft Defender обнаруживает попытки эксплойтировать базы данных в учетной записи Azure Cosmos DB для NoSQL. Defender обнаруживает потенциальные внедрения SQL, подозрительные шаблоны доступа и другие потенциальные эксплуатации.

Определения политики Azure

Оптимизация затрат

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

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

Рекомендации

Рекомендация Преимущества
Мониторинг использования и шаблонов ЕЗ/с. Используйте метрики для мониторинга потребления единиц запросов с самого начала решения. Используйте запросы и другие методы исследования данных, чтобы найти антипаттерны в коде приложения.
Настройте политику индексирования для сопоставления с рабочей нагрузкой. Политика индексирования по умолчанию индексирует все пути в элементе, и эта политика может иметь значительное влияние на потребление и затраты на единицу запросов. Используйте политику индексирования, разработанную на основе только путей, которые необходимо индексировать для распространенных запросов. Для рабочих нагрузок с высокой нагрузкой на запись отключите автоматическое индексирование столбцов, не используемых в запросах.
Выберите ключи секции, которые идеально подходят для рабочей нагрузки. Ключ секции должен равномерно распределять потребление пропускной способности и хранилище данных между логическими секциями. Выбор также должен свести к минимуму количество несвязанных запросов между секциями. Избегайте горячих секций, получающих непропорциональное количество трафика, так как секции разбалансирования могут увеличить затраты на пропускную способность и временные ошибки. Используйте наиболее распространенные поисковые запросы, чтобы определить потенциальные ключи секции, которые, скорее всего, выполняют только односекционные или привязанные межсекционные запросы.
Используйте бессерверную или подготовленную пропускную способность, ручную подготовку или автомасштабирование на уровне базы данных или контейнера, если это подходит для рабочей нагрузки. Сравните подготовленные типы пропускной способности и выберите подходящий вариант для рабочей нагрузки. Как правило, небольшие и тестовые рабочие нагрузки могут воспользоваться бессерверной пропускной способностью или общей пропускной способностью вручную на уровне базы данных. Более крупные критически важные рабочие нагрузки могут воспользоваться подготовленной пропускной способностью, назначенной на уровне контейнера.
Настройте уровень согласованности по умолчанию для приложения. При необходимости переоградите уровень согласованности по умолчанию в клиентских сеансах. Возможно, не всегда нужно изменить стандартный уровень согласованности по умолчанию или переопределить его в сеансах клиента. Рассмотрите более высокие затраты, связанные с чтением на более строгих уровнях согласованности.
Для рабочих нагрузок разработки и тестирования используйте эмулятор Azure Cosmos DB. Эмулятор Azure Cosmos DB — это возможность разработки и тестирования и непрерывной интеграции, которая может сэкономить на затратах на эти общие рабочие нагрузки для вашей команды разработки. Эмулятор также доступен как образ контейнера Docker.
Использование транзакционных пакетных операций Проектирование секций для использования транзакционных пакетных операций в логическом ключе секции для вставки. Используйте пакетные операции в клиентских пакетах SDKS для вставки, обновления или удаления нескольких документов в одном запросе транзакции. Этот шаг может уменьшить количество отдельных запросов и в конечном итоге привести к повышению эффективности пропускной способности.
Использование проекции для снижения затрат на пропускную способность больших результирующих наборов запросов. Создание запросов только для проекта минимального количества полей, необходимых для результируемого набора. Если необходимы вычисления в полях, оцените стоимость пропускной способности выполнения этих вычислений на стороне сервера и на стороне клиента.
Избегайте использования несвязанных запросов между секциями. Оцените и создайте запросы, чтобы они искали в одной логической секции по возможности. Используйте фильтры запросов для управления логическими секциями целевых объектов запроса. Если запрос должен выполнять поиск по логическим секциям, привязывает запрос только к подмножествам логических секций вместо полной проверки.
Реализуйте срок жизни (TTL), чтобы удалить неиспользуемые элементы. Используйте TTL для автоматического удаления данных, которые больше не нужны. Управление затратами на хранение путем удаления устаревших или устаревших данных. При необходимости экспортируйте истекшие данные в решение хранилища с более низкой стоимостью.
Рассмотрим аналитическое хранилище для тяжелых агрегатов. Аналитическое хранилище Azure Cosmos DB автоматически синхронизирует данные с отдельным хранилищем столбцов для оптимизации больших агрегатов, отчетов и аналитических запросов.

Определения политики Azure

Эффективность работы

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

Контрольный список проектирования

  • Проект стратегии мониторинга журналов и метрик, чтобы различать разные рабочие нагрузки, пометить исключительные сценарии, отслеживать шаблоны в исключениях и ошибках и отслеживать производительность хост-компьютера.
  • Создавайте большие рабочие нагрузки для использования массовых операций по возможности.
  • Определите несколько оповещений для отслеживания регулирования, анализа распределения пропускной способности и отслеживания размера данных.
  • Разработайте стратегию мониторинга для обеспечения доступности решения в разных регионах.
  • Создание и применение рекомендаций по автоматизации развертывания учетной записи и ресурсов Azure Cosmos DB для NoSQL.
  • Планирование ожидаемых пороговых значений метрик на основе структуры секции и индекса. Убедитесь, что планируется отслеживать эти метрики, чтобы определить, насколько близки они к запланированным пороговым значениям.

Рекомендации

Рекомендация Преимущества
Убедитесь, что разработчики приложений используют последнюю версию пакета SDK для разработчиков. Каждый пакет SDK Azure Cosmos DB для NoSQL имеет минимальную рекомендуемую версию. Дополнительные сведения см. в пакете SDK для .NET и пакете SDK для Java.
Создайте идентификаторы в клиентском приложении, чтобы различать рабочие нагрузки. Рассмотрим флаги, такие как суффикс пользовательского агента, чтобы определить, с какой рабочей нагрузкой должна быть связана каждая запись журнала или метрика.
Захват дополнительных диагностика с помощью пакета SDK для разработчиков. Используйте методы внедрения диагностика для каждого пакета SDK, чтобы добавить дополнительные сведения о рабочей нагрузке вместе с метриками и журналами по умолчанию. Дополнительные сведения см. в пакете SDK для .NET и пакете SDK для Java.
Создание оповещений, связанных с ресурсами хост-компьютера. Подключение проблемы с доступностью и доступностью могут возникнуть из-за проблем с клиентским компьютером. Отслеживайте такие ресурсы, как ЦП, память и хранилище на хост-компьютерах с клиентскими приложениями с помощью пакетов SDK Azure Cosmos DB для NoSQL.
Используйте массовые функции клиентских пакетов SDK для больших операций. Сценарии, требующие высокой степени преимущества пропускной способности от использования массовой функции пакета SDK. Массовая функция автоматически управляет операциями и пакетными операциями для максимальной пропускной способности.
Создание оповещений для регулирования пропускной способности. Используйте оповещения для отслеживания регулирования пропускной способности за пределами ожидаемых пороговых значений. Со временем просмотрите и настройте оповещения, как вы узнаете больше о рабочей нагрузке в отношении Azure Cosmos DB. Нормализованная метрика потребления единиц запросов — это метрика, которая измеряет процентное использование подготовленной пропускной способности в базе данных или контейнере. Если эта метрика согласована с 100%, запросы, скорее всего, возвращают временную ошибку.
Отслеживание производительности запросов с помощью метрик. Используйте метрики для отслеживания производительности лучших запросов с течением времени. Оцените, есть ли эффективность, которую необходимо найти, обновив политику индексирования или изменив запросы. Если производительность запросов низка, устраняйте неполадки с производительностью и применяйте рекомендации по запросу. Дополнительные сведения см. в советах по производительности запросов.
Используйте шаблоны для автоматического развертывания ресурсов учетной записи. Рассмотрим шаблоны Azure Resource Manager, Bicep или Terraform , чтобы автоматизировать развертывание учетной записи и последующих ресурсов. Убедитесь, что ваша команда использует те же шаблоны для развертывания в других непроизводственных средах.
Отслеживайте ключевые метрики, чтобы определить распространенные проблемы в рабочей нагрузке. Используйте определенные метрики для поиска распространенных проблем в рабочей нагрузке, включая, но не только; Использование единиц запросов, использование запросов по секциям, регулированием и томам запросов по типу. Дополнительные сведения см . в справочнике по мониторингу данных.

Определения политики Azure

Оптимизация производительности

  • Определите базовые показатели производительности для приложения. Измеряйте количество одновременных пользователей и транзакций, которые может потребоваться обрабатывать. Рассмотрим характеристики рабочей нагрузки, такие как средний поток пользователя, распространенные операции и пики использования.
  • Изучите наиболее распространенные и самые сложные запросы. Определите запросы, использующие несколько подстановок, соединений или агрегатов. Рассмотрите эти запросы в любых рекомендациях по проектированию для ключа секции или политики индексирования.
  • Для наиболее распространенных запросов определите количество ожидаемых результатов на страницу. Это число поможет формализовать число буферизованного элемента для предварительно подготовленных результатов.
  • Исследование целевых пользователей. Определите, какие регионы Azure ближе всего к ним.
  • Определите запросы, использующие одно или несколько полей упорядочения. Кроме того, определите операции, влияющие на несколько полей. Включите эти поля явным образом в структуру политики индексирования.
  • Элементы конструктора, чтобы соответствующие документы JSON были как можно меньше. При необходимости разбиение данных между несколькими элементами.
  • Определите запросы на дочерние массивы и определите, являются ли они кандидатами на более эффективные вложенные запросы.
  • Определите, требуется ли для рабочей нагрузки аналитическое хранилище. Рассмотрим аналитические хранилища и службы, такие как Azure Synapse Link , для чрезвычайно сложных запросов.
Рекомендация Преимущества
Настройте пропускную способность на основе базовых показателей производительности. Используйте такие средства, как калькулятор емкости, чтобы определить объем пропускной способности, необходимый для базовой конфигурации производительности. Используйте такие функции, как автомасштабирование , чтобы масштабировать фактическую пропускную способность для более тесного сопоставления фактической рабочей нагрузки. Отслеживайте фактическое потребление пропускной способности после этого и внесите корректировки.
При необходимости используйте методы оптимизации на стороне клиента и сервера. Воспользуйтесь встроенным интегрированным кэшем. Настройте пакет SDK для управления предварительной выборкой (буферизацией) и возвратом для каждой страницы.
Разверните Azure Cosmos DB для NoSQL в регионах, ближайших к конечным пользователям. Уменьшите задержку, развернув Azure Cosmos DB для NoSQL в регионы, ближайшие к конечным пользователям, как можно больше. Воспользуйтесь преимуществами чтения реплика для обеспечения производительности чтения независимо от того, как настроить запись (один или несколько регионов). Настройте пакет SDK для Java для .NET/, чтобы предпочесть регионы ближе к конечному пользователю.
Настройте пакет SDK для режима Direct. Прямой режим — это предпочтительный вариант для оптимальной производительности. Этот режим позволяет клиенту открывать TCP-подключения непосредственно к секциям в службе и отправлять запросы напрямую без промежуточного шлюза. Этот режим обеспечивает более высокую производительность, так как количество сетевых прыжков меньше.
Отключите индексирование для массовых операций. Если существует много операций вставки, замены или upsert, отключите индексирование, чтобы повысить скорость операции при использовании массовой поддержки соответствующего пакета SDK. Индексирование может быть немедленно восстановлено позже.
Создайте составные индексы для полей, используемых в сложных операциях. Составные индексы могут повысить эффективность операций с несколькими полями по порядкам величины. Во многих случаях используйте составные индексы для ORDER BY инструкций с несколькими полями.
Оптимизируйте клиентские компьютеры узла для пакетов SDK. В большинстве случаев используйте по крайней мере 4-ядра и 8 ГБ памяти на 64-гб узлов с помощью пакетов SDK (Java.NET/). Кроме того, включите ускоренную сеть на хост-компьютерах.
Используйте шаблон singleton для CosmosClient класса в большинстве пакетов SDK. Используйте клиентский класс в большинстве пакетов SDK в качестве одного. Класс клиента управляет собственным жизненным циклом и предназначен для удаления. Постоянное создание и удаление экземпляров может привести к снижению производительности.
Размер элемента меньше 100 КБ. Более крупные элементы используют большую пропускную способность для распространенных операций чтения и записи. Запросы на более крупные элементы, которые проектирует все поля, также могут иметь значительные затраты на пропускную способность.
Используйте вложенные запросы стратегически для оптимизации запросов, которые объединяют большие наборы данных. Запросы, присоединенные к дочерним массивам, могут увеличить сложность, если задействовано несколько массивов и не фильтруются. Например, запрос, который объединяет более двух массивов по крайней мере 10 элементов, каждый из которых может расшириться до 1000+ кортежей. Оптимизируйте выражения самосоединения с помощью вложенных запросов для фильтрации массивов перед присоединением массивов в элементе. Для запросов между секциями оптимизируйте запрос, чтобы включить фильтр в ключ секции, чтобы оптимизировать маршрутизацию запроса до минимального количества секций.
Используйте аналитические рабочие нагрузки для наиболее сложных запросов. Если вы выполняете частые агрегаты или присоединяете запросы к большим контейнерам, рассмотрите возможность включения аналитического хранилища и выполнения запросов в Azure Synapse Analytics.

Определения политики Azure

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

Рассмотрим дополнительные ресурсы, связанные с Azure Cosmos DB для NoSQL.

Руководство по Центру архитектуры Azure

Руководство по Cloud Adoption Framework

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