Система Orphus

Шаблоны интеграции корпоративных приложений

Проектирование, создание и развертывание решений, основанных на обмене сообщениями

Авторы: Грегор Хоп
Бобби Вульф
Издательство: Вильямс, 2006
672 страниц

Материал предоставил: Денис Миллер
Найти в магазинах
Купить в Озоне (806 руб.)
Купить в Books.Ru
Купить в Болеро (650 руб.)
Купить в My-Shop.ru (717 руб.)

Аннотация

Содержание
Предисловие Джона Крупи
Предисловие Мартина Фаулера
Вступление
Для кого предназначена эта книга
Чему учит эта книга
Что не рассматривается в этой книге
Структура книги
Web-ресурс
Комментарий

Аннотация

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

Книга ориентирована на разработчиков программного обеспечения и системных интеграторов, использующих различные технологии и продукты для обмена сообщениями, такие как Java Message Service (JMS), Microsoft Message Queuing (MSMQ), IBM WebSphere MQ, Microsoft BizTalk, TIBCO, WebMethods, SeeBeyond, Vitria и др.

Содержание

Введение

Что такое обмен сообщениями?
Что такое система обмена сообщениями?
Преимущества обмена сообщениями
Недостатки асинхронного обмена сообщениями
Мыслим асинхронно
Распределенное приложение или интеграция приложений
Коммерческие системы обмена сообщениями
Форма шаблонов
Диаграммы, использованные в книге
Примеры и практикумы
Как организована эта книга
С чего начать
Поддержка
Резюме

Глава 1. Решение задач интеграции с помощью шаблонов проектирования

Необходимость интеграции
Трудности интеграции
Роль интеграционных шаблонов проектирования
Типы интеграционных задач
Слабое связывание
Пример простой интеграции
Компоненты слабосвязанного интеграционного решения
Пример: ''Приборы и устройства''
Внутренние системы
Размещение заказов
Обработка заказов
Проверка состояния заказа
Изменение адреса клиента
Обновление каталога товаров
Рассылка новостей
Тестирование и мониторинг
Резюме

Глава 2. Стили интеграции

Введение
Критерии интеграции приложений
Способы интеграции приложений
Передача файла (File Transfer)
Общая база данных (Shared Database)
Удаленный вызов процедуры (Remote Procedure Invocation)
Обмен сообщениями (Messaging)

Глава 3. Системы обмена сообщениями

Введение
Основные концепции обмена сообщениями
Об организации книги
Канал сообщений (Message Channel)
Сообщение (Message)
Каналы и фильтры (Pipes and Filters)
Конвейерная обработка
Параллельная обработка
История архитектуры каналов и фильтров
Маршрутизатор сообщений (Message Router)
Типы маршрутизаторов сообщений
Транслятор сообщений (Message Translator)
Уровни преобразования
Уровни связывания
Цепочечные преобразования
Конечная точка сообщения (Message Endpoint)

Глава 4. Каналы обмена сообщениями

Введение
Основные вопросы, связанные с применением каналов обмена сообщениями
Решения
Канал ''точка-точка'' (Point-to-Point Channel)
Канал ''публикация-подписка'' (Publish-Subscribe Channel)
Канал типа данных (Datatype Channel)
Канал недопустимых сообщений (Invalid Message Channel)
Канал недоставленных сообщений (Dead Letter Channel)
Гарантированная доставка (Guaranteed Delivery)
Адаптер канала (Channel Adapter)
Мост обмена сообщениями (Messaging Bridge)
Шина сообщений (Message Bus)

Глава 5. Построение сообщений

Введение
Сообщение с командой (Command Message)
Сообщение с данными документа (Document Message)
Сообщение о событии (Event Message)
Запрос-ответ (Request-Reply)
Обратный адрес (Return Address)
Идентификатор корреляции (Correlation Identifier)
Цепочка сообщений (Message Sequence)
Срок действия сообщения (Message Expiration)
Индикатор формата (Format Indicator)

Глава 6. Практикум: простой пример обмена сообщениями

