Разработка архитектуры для обмена данными между двумя системами - PullRequest
1 голос
/ 28 июля 2011

Мне было поручено создать промежуточный уровень, который должен обмениваться данными (через HTTP) между двумя независимыми системами (например, Receiver <=> Intermediate Layer (IL) <=> Отправитель). Получатель и Отправитель предоставляют набор API через веб-сервисы. Каждый раз, когда в системе отправителя происходит транзакция, IL должен знать об этом (я думаю о создании службы Windows, которая постоянно проверяет отправителя), обрабатывать данные, а затем доставлять их получателю. IL может временно хранить данные в базе данных SQL, пока они не будут переданы в Receiver. У меня есть следующие вопросы -

  1. Можно ли использовать WCF (не очень часто) для общения с Отправителем и Получателем (оба предоставляют веб-сервисы)?
  2. Как обеспечить гарантированную доставку?
  3. Как обеспечить безопасность сообщений через Интернет?
  4. Каковы лучшие методы для решения проблем параллелизма?
  5. Каковы лучшие практики для обработки ошибок?
  6. Как обеспечить надежность данных (данные не изменяются в пути)
  7. Как я могу обеспечить получение данных обратно Отправителю?
  8. Какие ограничения мне нужно знать?

Мне нужно реализовать это на платформе MS с помощью специального решения .NET. Мне сказали не использовать промежуточное программное обеспечение, такое как BizTalk. Получатель является экземпляром SDFC, если это имеет значение.

Любые указатели очень ценятся. Спасибо.

1 Ответ

2 голосов
/ 28 июля 2011

Служба Windows, которая управляет обменом, звучит нормально.Да, WCF может работать с традиционными веб-службами.

Как обеспечить гарантированную доставку?

Для обеспечения доставки вы можете использовать TransactionScope для обработкипередача данных между Receiver <=> Intermediate Layer и Intermediate Layer <=> Sender, но я бы не стал делать их вместе.

Возможно, вы захотите рассмотреть какой-нибудь механизм организации очередей для отправки данных получателю;Я думаю, что я думаю больше о логической очереди, а не о реальном компоненте очередей.Платформа рабочего процесса также может быть опцией.

убедитесь, что у вас есть хорошая регистрация / аудит;убедитесь, что он твердый, имеет правильную информацию и легко читается.Если вы напишите службу, она будет выполняться без надзора, поэтому эксплуатационные / вспомогательные аспекты более требовательны.

Подумайте о сценариях:

  • Как вы управляете неудачными поставками?
  • Что произойдет, если получатель (или отправитель) будет недоступен в течение определенного периода времени (и как долго это будет продолжаться?);Например: вам нужно «перейти» к оператору по электронной почте?

Как мне обеспечить безопасность сообщений через Интернет?

HTTPS,Предполагая, что другие существующие клиенты совершают звонки в веб-службы, как они обеспечивают безопасность?(Я думаю, шифрование).

Каковы наилучшие методы для решения проблем параллелизма?

Хм, наверное, отдельный вопрос.Вы должны быть в состоянии найти информацию об этом достаточно легко.Сколько данных мы берем?какая частота?Сколько экземпляров службы Windows вы думали иметь - если одного достаточно, почему параллелизм может быть проблемой?

Каковы лучшие методы для обработки ошибок?

То же, что и для параллелизма, но я могу предложить несколько указателей:

  • Использовать установленную структуру ведения журналов, мне очень нравятся MS EntLibs, но есть и другие (повторное использование того, что используется в настоящее время, вероятно, будет иметь больше смысла- если что-то есть).
  • Помните, что выполнение выполняется без присмотра, поэтому убедитесь, что информация полная, ясная и однозначная.Я бы соблазнился войти еще и набрать номер, как только уровень комфорта будет достигнут.
  • используйте обработчик верхнего уровня, чтобы ничего не потеряно;но не бойтесь глубоко заходить в приложение, где вы все равно можете получить полезный контекст (например, метаданные отправляемых / получаемых данных).

Как обеспечить получениеданных обратно Отправителю?

Включить их (отправку квитанции) в качестве шага, являющегося частью транзакции.

Под другим углом - взгляните на CodePlexдля библиотек типов ESB вы можете найти что-то полезное: http://www.codeplex.com/site/search?query=ESB&ac=8 Например, ESBasic , который выглядит как библиотека классов, которую вы можете использовать повторно.

...