Управление версиями BLOB-объекта

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

Версионирование BLOB-объектов является частью комплексной стратегии защиты данных BLOB-объектов. Для оптимальной защиты данных BLOB-объектов Майкрософт рекомендует включить все следующие функции защиты данных:

Дополнительные сведения о рекомендациях Майкрософт по защите данных см. в разделе Обзор защиты данных.

Внимание

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

Как работает версионирование BLOB-объектов

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

Идентификатор версии может определять текущую или предыдущую версию. У блоба может быть только одна текущая версия.

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

На рисунке ниже показана схема создания версий при операциях записи и повышения уровня предыдущей версии до текущей.

Диаграмма, показывающая, как работает версионирование blob-объектов

Внимание

Наличие большого количества версий блобов может привести к увеличению задержки операций по перечислению блобов. Майкрософт рекомендует поддерживать менее 1000 версий для каждого объекта blob. Для автоматического удаления старых версий можно использовать управление жизненным циклом. Дополнительные сведения об управлении жизненным циклом см. в разделе Оптимизация затрат путем автоматизации уровней доступа Хранилище BLOB-объектов Azure.

Версии BLOB-объектов неизменяемы. Невозможно изменить содержимое или метаданные существующей версии блоба.

Управление версиями BLOB-объектов доступно для стандартных учетных записей хранения общего назначения версии 2, учетных записей хранения блочных BLOB-объектов уровня "Премиум" и учетных записей хранения BLOB-объектов прежних версий. Учетные записи хранения с иерархическим пространством имен, включенным для использования с Azure Data Lake Storage, в настоящее время не поддерживаются.

Версия 2019-10-10 и выше REST API служба хранилища Azure поддерживает версионирование BLOB-объектов.

Внимание

Управление версиями BLOB-объектов не поможет при восстановлении после случайного удаления учетной записи хранения или контейнера. Чтобы предотвратить случайное удаление учетной записи хранения, настройте блокировку в ресурсе учетной записи хранения. Дополнительные сведения о блокировке учетной записи хранения см. в статье Применение блокировки Azure Resource Manager к учетной записи хранилища.

Идентификатор версии

Каждая версия BLOB-объекта определяется по уникальному идентификатору версии. Значение идентификатора версии — это метка времени обновления BLOB-объекта. Идентификатор версии назначается при создании версии.

Можно выполнять операции чтения или удаления определенной версии объекта BLOB, указав ее идентификатор версии. Если не указать идентификатор версии, операция выполняется с текущей версией.

При вызове операции записи для создания или изменения объекта BLOB служба хранилища Azure возвращает заголовок x-ms-version-id в ответе. Этот заголовок содержит идентификатор версии текущего объекта BLOB, созданного в результате операции записи.

Идентификатор версии остается неизменным в течение времени существования версии.

Управление версиями при операциях записи

При включении управления версиями BLOB-объектов каждая операция записи в BLOB-объект создает новую версию. Операции записи могут быть следующие: Разместить BLOB-объект, Разместить список блоков, Копировать BLOB-объект и Задать метаданные BLOB-объекта.

Если операция записи создает новый BLOB, то он является текущей версией этого BLOB. Если при операции записи изменяется существующий BLOB-объект, текущая версия становится предыдущей, а для фиксации обновленного BLOB-объекта создается новая текущая версия.

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

Схема, показывающая, как операции записи влияют на BLOB-объекты с версиями.

Примечание.

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

Если управление версиями BLOB-объектов включено для учетной записи хранения, все операции записи в блочных BLOB-объектах активируют создание новой версии, за исключением операции Put Block .

Для страничных и добавочных BLOB-объектов только подмножество операций записи запускает создание версии. Эти операции включают следующие:

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

Все версии BLOB-объекта должны иметь один и тот же тип BLOB-объекта. Если большой двоичный объект имеет предыдущие версии, вы не можете перезаписать большой двоичный объект одного типа с другим типом, если вы не удалите большой двоичный объект и все его версии.

Управление версиями при операциях удаления

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

На следующей схеме показан результат выполнения операции удаления BLOB-объекта с управлением версиями.

Диаграмма, показывающая удаление версионного блоба.

Чтобы удалить определенную версию BLOB-объекта, укажите идентификатор этой версии в операции удаления. Если для учетной записи хранения также включено мягкое удаление BLOB-объектов, версия сохраняется в системе до тех пор, пока не истечет срок хранения мягкого удаления.

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

Схема восстановления версионированного BLOB после удаления.

Уровни доступа

Вы можете переместить любую версию блочного BLOB-объекта, включая текущую версию, в другой уровень доступа к BLOB-объекту, выполнив операцию Установить уровень BLOB-объекта. Вы можете сэкономить на стоимости хранения данных, перемещая более старые версии BLOB-объектов на холодный или архивный уровень. Дополнительные сведения см. в разделе "Горячий", "Промежуточный", "Холодный" и "Архивный" уровни доступа для данных BLOB-объектов.

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

