Интеграция на основе сообщений. Преимущества и отличия от других подходов
Каждое предприятие в течение своей жизнедеятельности накапливает различные программные решения для реализации своих бизнес-процессов. В результате возникает задача обеспечения взаимодействия между этими программными продуктами для реализации сквозных бизнес-процессов, которые опираются на данные и функциональные возможности, находящиеся за рамками одного программного продукта.
Основные способы интеграции приложений:
• Обмен файлами
• Обмен через общую базу данных
• Удаленный вызов функций
• Сервисная шина предприятия (MQ, ESB)
Обмен файлами
Этот способ обмена основан на файловом механизме, который является базисом всех современных операционных систем. Главным достоинством обмена файлами является то, что система-источник ничего не должна знать о системах-потребителях. Мы просто формируем файл с данными и выкладываем его в хранилище (например, файловый каталог), где остальные участники интеграционного процесса могут получить из него информацию. Существует довольно много программных решений, которые до сих пор используют этот подход к интеграции, как основной.
К плюсам интеграции через обмен файлами следует отнести:
• Отсутствие строгих связей между интегрируемыми приложениями
• Отсутствие необходимости в установке дополнительного программного обеспечения
• Общая простота реализации, отсутствие высоких требований к квалификации разработчика
Однако у этой схемы есть и несколько важных ограничений, которые надо учитывать при разработке интеграционной модели:
• Большинство приложений действуют довольно «эгоистично» и оперируют таким файлом, как его единственные потребители. В результате, довольно часто возникают ситуации, когда системы конкурируют между собой за доступ к файлу. Особенно ярко это проявляется в тех случаях, когда подтверждением о доставке данных является перемещение файла в специальный каталог или его удаление.
• Для ухода от первой проблемы довольно часто применяется подход, когда для каждого потребителя формируется отдельный файл. Но в этом случае мы получаем сразу несколько новых проблем: увеличение объема данных, формируемых системой-источником, увеличение исходящего трафика и увеличение временных задержек на размещение файлов в общих папках. Есть и еще одна проблема при таком подходе: чтобы правильно сформировать файлы, система-источник должна четко себе представлять, кто будет потребителем этих данных по каждому типу данных.
• Многие системы не имеют встроенных средств взаимодействия с файловой системой. Они не предоставляют возможности подписаться на события записи или изменения файла, отследить событие завершения записи в файл и т.д. В таких системах приходится реализовывать циклы периодического опроса файловых ресурсов, что накладывает дополнительную нетипичную нагрузку на систему – часть своих ресурсов она вынуждена тратить не на обслуживание собственных бизнес-процессов, а на реализацию интеграционного взаимодействия. Иногда для обеспечения более надежного обмена файлами приходится явно выделять отдельные регламентные периоды для выгрузки и для загрузки данных. Это приводит к временной рассинхронизации интегрируемых систем.
• Обмен выполняется по принципу «точка-точка». Достаточно сложно централизованно проследить маршруты и историю прохождения данных. Затруднено централизованное управление интеграционной моделью.
Обмен через общую базу данных
Обмен данными через общую базу данных является развитием метода передачи данных через файл с целью преодоления его недостатков. В этом подходе выделяется единая интеграционная база данных, к которой имеют возможность подключиться все участники интеграционного процесса. Система-источник размещает свои данные в этой базе данных, а системы-потребители считывают только те данные, которые им нужны.
К основным плюсам можно отнести:
• Встроенные механизмы СУБД для разграничения доступа к конкурентным данным. Данные не могут быть прочитаны или изменены до завершения процедуры записи.
• Единые механизмы записи и считывания данных. Все приложения оперируют стандартными механизмами СУБД по работе с данными. Это позволяет организовать единые подходы к разработке и внесению изменений.
• Единый формат данных для всех участников интеграционного процесса. Устраняется проблема семантического диссонанса. Все приложения выполняют приведение данных к единым типам, любое приложение владеет всей полнотой знаний о текущих типах данных и их структуре.
• Более высокая скорость доставки данных относительно файлового обмена. В этой схеме не требуется выделять регламентные периоды доступа к данным – они могут быть прочитаны сразу после их фиксации в БД.
• Встроенные механизмы СУБД для протоколирования доступа к данным позволяют проводить расследования о причинах того или иного отклонения при доставке.
К недостаткам схемы относим:
• Единая БД является точкой отказа для всего интеграционного контура. Выход из строя единой БД приводит к невозможности функционирования интеграционной схемы в целом. Приложения должны обеспечивать собственные механизмы накопления неотправленной информации и механизмы контроля состояния доступа к интеграционной БД.
• При высокой интенсивности обмена сама интеграционная БД может стать узким местом. Появляется конкурентность доступа к данным, возможны возникновения блокировок на изменения данных.
• Довольно высокая степень связанности приложений. Внесение изменения в схему обмена потребует согласованного изменения в соответствующих системах.
• Работа с единым форматом приводит к более высоким требованиям при проектировании схемы интеграционной БД, так как хранимые данные должны удовлетворять всех участников интеграционного процесса. Данные должны храниться в форматах и структурах, которые могут быть однозначно прочитаны всеми участниками интеграционных процессов.
• Все участники интеграционного ландшафта должны иметь возможность подключения к интеграционной БД. При этом надо понимать, что не все участники интеграционных процессов поддерживают работу с современными СУБД. Это является ограничивающим фактором при выборе СУБД и может приводить к повышению накладных расходов на передачу. Более того, не редки случаи, когда приложение вовсе не имеет механизмов записи и чтения из сторонних СУБД.
• При работе в распределенных сетях появляется избыточный трафик. Если половина систем-потребителей размещена в сегментах, отличных от размещения интеграционной БД, но система-источник находится в одном сегменте с системами-потребителями, то данные из такого сегмента все равно должны быть размещены в интеграционной БД и только потом прочитаны системами-потребителями. Получаем избыточную транспортировку данных между сегментами.
• Существует некоторая рассогласованность между отправляемыми и принимаемыми данными, так как система-источник никак не влияет на дискретность получения данных системами-потребителями. В таких условиях бывает довольно трудно проследить полноту и согласованность данных, полученных системами-получателями. Высока вероятность случаев, когда полученные данные не могут быть обработаны по причине задержки в доставке связанных данных, и отсутствует понимание, когда их можно будет обработать (по факту получения недостающих данных). Требуется организация механизмов постобработки и накопления данных.
Удаленный вызов функций
Вышеописанные подходы (обмен файлами и обмен через общую БД) направлены на обеспечение взаимодействия между приложениями в части данных, но не в части функций. Для обеспечения взаимодействия на уровне функций используют различные технологии и механизмы вызова удаленных функций.
Для реализации такого подхода могут использоваться следующие технологии, предоставляющие механизмы удаленного вызова процедур:
• COM
• CORBA
• SOAP
• Java RMI и т.д.
В этом случае приложение должно самостоятельно реализовывать механизмы предоставления удаленного доступа к данным.
К основным плюсам подхода следует отнести:
• Отсутствие необходимости организовывать промежуточное хранилище данных. Системы-потребители самостоятельно запрашивают данные по мере возникновения такой потребности.
• Согласованность данных. Система-источник выполняет предварительную подготовку данных, включая всю функциональность по обеспечению целостности данных.
• Скорость получения данных. Отсутствуют задержки, связанные с необходимостью выполнения записи и получения данных из хранилищ-посредников.
• Возможность организовывать схемы «вытягивания» и «выталкивания» данных. В первом случае система-источник предоставляет необходимую функциональность по получению данных, а системы-подписчики осуществляют ее вызов по мере возникновения необходимости в получении данных. Во втором случае системы-источники предоставляют функционал для загрузки данных; передачу осуществляет система-источник при возникновении соответствующего события.
К недостаткам подхода следует отнести:
• Высокую связанность приложений. Работоспособность системы-потребителя начинает полностью зависеть от доступности и работоспособности системы-источника. В системах необходимо реализовывать буферы данных, которые сохраняют интеграционные данные на период отсутствия связи с остальными участниками интеграционного процесса.
• При масштабировании интеграционного ландшафта требуется доработка систем-источников и систем-потребителей.
• Если в интеграционный ландшафт входят системы, реализующие различные технологии предоставления удаленных процедур, например, часть приложений реализуют CORBA, а часть SOAP, то либо все приложения должны уметь реализовывать все подходы, либо появляется слой проксирующих приложений, сводящих обмен к одной технологии.
• Из-за разности технологий системы могут оперировать различными структурами и типами данных. Появляются дополнительные расходы на преобразование данных.
• При высокой интенсивности обмена приложение начинает тратить все больше ресурсов не на обслуживание своих бизнес-процессов, а на обслуживание интеграционного слоя.
Сервисная шина предприятия
Для комплексного решения проблемы передачи данных с получением доступа к функциональности приложений используется подход передачи сообщений посредством специализированных продуктов. Условно эти продукты можно разделить на два типа: сервисы очередей сообщений (Message Queue Services, MQS) и сервисные шины предприятия (Enterprise Service Bus, ESB). Общий подход к построению интеграции таков: система подключается к интеграционной шине посредством специализированных коннекторов. Главная задача коннектора – обеспечение канала приема данных в систему и передачи данных из нее. Задача системы-источника — передать данные в коннектор, а маршрутизация, трансформация и доставка сообщений в системы-потребители осуществляются уже без ее участия.
Коннекторы располагаются максимально «близко» к системам и гарантируют возможность передачи данных даже при отсутствии сетевого соединения, тем самым разгружая системы, участвующие в интеграции, от накладных расходов по обеспечению сохранности и передаче данных.
Основными плюсами системы являются:
• Слабые связи между системами, участвующими в интеграции. Более того, в правильно построенной интеграционной модели система вообще ничего не знает о других участниках интеграционного ландшафта. Вся работа сводится к передаче сообщений в сервисную шину и прием сообщений от шины. Этим достигается самый высокий уровень гибкости и масштабируемости относительно всех ранее рассмотренных систем.
• Возможности для трансформации данных. Позволяют интегрировать приложения, рассчитанные на различные форматы данных, без необходимости их доработок. Это помогает снизить затраты на обработку данных системами (данные отправляются один раз в формате системы-источника и принимаются системами-потребителями в своих «родных» форматах), а также задействовать в интеграции системы, доработка которых невозможна или крайне нежелательна по тем или иным причинам. Причем затраты на трансформацию данных не ложатся на интегрируемые системы.
• Маршрутизация данных. Один из важнейших механизмов сервисной шины, позволяющий резко снизить зависимость и связанность участников интеграционных процессов. При наличии механизма маршрутизации система-источник может просто однократно передать сообщение в шину. Ей не требуются знания о том, кто должен получить это сообщение, готов ли он к приему сообщения и т.д. Сообщение будет доставлено всем потребителям в соответствии с текущим маршрутом.
Соответственно, при масштабировании схемы нам также не требуется вносить изменения во все системы. Достаточно внести изменения в маршрут, добавив или удалив потребителя данных. Это также позволяет выполнять доставку сообщений согласно определенным условиям. Причем сами системы не участвуют в определении условий прохождения маршрута, а значит это поведение может быть легко модифицировано без необходимости вносить изменения в системы.
• Гарантированная доставка данных. Этот механизм сервисной шины предприятия существенно упрощает схемы доставки данных на каналах с низкой стабильностью, снимая нагрузку с систем-источников. Им не приходится реализовывать механизмы для проверки наличия канала связи и промежуточные хранилища для сообщений на время отсутствия канала доставки. Также этот механизм позволяет снизить алгоритмическую нагрузку по реализации механизма квитирования доставки. Этот функционал реализован на уровне интеграционных механизмов сервисной шины.
• Обеспечение безопасности при передаче данных. Ни для кого не секрет, что во многих случаях утечка конфиденциальных данных происходит именно при их передаче. Шины обеспечивают шифрование передаваемых данных, а также поддерживают защищенные сетевые соединения.
• Централизованное управление интеграционной схемой является важным компонентом любого интеграционного ландшафта. Такой подход сильно снижает накладные расходы на первичную настройку, масштабирование и поддержание работоспособности схемы в целом. Также это позволяет сконцентрировать необходимые компетенции в одном месте, не распыляя их по интегрируемым системам.
• Диагностика состояния. Важной особенностью использования специализированных сервисных шин являются механизмы диагностики. Использование этих механизмов позволяет выявить проблемы, связанные как с передачей данных, так и с состоянием систем, участвующих в интеграции. Наиболее продвинутые системы предоставляют средства проактивной диагностики. Этот вид диагностики позволяет выявлять потенциальные проблемы на начальных этапах до того, как проблема проявит себя в полную силу, и своевременно осуществлять комплекс упреждающих воздействий.
Основными недостатками модели принято считать:
• Дополнительные затраты на приобретение и поддержку специализированных программных продуктов (MQ, ESB). Зачастую необходимо выделение дополнительных серверных ресурсов.
• Необходимость проведения обучения персонала по этим программным продуктам.
Критерии выбора способа интеграции
Каковы же критерии выбора того или иного способа интеграции? Можно выделить несколько основных критериев, однако стоит учитывать, что вес того или иного критерия определяется текущими условиями и решаемыми задачами:
• Возможность всех приложений интеграционного контура использовать выбранный способ интеграции
Не секрет, что разные приложения могут быть реализованы в разных архитектурных стилях и парадигмах разработки. Есть приложения, обеспечивающие интеграционные механизмы, есть приложения, таких механизмов не имеющие. Есть приложения, реализующие какой-то один интеграционный механизм. Например, если мы выбираем способ интеграции «Обмен файлами», то мы должны быть уверены, что все приложения интеграционного контура способны обмениваться файлами и умеют работать с предоставляемыми каждым приложением форматами.
• Возможность внесения изменений в приложения
Исходя из ранее озвученного критерия, возникает необходимость оценить возможность доработки приложения для обеспечения его вовлеченности в интеграционный контур. Также следует оценить общие трудозатраты на доработку и доступность специалистов на рынке.
• Требования к обеспечению надежности
Следует оценить, каковы требования к обеспечению надежности доставки данных, требуется ли подтверждение доставки, возможна ли повторная доставка ранее отправленных данных, поддерживаются ли используемые механизмы функциональности по обеспечению надежности.
• Уровень связанности приложений
В зависимости от избираемой модели интеграции, приложения вовлекаются в интеграционный контур с различной степенью жесткости связывания. Следует оценить возможность обеспечения заданной жесткости связывания. Например, если мы используем интеграцию приложений посредством вызова удаленных функций, нам следует понимать, готово ли приложение к работе в схеме, когда отсутствие системы-потребителя приводит к невозможности передачи данных.
• Временные задержки доставки данных
Тип выбранной интеграции и подходы к формированию отправляемой информации накладывают ограничения на периодичность и скорость передачи данных. Следует оценить влияние временных задержек при доставке данных на бизнес-процессы предприятия.
• Требования к защите данных
Следует оценить требования по обеспечению защиты данных при интеграции систем. Защита может выполняться путем шифрации данных или путем работы с защищенными каналами передачи.
Выводы
Если применить критерии выбора к ранее рассмотренным шаблонам интеграции, то можно сформулировать следующие выводы:
• Файловый обмен можно использовать в интеграционных моделях с низкой интенсивностью обмена и небольшим количеством систем, входящих в интеграционный контур. При росте количества интегрируемых систем, интенсивности и сложности обмена такой подход лучше не применять.
• Использование обмена через общую базу снимает часть проблем файлового обмена, но все также не рекомендуется к использованию в сложных и интенсивных интеграционных ландшафтах по многим причинам: формируются сильные локальные связи между системами, затруднено частное изменение схемы взаимодействия, требуется доработка приложений для обеспечения работы с данными в интеграционной базе данных, средняя скорость обмена данными. Кроме этого сама интеграционная база данных может стать узким местом всей схемы.
• Удаленный вызов функций подходит при организации обмена в едином технологическом стеке. В большинстве случаев требуется доработка систем для обеспечения работы с новыми данными. Высокая скорость обмена данными при формировании событийной модели. При этом подход характеризуется высокой сложностью обслуживания и масштабирования.
• Обмен сообщениями посредством сервисной шины предприятия имеет наиболее сбалансированный характер, даже при небольшом количестве систем и несложных интеграционных ландшафтах. А высокая скорость обмена и слабая связанность приложений делают такую схему подходящей для интеграции большого количества приложений с последующим масштабированием решения.
Таким образом, с большой уверенностью можно утверждать, что обмен данными посредством механизма сообщений, реализуемого сервисными шинами, будет являться наиболее подходящим для организации обмена данными и заслуживающим пристального внимания любого разработчика, участвующего в создании интеграционных схем. Такой выбор может существенно сэкономить время, затраты и нервы при условии подбора правильной сервисной шины.
Станислав Пиголкин