SQL Azure Geo Replication для целей без избыточности

Я просто провожу небольшое исследование о том, как создать масштабное глобально доступное приложение в Azure.

Уже есть много технологий, чтобы ваше приложение было как можно ближе к потребителю.

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

Я немного запутался в Базе данных. Если вы используете SQL Azure, вам нужно указать регион для его размещения. Если мой экземпляр SQL Azure находится в Западной Европе (Амстердам), но мои клиенты находятся в Австралии и получают доступ к приложению через экземпляр в Австралии (NSW) между приложениями, обращающимися к базе данных, будет некоторая задержка.

Кажется, что все ссылки, которые я видел о Geo Replication, находятся в контексте настройки избыточности Master-Slave. Но мне интересно, возможно ли иметь настройку Master-Master, где каждый экземпляр приложения обращается к своему собственному главному экземпляру SQL Azure в том же географическом регионе, а затем sql azure позаботится о двунаправленной репликации между ними.

2 ответа

Решение

Активная гео-репликация для базы данных SQL Azure:

Функция Active Geo-Replication реализует механизм обеспечения избыточности базы данных в одном регионе Microsoft Azure или в разных регионах (гео-избыточность). Active Geo-Replication асинхронно реплицирует зафиксированные транзакции из базы данных до четырех копий базы данных на разных серверах. Исходная база данных становится основной базой непрерывной копии. Каждая непрерывная копия называется активной вторичной базой данных. Первичная база данных асинхронно реплицирует зафиксированные транзакции в каждую из активных вторичных баз данных. Хотя в любой данный момент активные вторичные данные могут немного отставать от первичной базы данных, гарантируется, что активные вторичные данные всегда будут транзакционно согласованы с изменениями, внесенными в первичную базу данных. Активная гео-репликация поддерживает до четырех активных вторичных серверов или до трех активных вторичных серверов и одну автономную вторичную.

Одним из основных преимуществ активной гео-репликации является то, что она предоставляет решение для аварийного восстановления на уровне базы данных. Используя Active Geo-Replication, вы можете настроить базу данных пользователей на уровне обслуживания Premium для репликации транзакций в базы данных на разных серверах баз данных Microsoft Azure SQL в одном и том же или разных регионах. Межрегиональная избыточность позволяет приложениям восстанавливаться после постоянной потери центра обработки данных, вызванной стихийными бедствиями, катастрофическими человеческими ошибками или злонамеренными действиями.

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

Обратите внимание, что мастер-мастер нигде не упоминается. Реплики читаемы, никогда не пишутся. Так что вопрос действительно спорный, поскольку SQL Azure просто не поддерживает то, что вы хотите.

Альтернативой может быть разделение на уровне приложений и подключение каждого арендатора к бесконтактной базе данных, но это предполагает, что данные не связаны (австралийские клиенты не смотрят на южноамериканские товары). Смотрите этот ответ здесь.

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

Но вы также должны спросить: требуется ли master-master DB для достижения низкой задержки? В вашем приложении происходят записи так часто? Задержка чтения легко может быть улучшена, поэтому у вас есть кеширование и CDN для. Подумайте обо всех австралийских пользователях, читающих этот вопрос. Служит из базы данных с географической репликацией для аварийного восстановления, а не из базы данных master-master. Посмотрите, как Stackru масштабирует SQL Server.

Предостережение: я не работал с SQL Azure в этом отношении, но я много работал с гео-репликацией.

Из того, что я могу сказать, вы можете сказать, что Active Geo Replication, встроенная в Azure, является односторонней копией - у вас есть главная база данных в одном месте, которая разделяет транзакции с другими базами данных, которые доступны только для чтения.

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

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

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

Другие вопросы по тегам