SQL Server 2008 Replication & Sync Framework - практические ограничения
Мы смотрим на размещение данных нашего клиента в нашей собственной системе и используем MS Sync Framework для репликации данных с экземпляром SQL Server на сайте каждого клиента. Каждый клиент может иметь в среднем около 500 МБ данных, и может быть до 1000 клиентских сайтов, поэтому в целом у нас будет около 500 ГБ данных. Изменения данных необходимо будет повторить в обоих направлениях.
Кто-нибудь пробовал распределенную систему с таким количеством клиентов? Есть ли практический предел?
1 ответ
Я принимал участие в проекте, который использовал Sync Framework для синхронизации удаленных сайтов с SQL Express 2008 - некоторые в WAN, некоторые в ADSL (а некоторые даже в режиме удаленного доступа, хотя те были обновлены до беспроводных модемов 3G) с центральным SQL Server.
Мы не увеличивали масштаб до 1000 - вероятно, только около 60-80 сайтов к концу моего времени на этом клиенте. Мы нашли структуру синхронизации довольно надежной. Единственной проблемой, с которой мы столкнулись, было странное поведение, когда мы использовали функцию отслеживания изменений SQL Server.
Мы заметили, что иногда мы "пропускаем" наборы изменений данных, и это был честный путь к развертыванию, когда нам удалось воспроизвести это повторяемым образом, и мы связались с Microsoft PSS.
В конце они подтвердили, что, по существу, иногда отслеживание изменений SQL будет сообщать об обновлении как удаление / вставка, что полностью сбивает с толку Sync Framework. Столкнувшись с этим, нам пришлось прибегнуть к внедрению собственной реализации отслеживания изменений с использованием триггеров. Это оказалось полезным, поскольку а) оно действительно работало должным образом и б) у нас было больше контроля над регистрацией и аудитом изменений.
Это приложение было написано с использованием версии 1.0 Sync Framework, что означало, что нашей команде пришлось адаптировать настраиваемого поставщика для клиентской стороны. v2.0 теперь поставляется с собственным SqlSyncProvider, так что об этом беспокоиться меньше.
Еще одна вещь, которую стоит рассмотреть, - использовать ли прямые соединения SQL или использовать поддержку поставщика WCF. Вероятно, WCF - это то, что нужно, если ваши клиентские сайты получают доступ к главному серверу через Интернет - тогда вы можете добавить защиту / шифрование по мере необходимости. Вы можете даже подумать об оптимизации транспортного уровня WCF, чтобы включить какое-то сжатие.
Вероятно, стоит использовать что-то вроде Wireshark для сравнения использования сети, если вы тоже идете по этому пути. Лучше иметь представление о том, какими будут ваши требования к пропускной способности!
-dave