Введение
Запрос-ответ
Публикация-подписка
Запрос-ответ (JMS)
Описание
Код
Обработка сообщения недопустимого формата
Итог
Запрос-ответ (.NET)
Описание
Код
Обработка сообщения недопустимого формата
Итог
Публикация-подписка (JMS)
Наблюдатель (Observer)
Наблюдатель (Observer) в распределенной среде
Публикация-подписка
Сравнение двух подходов
Модель с активным и пассивным источниками данных
Проектирование каналов
Итог

Глава 7. Маршрутизация сообщений

Введение
Простые маршрутизаторы
Составные маршрутизаторы
Архитектурные шаблоны
Выбор маршрутизатора сообщений
Маршрутизатор на основе содержимого (Content-Based Router)
Уменьшение зависимостей
Фильтр сообщений (Message Filter)
Фильтры с сохранением или без сохранения состояния
Функции фильтрации, встроенные в системы обмена сообщениями
Использование фильтров сообщений вместо маршрутизатора
на основе содержимого
Динамический маршрутизатор (Dynamic Router)
Список получателей (Recipient List)
Надежность
Динамический список получателей
Эффективность с точки зрения сети
Список получателей или канал ''публикация-подписка'' с фильтрами сообщений
Разветвитель (Splitter)
Итеративные разветвители
Статические разветвители
Упорядоченные или неупорядоченные дочерние сообщения
Агрегатор (Aggregator)
Детали реализации
Стратегии агрегации
Преобразователь порядка (Resequencer)
Порядковый номер
Внутреннее устройство
Борьба с переполнением буфера
Обработчик составного сообщения (Composed Message Processor)
Рассылка-сборка (Scatter-Gather)
Карта маршрутизации (Routing Slip)
Применение карты маршрутизации к унаследованным приложениям
Область применения
Реализация простого маршрутизатора с картой маршрутизации
Диспетчер процессов (Process Manager)
Управление состоянием
Экземпляры процесса
Корреляция
Сохранение состояния в сообщениях
Создание определения процесса
Сравнение диспетчера процессов с другими шаблонами
Брокер сообщений (Message Broker)

Глава 8. Преобразование сообщений

Введение
Устранение зависимостей
Управление метаданными
Преобразование данных в других схемах интеграции
Оболочка конверта (Envelope Wrapper)
Расширитель содержимого (Content Enricher)
Фильтр содержимого (Content Filter)
Квитанция (Claim Check)
Выбор ключа
Использование квитанции для сокрытия информации
Использование квитанции с диспетчером процессов
Нормализатор (Normalizer)
Определение формата сообщения
Каноническая модель данных (Canonical Data Model)
Способы преобразования
Двойное преобразование
Разработка канонической модели данных
Зависимости между форматами данных

Глава 9. Практикум: сложный обмен сообщениями

Пример: кредитный брокер
Выбор процентной ставки по кредиту
Проектирование потока сообщений
Режим выполнения операций: синхронный или асинхронный
Адресация: распределение или аукцион
Стратегии агрегации: несколько каналов или один
Управление одновременным доступом
Три реализации
Синхронная реализация с использованием Web-служб
Архитектура решения
Соображения по поводу проектирования Web-служб
Транспортный протокол
Выбор между синхронным и асинхронным обменом сообщениями
Стиль кодирования
Стиль привязки
Надежность и безопасность
Набор средств Apache Axis
Поиск расположения службы
Приложение кредитного брокера
Компоненты приложения кредитного брокера
Принятие запроса клиента
Запрос и получение данных от кредитного бюро
Реализация службы кредитного бюро
Получение значений процентной ставки
Реализация банковских операций
Клиентское приложение
Запуск решения
Анализ выходных данных
Ограничения производительности
Ограничения данного примера
Резюме
Асинхронная реализация с использованием MSMQ
Экосистема локального брокера
Закладываем основы: шлюз обмена сообщениями
Базовые классы для общей функциональности
Компонент банка
Компонент кредитного бюро
Компонент кредитного брокера
Шлюз кредитного бюро
Шлюз банка
Прием запросов кредитным брокером
Обработка сообщений
Оптимизация кода кредитного брокера
Запуск системы
Повышение производительности
Несколько слов о тестировании
Изоляция приложения от реализации обмена сообщениями
Тестирование бизнес-логики с помощью тестов модулей
Создание ''суррогатной'' реализации слоя обмена сообщениями
Ограничения данного примера
Резюме
Асинхронная реализация с использованием TIBCO ActiveEnterprise
Архитектура решения
Набор средств, используемых для реализации
TIB/RendezVous
TIB/IntegrationManager
TIBCO Repository
Интерфейсы
Реализация синхронных служб
Определение класса AE
Определение операций класса AE
Создание диаграммы процесса
Создание клиент/серверного канала для получения запросов
Настройка генератора заданий для создания экземпляра диаграммы процесса
Процесс кредитного брокера
Некоторые соображения по поводу проектирования
Реализация модели процесса
Управление параллельными аукционами
Выполнение
Резюме

