Доброе утро / день / вечер!
Есть 2 системы - CRM (настраиваемый SplendidCRM) и домашний монстр (crm + cms + backoffice).
- CRM - Asp.Net 2.0 WebSite, Sql Server 2008;реализовано с использованием представлений, хранимых процедур, триггеров;например, аудит реализован как триггер + SP;WebSite - это простой пользовательский интерфейс;Ado DataSets используются как домашний монстр Dtos
- - Asp.Net 3.5 WebApplication, SqlServer 2008;реализовано с использованием ListToSql;Sql Server используется только как хранилище;вся логика и аудит реализованы в коде c #;Классы, сгенерированные дизайнером VS, используются как Dtos.
Мне нужно реализовать «дуплексную» синхронизацию между ними:
object is updated in Crm -> changes are applied in home-brewed monster
object is updated in home-brewed monster -> changes are applied in Crm
Синхронизация должна работать в «почти режиме реального времени» -задержки допустимы.Данных не так много - около 35000 объектов и 120000 записей аудита на данный момент могут содержать до 100000 объектов.Объекты тоже невелики (60 столбцов в базе данных).
Для обеих систем есть Api, который позволяет обновлять: веб-сервис для Crm и Wcf-сервис для домашнего монстра.Из-за изменений в реализации монстров можно применять только через Wcf Service (например, для аудита).Что касается Crm - его можно обновить с помощью вызова веб-службы или прямого вызова SP (но веб-служба предпочтительнее).
На данный момент в Crm есть столбец, который содержит внешний идентификатор объекта и существует своего рода синхронизация.но требуется более надежное и профессиональное решение.
По некоторым причинам (ошибка администратора или применено неправильное обновление) обе системы могут перейти в автономный режим.Это не должно влиять на синхронизацию - все обновления должны применяться, как только система вернется.Важно, чтобы данные из домашнего монстра имели более высокий приоритет и должны отменять изменения по сравнению с Crm.
Вопрос в том, какую технологию / библиотеку лучше использовать?Было бы хорошо, если бы синхронизация могла быть удалена «из систем» (системы будут генерировать события, когда данные изменились, а внешний инструмент синхронизирует изменения).Это связано с тем, что системы и правила синхронизации подвержены частым изменениям - например, первая «версия» синхронизации, при которой при определенных условиях удалялись объекты из Crm, вторая версия не удаляла, но экспортировало меньше данных, в «3-й версии» еще большебыли добавлены поля, общие для обеих систем.Эти изменения появятся в будущем, поэтому я не хотел бы трогать другие системы (или не их) и изменять только правила синхронизации.