Несколько серверов BizTalk в группе BizTalk - Как справиться с параллелизмом? - PullRequest
2 голосов
/ 01 февраля 2010

В настоящее время я отвечаю за развертывание BizTalk Deployment с несколькими средами, и мы планируем развертывание двух или более серверов BizTalk в группе BizTalk для обеспечения высокой доступности и масштабируемости.

Теперь нас интересует, как обрабатывать параллелизм для таких адаптеров, как WCF SQL и File Adapters, поскольку, например, для адаптера SQL, вероятно, два хоста BizTalk Receive будут продолжать опрашивать одну и ту же таблицу БД.

Изначально моя идея для SQL заключалась в использовании подсказок по блокировке, но я не совсем уверен, есть ли еще какие-либо сомнения по этому поводу или есть какое-либо другое проверенное решение.

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

Буду признателен за любую помощь / предложения.

Большое спасибо

Ответы [ 3 ]

7 голосов
/ 01 февраля 2010

In general Большинство адаптеров BizTalk избегают гоночных условий для вас из коробки.

Например, файловый адаптер BizTalk уже реализует блокировку файлов, поэтому несколько экземпляров файлового адаптера на разных хостах не будут читать один и тот же файл.

Использование функции переименования файлов описано ниже (из документации MSDN )

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

Существует несколько адаптеров, которые небезопасны при работе на нескольких экземплярах. К ним относятся (но могут быть и другие) адаптеры POP3, FTP, MSMQ / MSMQT и базы данных в сценариях опроса.

Для этих адаптеров вы можете использовать функцию BizTalk кластерных хостов. Здесь есть пост здесь , объясняющий использование и настройку кластерного хоста. Это самый простой способ убедиться, что ваш опрос SQL не будет создавать дубликаты. Вы также можете достичь этого на уровне SQL, если вам нужно.

Кроме того, вы действительно углубляетесь в специфику бизнес-процессов, и вам придется разрабатывать для каждого случая. Например, что произойдет, если исходная система дважды предоставит один и тот же файл?

См. Следующие два сообщения SO для получения дополнительной информации по этой теме:

BizTalk - чтение порта приема дважды из БД

Экземпляры Biztalk балансировки сетевой нагрузки

0 голосов
/ 02 февраля 2010

Спасибо за ответ и предоставленные вами ссылки. На самом деле я уже прочитал некоторые из них, и я также смог провести некоторое тестирование этих решений. Для адаптера SQL кластеризация хоста BizTalk окажется хорошим решением, но не позволит вам максимально использовать преимущество BizTalk Group (избыточность хоста) для масштабируемости. Поэтому по этой причине мы решили, что будем избегать кластерного решения, но для MessageBox, который действительно нуждается в кластеризации для высокой доступности. То, что мы пытаемся сделать, - это иметь Active / Active или, скажем так, балансировку нагрузки с помощью BizTalk Server Group, что означает, что у нас действительно будет несколько запросов на приемный адаптер SQL одновременно. Первоначально мое решение было на уровне запросов, обрабатывая его через подсказки блокировки, ниже приведен пример моего SP.

MERGE INTO EmployeeComp
USING (SELECT EmployeeID
FROM
[AdventureWorks].[dbo].[EmployeeComp] 
WITH (READPAST, UPDLOCK) 
WHERE
[AdventureWorks].[dbo].[EmployeeComp].[Status] = 0) e(EmployeeID)
 ON EmployeeComp.EmployeeID = e.EmployeeID
WHEN MATCHED THEN
 UPDATE SET
 STATUS = 2

OUTPUT Inserted.EmployeeID, Inserted.Name, Inserted.Status;

Можете ли вы дать отзыв о созданном мной SP? Я провел несколько тестов, когда около 500 000 данных читалось адаптером BizTalk WCF-SQL, а затем одновременно записывались еще тысячи данных, и оказалось, что они работают так, как я ожидал.

Хотя решение вроде бы хорошо, но я пока не уверен, как это повлияет на такое решение, может быть, вы тоже можете пролить свет на это?

Также я подумал, возможно ли использовать SQL Server Service Broker из этой статьи. http://blogs.msdn.com/adapters/archive/2008/06/30/using-the-wcf-sql-adapter-to-read-messages-from-ssb-queues-and-submit-them-to-biztalk.aspx

Прямо сейчас я все еще проверяю это и еще не уверен, насколько возможно решить это.

Большое спасибо

0 голосов
/ 01 февраля 2010

этот раздел MSDN также может вам помочь:

http://msdn.microsoft.com/en-us/library/aa558765(BTS.20).aspx

...