Лучше спросить на serverfault.com (я не могу оставлять комментарии, скрипты не работают в SO, поэтому я должен опубликовать полный ответ)
Обновление: (перешел на Safari, скрипты снова работают, могу выложить правильно)
Серебряной пули нет. Для простоты использования и развертывания «одним поворотом ключа» ничто не может сравниться с репликацией. Это единственное решение, которое охватывает глубоко обнаружение и разрешение конфликтов, имеет поддержку для внесения изменений в схему и поставляется с полным набором инструментов для его настройки и мониторинга. В течение многих лет, до того, как эта «повестка дня» перешла к рассмотрению .Net, эта тема была детищем MS в области синхронизации данных. Репликация имеет две основные проблемы, на мой взгляд:
- Технология, используемая для продвижения изменений, примитивна, медленна и ненадежна. Для инициализации реплик требуются общие файловые ресурсы, и от T-SQL зависит фактическая репликация данных, что приводит к всевозможным проблемам масштабируемости: потоки репликации используют рабочие потоки сервера и тот факт, что они взаимодействуют с произвольными таблицами, а запросы приложений приводят к блокировке. и тупики. Самые большие развертывания, о которых я слышал, - это 400-500 сайтов, которые выполняются сверхчеловеческими MVP и ведущими консультантами. На этом останавливается множество проектов, которые запускают на 1500 сайтах (намного больше, чем крупнейшие развернутые проекты репликации). Мне любопытно услышать, если я ошибаюсь, и вы знаете о решении для репликации SQL Server, развернутом с более чем 500 сайтами.
- Метафора репликации слишком ориентирована на данные. Он не учитывает требования распределенных приложений: необходимость версий и формализованных контрактов, автономность данных « fiefdoms », слабая связь с доступностью и безопасностью. В результате решение на основе репликации решает насущную необходимость «сделать данные доступными там», но не решает истинную проблему «мое приложение должно общаться с вашим приложением».
На другом конце спектра вы найдете решения, которые действительно решают проблему взаимодействия приложений, например услуги, основанные на обмене сообщениями в очереди. Но либо мучительно медлительны, либо пронизаны проблемами, связанными с разделением механизма связи (веб-сервисы и / или msmq) и хранением данных (транзакции DTC между comm и db, нет общей истории высокой доступности, нет общей истории восстановления и т. Д. И т. Д.). Решения, которые невероятно быстрые и полностью интегрированы с БД, существуют в стеке MS , но никто не знает, как их использовать. Где-то между ними и репликацией вы найдете различные промежуточные решения, такие как OCS / Synch framework и специализированные решения на основе SSIS. Никто не предложит простоту настройки и мониторинга репликации, но они могут масштабироваться и работать лучше.
Я принимал участие в нескольких проектах, которые требовали «синхронизации данных» в очень крупном масштабе (+1200 сайтов, +1600 сайтов), и мое решение состояло в том, чтобы превратить проблему в проблему «связи между приложениями». Как только мышление меняется на это, и поток данных больше не рассматривается как «запись с ключом X таблицы Y», а как «сообщение, сообщающее о покупке товара X покупателем Y», решение становится более простым для понимания и применения. Вы больше не думаете с точки зрения «вставки записей в порядке X-Y-Z, чтобы отношения FK не разрывались», а с точки зрения «процесса покупки, как описано в сообщении XYZ».
На мой взгляд, репликация и ее производные (то есть отслеживание данных и доставка грамм данных) - это решения, основанные на технологиях 80-х и представлении данных / приложений. Устаревшие динозавры (и ни в коем случае не превращающиеся в птиц).
Я знаю, что это даже не начинает решать все ваши (очень законные) проблемы, но выписывание всего, что я скажу / rant / rable по этой теме, наполнило бы тома в мягкой обложке ...