Мы планируем разместить данные нашего клиента в нашей собственной системе и использовать MS Sync Framework для репликации данных с экземпляром SQL Server на сайте каждого клиента. Каждый клиент может иметь в среднем около 500 МБ данных, и может быть до 1000 клиентских сайтов, так что в целом у нас будет около 500 ГБ данных. Изменения данных необходимо будет реплицировать в обоих направлениях.
Кто-нибудь пробовал создать распределенную систему с таким количеством клиентов? Есть ли практический предел?
Я участвовал в проекте, который использовал 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 чтобы сравнить использование сети, если вы тоже идете по этому пути. Лучше заранее знать, какими будут ваши требования к пропускной способности!
-дэйв