Включение или выключение управления версиями BLOB-объектов

Сведения о включении или выключении управления версиями BLOB-объектов см. в разделе Включение версий BLOB-объектов и управление ими.

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

После отключения управления версиями изменение текущей версии создает большой двоичный объект, который не является версией. Все последующие обновления <объекта 'blob'> перезаписывают данные объекта без сохранения предыдущего состояния. Все существующие версии сохраняются как предыдущие.

Вы можете читать или удалять версии с помощью идентификатора версии после отключения управления версиями. Вы также можете вывести список версий объектов BLOB после отключения управления версиями.

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

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

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

Управление версиями BLOB-объектов и обратимое удаление

Управление версиями объектов BLOB и мягкое удаление объектов BLOB являются частью рекомендуемой конфигурации защиты данных для учетных записей хранения. Дополнительные сведения о рекомендациях Майкрософт по защите данных см. в разделе recommended data protection configuration в этой статье и Data protection overview.

Перезапись BLOB-объекта

Если для блобов в учетной записи хранения включены версионирование и мягкое удаление, то при перезаписи блоба автоматически создается новая версия. Новая версия не подвергается обратимому удалению и не удаляется по истечении периода хранения для обратимого удаления. "Мягко удалённые моментальные снимки не создаются."

Удаление BLOB-объекта или версии

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

Условное удаление предоставляет дополнительную защиту при удалении версий BLOB-объектов. При удалении предыдущей версии BLOB-объекта эта версия становится мягко удаленной. Обратимо удаленная версия сохраняется до тех пор, пока срок хранения обратимого удаления не истек, в какой момент он окончательно удаляется.

Чтобы удалить предыдущую версию BLOB-объекта, вызовите операцию Delete Blob (Удаление BLOB-объекта) и укажите идентификатор версии.

На следующей схеме показано, что происходит при удалении BLOB-объекта или его версии.

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

Восстановление временно удаленной версии

Для восстановления обратимо удаленных версий в течение периода хранения данных с возможностью восстановления можно использовать операцию Undelete Blob. Операция Отменить удаление BLOB-объекта всегда восстанавливает все мягко удаленные версии. Восстановить только одну мягко удаленную версию невозможно.

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

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

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

По истечении периода хранения обратимого удаления все обратимо удаленные версии BLOB-объектов удаляются без возможности восстановления.

Управление версиями BLOB-объектов и моментальные снимки BLOB-объектов

Моментальный снимок Blob-объекта — это копия Blob-объекта, которая является доступной только для чтения и сделана в определенный момент времени. Моментальные снимки BLOB-объектов и версии BLOB-объектов похожи, но моментальный снимок создается вручную вами или вашим приложением, а версия BLOB-объекта создается автоматически при операции записи или удаления, если для вашей учетной записи хранения включено версионирование BLOB-объектов.

Внимание

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

Сделать снимок BLOB-объекта при включенном управлении версиями

Хотя это не рекомендуется, можно создать снимок BLOB-объекта, который также имеет версии. Если вы не можете обновить приложение, чтобы прекратить создание моментальных снимков больших двоичных объектов при включении управления версиями, приложение может поддерживать как моментальные снимки, так и версии.

При создании моментального снимка версированного BLOB-объекта одновременно создается новая версия. При создании моментального снимка также создается новая текущая версия.

На следующей схеме показано, что происходит при создании снимка состояния версированного BLOB-объекта. На схеме версии BLOB и снапшоты с идентификаторами версии 2 и 3 содержат идентичные данные.

Схема, показывающая версии BLOB.

Авторизация операций в версиях BLOB-объектов

Вы можете авторизовать доступ к версиям объектов BLOB, воспользовавшись одним из следующих подходов.

  • Управление доступом на основе ролей Azure (Azure RBAC) используется, чтобы предоставить разрешения объекту безопасности Microsoft Entra. Майкрософт рекомендует использовать Microsoft Entra ID для обеспечения повышенной безопасности и простоты использования. Дополнительные сведения об использовании Microsoft Entra ID с операциями больших двоичных объектов см. в разделе Authorize access to data in служба хранилища Azure.
  • С помощью подписанного URL-адреса (SAS) для делегирования доступа к версиям BLOB-объектов. Укажите идентификатор версии для подписанного типа ресурса bv, представляющего версию BLOB-объекта, чтобы создать маркер SAS для операций в определенной версии. Дополнительные сведения о сигнатурах общего доступа (SAS) см. в статье Grant limited access to служба хранилища Azure resources using shared access signatures (SAS).
  • С помощью ключей доступа к учетной записи для авторизации операций с версиями BLOB-объектов с общим ключом. Дополнительные сведения см. в статье Авторизация с помощью общего ключа.

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

Действие RBAC в Azure для удаления версии BLOB

В следующей таблице показано, какие действия Azure RBAC разрешают удаление BLOB или версии BLOB.

