Большинство приложений электронной коммерции нулевой терпимости к любому времени простоя. Любые воздействия на ресурсы приложения могут повлиять на общие показатели доступности сайта. База данных Azure Cosmos – одна из основных баз данных NoSQL, используемых в индустрии. Хотя Azure Cosmos сам по себе обеспечивает минимальную доступность 99,99% для одного региона без зоны доступности, как мы можем дополнительно улучшить доступность базы данных с доступными вариантами в Azure Cosmos?
Многорегиональное чтение и запись
Однорегиональное чтение повлияет на доступность и также приведет к единой точке отказа. Поэтому приложения, требующие многочисленного чтения, должны как минимум иметь включенное многорегиональное чтение, хотя многорегиональная запись не является вариантом для приложения. Однако многорегиональная запись обеспечивает большую доступность как для приложений с большим объемом чтения, так и записи.
С возможностью многорегиональной записи можно включить репликацию мульти-мастер, где все настроенные регионы могут служить точками записи.
Лучшие практики
- Выбирайте регионы, находящиеся ближе к региону, где развернуто приложение.
- Настройте несколько предпочтительных регионов в зависимости от требований приложения для улучшения доступности.
- Установите более одного предпочтительного региона в приложении для чтения и записи, чтобы улучшить доступность и снизить задержку.
- Установите предпочтительные регионы в порядке текущих или ближайших регионов приложения в первую очередь в списке.
Приложение развернуто в West US 2
//Настройка приложения, развернутого в West US 2, как описано ниже
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;
// ...
CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
.setEndpoint(accountEndpoint)
.setKey(accountKey)
.setPreferredRegions(Arrays.asList("West US 2", "East US"));
CosmosClient client = clientBuilder.buildClient();
//
Приложение развернуто в East US
//Настройка приложения, развернутого в Восточных США, осуществляется следующим образом
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosClient;
// ...
CosmosClientBuilder clientBuilder = new CosmosClientBuilder()
.setEndpoint(accountEndpoint)
.setKey(accountKey)
.setPreferredRegions(Arrays.asList( "East US","West US 2"));
CosmosClient client = clientBuilder.buildClient();
//
Заключение
Хотя включение многооблачных чтения и записи может обеспечить большую доступность, настройка чтения и записи приложения ближе к региону его развертывания и указание более чем одного предпочтительного региона помогает приложению немедленно переходить к доступному региону без какого-либо ручного вмешательства.
Уровни согласованности
Выбирайте уровни согласованности в зависимости от требований приложения. Более высокие ожидания согласованности обычно приводят к снижению доступности. Если приложение требует строгой согласованности данных, убедитесь, что оно может выдержать возможные задержки. С другой стороны, если приемлема слабая согласованность, приложение может получить улучшенную пропускную способность и доступность.
Заключение
Выбор правильного уровня согласованности полностью зависит от потребностей приложения, и хотя более сильная согласованность может повлиять на доступность, общая доступность приложения не пострадает от выбора более сильных уровней согласованности.
Отказоустойчивость
Ручной отказоустойчивость
Разработчики или сотрудники могут войти в портал и вручную переключиться на следующий доступный регион во время сбоя в регионе, к которому в данный момент подключено приложение. Хотя эта опция обеспечивает доступность в определенной степени, для переключения требуется ручное вмешательство, что может повлиять на общие метрики доступности сайта.
Управляемый службой отказоустойчивость
Включение управляемого сервисом переключения на резервный режим позволяет Cosmos автоматически переключаться на следующий доступный регион в зависимости от приоритета, настроенного в портале. Эта опция устраняет необходимость в изменениях приложения во время процесса переключения.
Заключение
Хотя оба варианта обеспечивают повышенную доступность, пропускная способность управляемого сервисом переключения на резервный режим предоставляет гибкость переключения на следующий доступный регион без беспокойства о развертывании приложения.
Ключ раздела и индексы
- Определение ключа раздела в Azure Cosmos DB имеет решающее значение перед запуском любого приложения на нем. Cosmos DB очень эффективен для приложений с интенсивным чтением, поэтому важно учитывать критерии поиска и определять запросы для чтения записей из базы данных перед интеграцией Cosmos DB в ваше приложение.
- По умолчанию каждый элемент в контейнере Cosmos DB автоматически индексируется. Однако исключение определенных элементов или полей из индексации может помочь сократить потребление единиц запросов (RUs). Так же важно добавлять поля для индексации, как и удалять индексы на полях, которые не нужно индексировать.
- Избегайте хранения чрезмерно крупных элементов в Azure Cosmos DB.
- Минимизируйте кросс-разделовые запросы, когда это возможно.
- Убедитесь, что запросы включают фильтры для повышения эффективности.
- Избегайте многократного запроса одного и того же ключа раздела; вместо этого реализуйте уровень кэширования для таких случаев использования.
Автоматическое масштабирование пропускной способности
Azure Cosmos DB поддерживает как стандартную (ручную), так и автоматическую пропускную способность на уровне контейнера.
Ручная пропускная способность
Приложение определяет разрешенные RU/s, и превышение максимального количества запросов RU/s приведет к ограничению на определенное время. Для увеличения пропускной способности требуется вмешательство вручную.
Автомасштабирование пропускной способности
Приложение может настроить максимальную пропускную способность, которую поддерживает, и Cosmos автоматически масштабируется в зависимости от получаемого трафика. При превышении уровня автомасштабирования пропускной способности запросы будут ограничены на определенное время.
Вывод
Хотя оба метода обеспечивают повышенную доступность, автомасштабирование пропускной способности дает гибкость обработки изменяющегося трафика без ограничения или влияния на доступность.
Резервное копирование и восстановление
Azure Cosmos DB по умолчанию обеспечивает периодическое резервное копирование для всех учетных записей
Периодическое резервное копирование
Резервные копии создаются периодически каждую настроенную минуту с минимальным значением 1 час и максимальным значением 24 часа. Также предоставляются варианты хранения резервных копий с избыточностью на уровне Гео, Зоны или Локального уровня. Команде приложения необходимо обратиться в службу поддержки для восстановления резервной копии.
Непрерывное резервное копирование
Вариант непрерывного резервного копирования хранит резервные копии в настроенной базе данных Cosmos региона и позволяет сохранять данные за последние 7 дней или за последние 30 дней. Также предоставляется восстановление в точке времени.
Вывод
Выбор непрерывного резервного копирования обеспечивает более быстрое восстановление базы данных. Это устраняет необходимость взаимодействия с поддержкой для восстановления базы данных и позволяет приложениям восстанавливать ее в любой регион (где есть резервные копии) в конкретный момент времени.
В заключение, хотя метрики доступности имеют решающее значение для любого приложения, они имеют свою цену. Варианты, предлагающие более высокую доступность, чем стандартная конфигурация, повлекут за собой дополнительные расходы. Более того, упомянутые выше варианты могут быть излишними или не подходящими для всех приложений, использующих Cosmos. Однако важно принять и реализовать передовые практики в Azure Cosmos для эффективной оптимизации доступности.
Source:
https://dzone.com/articles/how-to-maximize-the-azure-cosmos-db-availability