Глава 10. Конечные точки обмена сообщениями

Введение
Шаблоны отправки и получения сообщений
Шаблоны потребителей сообщений
Некоторые аспекты реализации конечных точек
Шлюз обмена сообщениями (Messaging Gateway)
Соединение шлюзов в цепочки
Обработка исключений системы обмена сообщениями
Генерация кода шлюзов
Использование шлюзов в процессе тестирования
Преобразователь обмена сообщениями (Messaging Mapper)
Упрощение кодирования
Преобразователь или транслятор
Транзакционный клиент (Transactional Client)
Отправка-получение пары сообщений
Группа сообщений
Координация ''сообщение - база данных''
Координация ''сообщение - рабочий поток''
Опрашивающий потребитель (Polling Consumer)
Событийно управляемый потребитель (Event-Driven Consumer)
Конкурирующие потребители (Competing Consumers)
Диспетчер сообщений (Message Dispatcher)
Избирательный потребитель (Selective Consumer)
Постоянный подписчик (Durable Subscriber)
Идемпотентный получатель (Idempotent Receiver)
Активатор службы (Service Activator)

Глава 11. Управление системой

Введение
Мониторинг и управление
Наблюдение и анализ трафика сообщений
Тестирование и отладка
Шина управления (Control Bus)
Обходной путь (Detour)
Отвод (Wire Tap)
Журнал доставки сообщения (Message History)
Хранилище сообщений (Message Store)
Интеллектуальный заместитель (Smart Proxy)
Тестовое сообщение (Test Message)
Вентиль канала (Channel Purger)

Глава 12. Практикум: управление системой

Управление системой кредитного брокера
Оснащение кредитного брокера средствами контроля
Управляющая консоль
Качество обслуживания кредитного брокера
Проверка функциональности кредитного бюро
Перемещение при сбое кредитного бюро
Усовершенствование управляющей консоли
Ограничения примера, приведенного в этой главе

Глава 13. Шаблоны интеграции на практике

Практикум: система формирования цен на облигации
Построение системы
Архитектура с учетом шаблонов
Структура каналов
Выбор канала сообщений
Решение проблемы с помощью шаблонов
Мигающие ячейки
Сбой системы в процессе работы
Резюме

Глава 14. Кое-что в заключение

Новые стандарты и перспективы интеграции корпоративных приложений
Связь между стандартами и шаблонами проектирования
Основные организации, занимающиеся утверждением стандартов
Компоненты бизнес-процессов и внутренний
обмен сообщениями между Web-службами
ebXML и ebMS
BPEL4WS
WSCI
Стандарты компонентов бизнес-процессов для Java
Process Definition for Java (JSR-207)
Java Business Integration (JSR-208)
Спецификации WS-*
WS-Coordination и WS-Transaction
WS-Reliability и WS-ReliableMessaging
WS-Conversation
WS-Security
WS-Addressing, WS-Policy и другие спецификации WS-*

Заключение
Приложение А. Список шаблонов проектирования
Приложение Б. Шаблоны интеграции корпоративных приложений
Основные источники информации
Предметный указатель

Предисловие Джона Крупи

Как вы реагируете на появление новой технологии? Вы изучаете ее. Столкнувшись с платформой J2EE, я не нашел ничего лучшего, кроме как обратиться к ее спецификациям (книг по J2EE на то время еще не существовало). В частности, я сконцентрировал свое внимание на подмножестве J2EE технологии EJB. Тем не менее изучение технологии является лишь первым шагом к ее эффективному применению. Преимущество платформенных технологий состоит в том, что они ограничивают разработчика определенным кругом задач. К сожалению, это не исключает неверного применения самой технологии.

