КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Каналы и Фильтры
Сообщение (Message) Каналы могут буть представлены в виде трубы соединяющей два приложения. Данные помещаются в один коней канала и появляются на другом конце. Однако данные не являются чем-то безструктурным. На практике данные это как правило логически связанные элементы информации, как например, записи, объекты, строки БД и т.п.
В то время как при внутрипроцессном взаимодействии, например между потоками, достаточно передать указатель на область памяти от отдного потока другому, при межпроцессном, и тем более, меж-машинном взаимодействии этого уже недостаточно. Для передачи структуры данных в памяти её нужно преобразовать в вид пригодный для передачи.
Процесс преобразования структуры в ОП в вид пригодный для передачи по сети называется маршаллинг (marshalling). Обратный процесс называется демаршалинг (unmarshalling).
При обмене данными с помощью сообщений данные упаковываются в сообщение которое затем маршалится и передаётся по сети, демаршалится на принимающем конце и распаковывается.
Таким образом, любые данные которые необходимо передать через систему обмена сообщениями должны быть в первую очередь представлены в виде сообщения (упакованы в сообщение).
Сообщение состоит из двух основных частей:
Концепция сообщения в системах обмена сообщениями похожа на трибуты пакетов и конвертов в сетевых протоколах (например TCP/IP) и постовых службах (например Почта России)
С точки зрения системы передачи сообщений – все сообщения одинаковые и описываются лишь своими заголовками. В тоже время для интегрируемых приложений сообщения могут иметь различную семантику. Как например сообщения вызывающие какую-либо команду, просто передающие какой-то документ и т.п.
В большом количестве корпоративных приложений, часто, одно событие приводит к запуску целого ряда последовательных (или параллельных) процессов, каждый из которых выполняет вполне определённое действие. Так например, компонент, получающий сообщение должен получив сообщение, расшифровать его, записать какую-то информацию в журнал, выполнить преобразование сообщение из одного формата в другой, выполнить какое-то бизнес-действие и отправить сообщение далее другому компоненту. Для достижения такой функциональности часто прибегают к инкапсуляции её полностью внутри одного компонента, что очень часто приводит к резкому усложнению компонента, затрудняет (а как правило делает вообще невозможным) его повторное использование, затрудняет отладку и тестирование, а так же снижает возможность параллельной работы нескольких разработчиков.
Выходом из описанной ситуации может послужить применение шаблона Цепочка ответственности (Chain of Responsibility), который применительно к системам обмена сообщениями и в соответствующих архитектурах носит названия Каналы и Фильтры (Pipes and Filters). В соответствии с этим шаблоном, функциональность разбивается на отдельные компоненты, которые называются Фильтрами. Фильтры имеют как минимум один входной и один выходной интерфейс (например, метод, который принимает один параметр и возвращает одно значение). Этот интерфейс должен быть одинаковый для всех фильтров, т.е. фильтры являются взаимозаменяемыми по интерфейсу. Фильтры объединяются в цепочки при помощи каналов (Pipe) в нужном порядке. Таким образом, в результате получается необходимая суммарная функциональность чётко декомпозированная по группам в виде отдельных фильтров.
Положительными особенностями такого подхода является следующее:
Однако такой подход не лишён недостатков. Среди них наиболее значительными являются:
Самым очевидной реализацией канала (Pipe) является канал передачи сообщений (Message Channel) предоставляемый инфраструктурой обмена сообщениями (Messaging Subsystem). Однако, такой подход, в случае если фильтры находятся в рамках одного адресного пространства (в рамках одного процесса) может быть заменён на более эффективный способ обмена данными. Поэтому хорошее архитектурное решение не должно делать предположение о нижележащей реализации каналов. Это позволит в случае простых однопроцессных конфигураций существенно повысить эффективность использования системных ресурсов, а так же повысить производительность.
В самом простом случае фильтр имеет один входной и один выходной интерфейс, однако, фильтры могут иметь так же и несколько входных и несколько выходных интерфейсов (например, в случае с фильтрами-маршрутизаторами сообщений, Message Router).
Цепочки фильтров могут быть организованы двумя способами:
Параллельная обработка (если она принципиально возможна) способна сократить время прохождения запроса (или обработки сообщения) по цепочки фильтров, а так же повысить пропускную способность. Более того, в некоторых случаях фильтры могут представлять собой некоторую функциональность, которая может быть выполнена только на определённом компьютере (например, запрос к какому либо централизованному серверу). Соответственно, если удаётся сделать несколько запросов параллельно – то это может благотворно сказаться на общей производительности решения. Параллельность, однако, возможна лишь в том случае если входные параметры фильтров выполняющихся параллельно не зависят от выходных значений друг-друга (в указанно примере входные параметры фильтров B и C завысят от выходных значений фильтра A, но они не зависят друг от друга, поэтому они в принципе могут выполняться параллельно).
Дата добавления: 2014-01-05; Просмотров: 825; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |