Руководство по созданию высокодоступного приложения с помощью хранилища BLOB-объектов
Это руководство представляет первую часть цикла. В нем вы узнаете, как обеспечить высокую доступность данных приложений в Azure.
Когда вы выполните приведенные здесь инструкции, у вас будет консольное приложение, которое передает и извлекает BLOB-объекты из учетной записи хранения геоизбыточного между зонами хранилища с доступом на чтение (RA-GZRS).
Геоизбыточность между зонами означает, что служба хранилища Azure асинхронно реплицирует транзакции из основного региона в дополнительный, которые разделены несколькими сотнями километров. Репликация гарантирует, что данные в дополнительном регионе согласованы в конечном счете. Консольное приложение использует шаблон автоматического выключения, чтобы определить, к какой конечной точке подключаться, выполняя автоматическое переключение между конечными точками в результате имитации сбоев и операций восстановления.
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
В первой части цикла вы узнаете, как выполнять такие задачи:
- Создание учетной записи хранилища
- Задание строки подключения
- Запуск консольного приложения
Необходимые компоненты
Для работы с этим руководством:
Установите Visual Studio 2022 с рабочей нагрузкой Разработка для Azure.
Войдите на портал Azure
Войдите на портал Azure.
Создание учетной записи хранилища
Учетная запись хранения предоставляет уникальное пространство имен для хранения ваших объектов данных в службе хранилища Azure и доступа к ним.
Выполните следующие действия, чтобы создать учетную запись хранения геоизбыточного между зонами хранилища (RA-GZRS) с доступом на чтение.
Нажмите кнопку Создать ресурс на портале Azure.
Выберите Учетная запись хранения — BLOB-объект, файл, таблица, очередь на странице Новый.
Заполните форму учетной записи хранения следующей информацией, как показано в изображении ниже, и нажмите кнопку Создать:
Параметр Пример значения Description Подписка Моя подписка Дополнительные сведения о подписках см. здесь. ResourceGroup myResourceGroup Допустимые имена групп ресурсов см. в статье о правилах и ограничениях именования. Имя mystorageaccount Уникальное имя учетной записи хранения. Местонахождение Восточная часть США Выберите расположение. Производительность Стандартные Производительность уровня "Стандартный" хорошо подходит для работы с примерами. Account kind (Тип учетной записи) StorageV2 Мы рекомендуем использовать учетную запись хранения общего назначения версии 2. Дополнительные сведения об учетных записях хранения Azure см. в этой обзорной статье. Репликация Хранилище, геоизбыточное между зонами, с доступом на чтение (RA-GZRS) Основной регион является избыточным в пределах зоны и реплицируется в дополнительный регион, для которого включен доступ на чтение. Уровень доступа Горячий уровень хранилища Используйте горячий уровень для часто используемых данных.
Скачивание примера приложения
Скачайте пример проекта, извлеките (распакуйте) файл storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip, а затем перейдите в папку для версии 12, чтобы найти файлы проекта.
Вы также можете клонировать репозиторий в локальную среду разработки с помощью Git. Пример проекта в папке для версии 12 содержит консольное приложение.
git clone https://github.com/Azure-Samples/storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.git
Настройка примера
Запросы приложений к Хранилищу BLOB-объектов Azure должны быть авторизованы. Для подключения к службам Azure в коде рекомендуется использовать класс DefaultAzureCredential
, предоставляемый клиентской библиотекой Azure.Identity
. Этот подход используется в примере кода для .NET версии 12. Дополнительные сведения см. в разделе Обзор DefaultAzureCredential.
Вы также можете авторизовать запросы к Хранилищу BLOB-объектов Azure с помощью ключа доступа к учетной записи. Однако этот подход следует использовать с осторожностью, чтобы защитить ключи доступа от раскрытия.
Запуск консольного приложения
В Visual Studio нажмите клавишу F5 или щелкните Запустить, чтобы начать отладку приложения. Visual Studio автоматически восстанавливает отсутствующие пакеты NuGet, если это настроено. Дополнительные сведения см. в разделе Установка и удаление пакетов с использованием восстановления пакетов.
При запуске окна консоли приложение получит состояние дополнительного региона и запишет эти сведения в консоль. Затем приложение создаст контейнер в учетной записи хранения и отправит BLOB-объект в контейнер. После отправки BLOB-объекта приложение будет постоянно проверять, реплицируется ли BLOB-объект в дополнительный регион. Эта проверка будет продолжается до тех пор, пока BLOB-объект не будет реплицирован, или не будет достигнуто максимальное число итераций, определенное условиями цикла.
Затем приложение переходит в цикл с запросом на скачивание BLOB-объекта, но сначала считывает его из основного хранилища. Нажмите любую клавишу, чтобы скачать BLOB-объект. Если при чтении из основного региона возникает повторяемая ошибка, выполняется повторный запрос на чтение к конечной точке дополнительного региона. В выходных данных будет показано, когда произойдет переключение на дополнительный регион.
Чтобы выйти из цикла и очистить ресурсы, нажмите клавишу Esc
в командной строке скачивания BLOB-объектов.
Разбор примера кода
Вместо этого в примере создается объект BlobServiceClient
, настроенный с использованием параметров повторных попыток и конечной точки дополнительного региона. Эта конфигурация позволяет приложению автоматически переключаться на дополнительный регион, если запрос в конечной точке основного региона завершается сбоем.
string accountName = "<YOURSTORAGEACCOUNTNAME>";
Uri primaryAccountUri = new Uri($"https://{accountName}.blob.core.windows.net/");
Uri secondaryAccountUri = new Uri($"https://{accountName}-secondary.blob.core.windows.net/");
// Provide the client configuration options for connecting to Azure Blob storage
BlobClientOptions blobClientOptions = new BlobClientOptions()
{
Retry = {
// The delay between retry attempts for a fixed approach or the delay
// on which to base calculations for a backoff-based approach
Delay = TimeSpan.FromSeconds(2),
// The maximum number of retry attempts before giving up
MaxRetries = 5,
// The approach to use for calculating retry delays
Mode = RetryMode.Exponential,
// The maximum permissible delay between retry attempts
MaxDelay = TimeSpan.FromSeconds(10)
},
// Secondary region endpoint
GeoRedundantSecondaryUri = secondaryAccountUri
};
// Create a BlobServiceClient object using the configuration options above
BlobServiceClient blobServiceClient = new BlobServiceClient(primaryAccountUri, new DefaultAzureCredential(), blobClientOptions);
Если для свойства GeoRedundantSecondaryUri
задано значение BlobClientOptions
, повторные попытки для запросов GET или HEAD будут выполняться с использованием дополнительной конечной точки. Последующие повторные попытки будут чередоваться между основной и дополнительной конечной точкой. Однако если для состояния ответа из дополнительного URI получен код 404, последующие повторные попытки запроса больше не будут использовать дополнительный URI, так как этот код ошибки указывает на то, что ресурс не реплицирован в дополнительный регион.
Следующие шаги
В первой части этого цикла вы узнали о том, как сделать приложение доступным с помощью учетных записей хранения RA-GZRS.
Перейдите ко второй части серии, чтобы узнать, как имитировать сбой и заставить приложение использовать вторичную конечную точку RA-GZRS.