По моим наблюдениям, за последние 15 лет в умах разработчиков программного обеспечения прочно укоренились идеи эффективного программирования и проектирования. В настоящее время на рынке существует огромное количество книг по программированию на Java и C#, однако гораздо меньше по проектированию приложений. Написав книгу Core J2EE Patterns, мы с Дипаком Алуром (Deepak Alur) и Дэном Малксом (Dan Malks) хотели помочь J2EE-разработчикам в создании более эффективного кода. Основная идея нашей книги заключалась в использовании шаблонов проектирования. Как отметил Джеймс Бейти (James Baty), главный инженер компании Sun Microsystems, "шаблоны являются краеугольным камнем проектирования". Я полностью согласен с этим высказыванием. К счастью, так же считают и авторы настоящей книги.

Книга, которую вы держите в руках, посвящена чрезвычайно популярной в последнее время теме: интеграции приложений с помощью обмена сообщениями. На мой взгляд, идея обмена сообщениями найдет свое применение не только при интеграции приложений, но и при создании Web-служб. Как это было на заре появления технологий J2EE и .NET, вопросам проектирования Web-служб уделяется пока еще очень мало внимания. Многие считают, что Web-службы являются всего лишь новым способом решения существующих задач интеграции, и я полностью с этим согласен. Тем не менее это не отменяет необходимость проектирования самих Web-служб. Изюминка данной книги состоит в наличии большого количества шаблонов, которые можно применять при проектировании Web-служб и других интеграционных систем. Бобби и Грегор не балуют читателя конкретными примерами спецификаций Web-служб, поскольку они все еще нуждаются в доработке и утверждении. Впрочем, это вполне простительно. Подлинная ценность книги проявится после объявления соответствующих спецификаций стандартами, что позволит использовать предложенные шаблоны проектирования для разработки соответствующих этим стандартам приложений. Вполне вероятно, что создание архитектур, ориентированных на использование служб, станет основным способом интеграции приложений в ближайшем будущем.

Прочтите эту книгу от начала до конца. Она способна кардинально изменить вашу карьеру.

Джон Крупи

Бетесда, Мэриленд

Август 2003 г.

Предисловие Мартина Фаулера

В процессе написания книги Patterns of Enterprise Application Architecture мне посчастливилось получить подробную рецензию на включенный в нее материал от Кайла Брауна (Kyle Brown) и Рейчел Рейниц (Rachel Reinitz). В результате нескольких неофициальных встреч в офисе Кайла в Роли-Дарем мы пришли к выводу, что самым существенным пробелом моей книги стали системы асинхронного обмена сообщениями.

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

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

К сожалению, мне не хватило времени, сил и, что самое главное, знаний, чтобы достойно раскрыть тему обмена сообщениями в Patterns of Enterprise Application Architecture. Тем не менее я все-таки нашел решение этой проблемы в виде Грегора и Бобби, взявшихся за написание книги, которую вы сейчас держите в руках.

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

Мартин Фаулер

Мелроуз, Массачусетс

Август 2003 г.

Вступление

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

Интеграция корпоративных приложений означает нечто большее, чем создание распределенного приложения с n-уровневой архитектурой. Тогда как отдельный уровень распределенного приложения не может выполняться самостоятельно, интегрированные приложения представляют собой независимые сущности, способные к взаимной координации по принципу слабой связи. Обмен сообщениями позволяет нескольким приложениям передавать данные и команды по сети в соответствии с подходом "отправил и забыл". Последнее позволяет вызывающему приложению отправить информацию и вернуться к выполнению текущей задачи, переложив всю ответственность за доставку информации на систему обмена сообщениями. При необходимости вызывающее приложение может быть уведомлено о результате доставки информации с помощью функции обратного вызова. Несмотря на то что по сравнению с синхронным обменом сообщениями асинхронный подход способен усложнить проектирование приложения, возможность неограниченного числа повторов асинхронного вызова способна существенно повысить надежность коммуникаций. Асинхронный обмен сообщениями обладает и другими преимуществами, такими как регулирование числа запросов и балансировка нагрузки.

Для кого предназначена эта книга

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

Чему учит эта книга

Что не рассматривается в этой книге

Структура книги

Web-ресурс