Описание Операция службы BLOB Требуются действия с данными в Azure RBAC поддержка встроенных ролей Azure
Удаление текущей версии Удалить Blob Майкрософт.Storage/storageAccounts/blobServices/containers/blobs/delete Участник данных хранилища BLOB-объектов
Удаление предыдущей версии Удалить Blob Майкрософт.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action Владелец данных хранилища BLOB-объектов

Параметры общей подписи доступа (SAS)

Подписанный ресурс для версии BLOB — bv. Дополнительные сведения см. в статьях Создание службы SAS или Создание SAS для делегирования пользователей.

В следующей таблице показано разрешение, необходимое для удаления версии BLOB-объекта на SAS.

Разрешение Символ URI Разрешенные операции
Удалить x Удалите версию BLOB.

Цены и выставление счетов

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

Оплата за версии BLOB-объектов, такие как моментальные снимки, производится по той же ставке, что и активные данные. То, как осуществляется оплата версий, зависит от того, был ли явно задан уровень для текущих или предыдущих версий BLOB (или моментальных снимков). Дополнительные сведения о уровнях доступа к BLOB-объектам см. в разделе «Горячий», «Прохладный», «Холодный» и «Архивный» для данных BLOB-объектов.

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

Если вы изменили уровень BLOB или версии, счет выставляется за весь объект, независимо от того, находятся ли в итоге BLOB и версия снова в том же уровне. Дополнительные сведения см. в разделе Выставление счетов при явном задании уровня BLOB-объекта.

Примечание.

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

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

Дополнительные сведения о выставлении счетов за моментальные снимки BLOB-объектов см. в разделе Моментальные снимки BLOB-объектов.

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

Выставление счетов, если уровень BLOB-объекта не установлен явно

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

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

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

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

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

Сценарий 1

В сценарии 1 BLOB-объект имеет предыдущую версию. Объект BLOB не был обновлен с момента создания версии, поэтому плата взимается только за уникальные блоки 1, 2 и 3.

На диаграмме 1 показан учет уникальных блоков в базовом BLOB-объекте и предыдущей версии.

Сценарий 2

В сценарии 2 один блок (блок 3 на схеме) в BLOB был обновлён. Несмотря на то, что обновленный блок содержит те же данные и тот же идентификатор, он не совпадает с блоком 3 в предыдущей версии. В результате плата в учетной записи взимается за четыре блока.

На схеме 2 показано выставление счетов за уникальные блоки в базовом BLOB-объекте и предыдущей версии.

Сценарий 3

В сценарии 3 большой двоичный объект был обновлен, но версия не была обновлена. Блок 3 был заменен блоком 4 в текущей версии БЛОБа, но предыдущая версия по-прежнему отражает блок 3. В результате плата в учетной записи взимается за четыре блока.

На схеме 3 показано выставление счетов за уникальные блоки в базовом BLOB-объекте и предыдущей версии.

Сценарий 4

В сценарии 4 текущая версия полностью обновлена и не содержит ни одного из первоначальных блоков. В результате учетная запись взимается за все восемь уникальных блоков — четыре в текущей версии и четыре объединенных в двух предыдущих версиях. Этот сценарий может произойти, если вы записываете в BLOB с использованием операции Put Blob, так как она заменяет все содержимое BLOB.

На схеме 4 показано выставление счетов за уникальные блоки в базовом BLOB-объекте и предыдущей версии.

Выставление счетов при явном задании уровня BLOB-объекта

Если вы явно настроили уровень блоб-хранилища для большого двоичного объекта или версии (или моментального снимка), то взимается плата за полную длину содержимого объекта на новом уровне независимо от того, разделяет ли он блоки с объектом в исходном уровне. C вас также взимается плата за полный объем содержимого старейшей версии на изначальном уровне. За предыдущие версии или снимки, остающиеся на исходном уровне хранения, взимается плата за уникальные блоки, которые они могут использовать совместно, как описано в разделе Выставление счетов, если уровень BLOB не задан явно.

Перемещение BLOB-объекта на новый уровень

В следующей таблице описывается платежное поведение для BLOB или его версии при переносе на новый уровень.

Если уровень BLOB-объекта задан... Тогда вам выставляются счета за...
явно указав на текущую или предыдущую версию. Полная длина содержимого этой версии. Версии, для которых уровень не установлен явно, оплачиваются только за уникальные блоки.1
Архивировать Полная длина содержимого всех версий и моментальных снимков. 1.

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

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

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

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

Операции, которые явно задают уровень для BLOB-объекта, версии или моментального снимка:

Удаление BLOB-объекта при включенном мягком удалении

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

Поддержка функций

Поддержка этой функции может повлиять на включение протокола Data Lake Storage 2-го поколения, сетевой файловой системы (NFS) 3.0 или протокола SSH-передачи файлов (SFTP). Если вы включили любую из этих возможностей, ознакомьтесь с поддержкой функций Хранилище BLOB-объектов в учетных записях служба хранилища Azure для оценки поддержки этой функции.

Управление версиями не поддерживается для объектов BLOB, загруженных с помощью API Data Lake Storage.

См. также