Автор: Dinakar Nethi

Участник: Sean Kelley

Технические редакторы Michael Thomassy, Liam Cavanaugh

Обзор

SQL Azure Database является "облачным" сервисом баз данных от Microsoft. SQL Azure предоставляет доступную по Интернет функциональность баз данных как сервис. Основанные на "облачных" технологиям решения баз данных, такие как SQL Azure, могут принести множество преимуществ, включая быстрое развертывание, экономичное масштабирование, высокую доступность и сокращение издержек на управление. Этот документ не является исчерпывающим руководством по SQL Azure Data Sync, однако, он содержит в себе лучшие практики по синхронизации SQL Azure и SQL Server и ссылки на дополнительную информацию в разделе Ссылки.

Sync Framework

Microsoft Sync Framework - платформа синхронизации данных, которая может быть использована для синхронизации данных между множеством платформ данных с помощью провайдеров баз данных. Ключевым аспектом функциональности Sync Framework является возможность создания собственных провайдеров. Провайдеры позволяют любому источнику данных принимать участие в процессе синхронизации с использованием Sync Framework, предоставляя возможность синхронизации типа peer-to-peer. Команда разработки Microsoft Sync для поддержки SQL Azure опубликовала релиз Microsoft Sync Framework Power Pack for SQL Azure, содержащий в себе провайдера и утилиту Data Sync для SQL Azure. 

SqlAzureSyncProvider является оптимизированным провайдером SQL Azure, решающий некоторые из сложных моментов по обработке транзакций с SQL Azure с использованием возвращающих табличное значение параметров (Table-valued parameters) для сокращения количества round trips (циклов отправки запроса к БД-получению результата) к серверу и использованием умного "back-off-algorithm"  для сокращения размера пакета (batch) BCP во время синхронизации при достижения throttling level.

Утилита Data Sync предоставляет "мастера", помогающего соединить SQL Server и SQL Azure и автоматизировать процесс синхронизации. 

Настройка синхронизации

Для настройки синхронизации между локальным SQL Server и SQL Azure необходимо выполнить следующие шаги: 

  • Скачать и установить Microsoft Sync Framework Power Pack for SQL Azure November CTP
  • Скачать Walkthrough Microsoft Sync Framework Power Pack for SQL Azure November CTP.doc по ссылке ниже. В документе содержится пошаговое руководство по настройке синхронизации между локальным SQL Server и SQL Azure.

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

Диапазоны в Sync Framework

Диапазон представляет собой комбинацию таблиц и фильтров. Например, вы можете определить отфильтрованный диапазон Sales-WA, содержащий данные из таблицы customer sales, относящиеся только к покупкам в штате Вашингтон. Если вы определите фильтр на таблице, например  Sales-OR, это будет другой диапазон. Если вы определяете фильтры, Sync Framework не обрабатывает в автоматическом режиме удаление неудовлетворяющих условиям фильтра записи. Например, если пользователь или приложение обновляет значение в столбце, присутствующем в условии фильтра, запись перейдет из одного диапазона в другой. Запись будет отослана в диапазон, к которому принадлежит, но данная запись не будет удалена из старого диапазона. Обратите внимание, что обработка этой ситуации должна быть предусмотрена в вашем приложении. 

Советы по эффективному созданию диапазонов

  • Каждый диапазон имеет по одному выделенному для него ОС треду. Таким образом, распределением таблиц между множеством диапазонов можно реализовать параллельную миграцию данных.
  • Статические/редкоизменяемые таблицы помещаются в один диапазон, для которого уменьшается частота синхрон��зации.
  • Частоизменяемые таблицы группируются в различные диапазоны.
  • Логически связанные таблицы (логически или по ключам) группируются в один диапазон.
  • Диапазоны, которые читаются на клиенте, должны быть помечены как download only для сокращения времени синхронизации и упрощения рабочего процесса синхронизации.
  • Лучше будет, если вы минимизируете количество клиентов в каждом диапазоне - идеально, если это будет один клиент=один диапазон. Это минимизирует "конкурентную" борьбу за ресурсы на сервере и идеально для случая hub-spoke, когда все изменения проходят через один сервер (либо синхронизируются между клиентами).
  • Инициализируйтесь с помощью снапшотов против полной инициализации везде где только можно, таким образом уменьшая время первоначальной синхронизации.

Архитектура

SQL Azure Data Sync использует собственного провайдера данных SqlAzureSync Provider для движка синхронизации Microsoft Sync Frame, написанного специально для SQL Azure. Этот новый провайдер эффективен, снижает барьер вхождения и обеспечивает надежность при синхронизации с SQL Azure, умным образом обрабатывая некоторые специфичные для SQL Azure проблемы мультитенантных систем. Провайдер сокращает количество round trips к серверу с использованием возвращающих табличное значение параметров (TVPs). Кроме этого, когда SQL Azure использует свой механизм throttling для минимизации эффекта от выходящих из-под контроля операций SqlAzureSyncProvider начинает использовать умный алгоритм “back-off algorithm”, автоматически уменьшающий размер пакета (batch) со стандартного (5000 записей) в течение синхронизации. Полезный побочный эффект использования этого алгоритма проявляется в том, что изменения вполне наблюдаемы перед окончанием синхронизации, и прогресс синхронизации может быть отображён в реальном времени.


Ссылки