Enterprise Integration Patterns Web Site - сайт Грегора, на котором множество информации на тему интеграции приложений с использованием сообщений.

Комментарий

Денис Миллер, Инструктор Luxoft

Очередная книга серии "The Addison-Wesley Signature Series" раскрывает читателям секреты и опыт разработчиков в области интеграции сложных бизнес-систем. Складывается впечатление, что книги этой серии содержат некий учебный план для разработчиков, как альтернатива университетскому образованию. В университете получают научные знания, а в этой серии передаются практические навыки.

О книге. Книга создавалась параллельно с уже известной нам книгой Мартина Фаулера "Архитектура корпоративных приложений". Мартин преднамеренно упустил большую и сложную часть инженерных решений, посвященных взаимодействию в n-уровневой архитектуре. Этот пропуск восполнила книга " Enterprise Integration Patterns". В ней представлено множество решений, о которых большинство из нас, не имея общего формата знаний, интуитивно догадывается или даже использует. Авторы проделали большую работу по выделению среди множества удачных программ неких единых принципов построения связей в распределённых приложениях. И, самое главное, построили из выделенных принципов строгую систему, в которой легко ориентироваться (см. карту решений в начале главы 3).

Тем, кто сталкивался с одним из сетевых протоколов (например, TCP/IP) более детализовано, книга покажется простой, тем не менее рекомендую её просмотреть. Для тех, у кого нет опыта разработки сетевых приложений, книга будет удачным стартом, как в область системного программирования протоколов низкого уровня, так и при использовании всевозможных бизнес-надстроек (Biztalk и др.). Полезна будет и гуру Message Queue в качестве обобщения и сравнения с альтернативными решениями от различных производителей. Можно заметить, что в предлагаемых примерах крен в сторону интеграции за счет системы передачи сообщений. Действительно, в книге выделена только одна область - область "обмена сообщениями" (Messaging). Но даётся сравнительный обзор и других вариантов обмена данными. Кстати, обзор альтернативных методов сделал Мартин Фаулер. В лучших традициях описания паттернов (patterns) предлагается аргументация, почему лучше применять то или иное решение. Тем, кто полагает, что система с асинхронными сообщениями панацея, параграф в начале книги, раскроет ее недостатки ("Challenges of Asynchronous Messaging").

Остановимся на различных методах коммуникации. Обмен файлами (File Transer) - способ, когда одно приложение копирует файл в общедоступное место для других приложений. Приложение-приёмник обнаруживает новый файл, скачивает и запускает процедуру обработки. Общая база данных (Share Database) - в данном случае несколько приложений имеют доступ к единой базе данных, через таблицы которой происходит обмен. Вызов удалённых процедур (Remote Procedure Invocation) - приложения имеют ряд процедур, которые доступны внешним приложениям. Заинтересованное приложение инициирует вызов, в результате которого выполняются действия на удалённой машине и происходит обмен данных. Последний вариант - обмен сообщениями (Messaging). В таком случае каждое приложение подключено к единой системе, через которую передаются сообщения, содержащие данные и команды на выполнение.

Обобщённая схема работы системы на базе передачи сообщений такова: create - send - delivery - receive - process (см. "What Is a Messaging System?"). А структура следующая: 1) сообщение (message), 2) канал (message channel), 3) маршрутизатор (routing), 4) преобразователь (message translator), 5) потребитель (message endpoint). Понятие сообщений (глава 5) и каналов (глава 4) не должно вызывать трудностей. Маршрутизация (глава 7) отвечает за механизм построения пути передачи сообщения. Преобразователи (глава 8) в зависимости от целей системы изменяют передаваемое сообщение с целью адаптации под интерфейс принимающей системы. Последнее, на что стоит обратить внимание - это потребители (глава 10), удачное построение которых так же влияет на всю систему.

Кому полезна эта книга? Преимущественно архитекторам приложений уровня предприятия и интеграционным архитекторам. Отчасти полезна разработчикам сетевых протоколов в качестве теоретической основы и знакомства с обобщённым опытом гуру.

Выводы: очередной справочник опыта. Кажется, пора организовывать программу самостоятельной подготовки, в основе которой будет серия самых лучших книг в отрасли корпоративных приложений. Надеюсь, первый курс обойдётся 10 книгами.