- •Сообщение об авторском праве
- •Предисловие С. Сомасегара
- •Предисловие Скотта Гатри
- •Предисловие Девида Хилла
- •Введение
- •Целевая аудитория
- •Как работать с данным руководством
- •Обратная связь и поддержка
- •Техническая поддержка
- •Сообщество и группа новостей
- •Авторская группа
- •Авторы и рецензенты
- •Поделитесь с нами своими успехами
- •Архитектура и дизайн программного обеспечения
- •Что такое архитектура программного обеспечения?
- •Почему архитектура так важна?
- •Цели архитектуры
- •Архитектура сегодня и завтра
- •Принципы проектирования архитектуры
- •Основные принципы проектирования архитектуры
- •Дополнительные источники
- •Основные принципы проектирования архитектуры ПО
- •Обзор
- •Основные принципы проектирования
- •Основные вопросы проектирования
- •Определение типа приложения
- •Выбор стратегии развертывания
- •Выбор соответствующих технологий
- •Выбор показателей качества
- •Решение о путях реализации сквозной функциональности
- •Архитектурные шаблоны и стили
- •Обзор
- •Что такое архитектурный стиль?
- •Обзор основных архитектурных стилей
- •Сочетание архитектурных стилей
- •Архитектура клиент/сервер
- •Компонентная архитектура
- •Проектирование на основе предметной области
- •Многослойная архитектура
- •Архитектура, основанная на шине сообщений
- •N-уровневая / 3-уровневая архитектура
- •Объектно-ориентированная архитектура
- •Сервисно-ориентированная архитектура
- •Дополнительные источники
- •Методика построения архитектуры и дизайна
- •Обзор
- •Исходные данные, выходные данные и этапы проектирования
- •Определение целей архитектуры
- •Время и объем работ
- •Ключевые сценарии
- •Важные с точки зрения архитектуры варианты использования
- •Общее представление приложения
- •Подходящие технологии
- •Графическое представление архитектуры
- •Основные проблемы
- •Параметры качества
- •Сквозная функциональность
- •Вопросы, требующие особого внимания при проектировании
- •Варианты решений
- •Базовая архитектура и возможные варианты архитектуры
- •Пилотные архитектуры
- •Что дальше?
- •Анализ архитектуры
- •Оценки на основании сценариев
- •Представление дизайна архитектуры
- •Дополнительные источники
- •Основы проектирования
- •Рекомендации по проектированию многослойных приложений
- •Обзор
- •Логическое разделение на слои
- •Слой представления, бизнес-слой и слой данных
- •Сервисы и слои
- •Слой сервисов
- •Этапы проектирования многослойной структуры
- •Шаг 1 – Выбор стратегии разделения на слои
- •Шаг 2 – Выбор необходимых слоев
- •Шаг 3 – Принятие решения о распределении слоев и компонентов
- •Шаг 4 – Выяснение возможности сворачивания слоев
- •Шаг 5 – Определение правил взаимодействия между слоями
- •Шаг 6 – Определение сквозной функциональности
- •Шаг 7 – Определение интерфейсов между слоями
- •Шаг 8 – Выбор стратегии развертывания
- •Шаг 9 – Выбор протоколов связи
- •Рекомендации по проектированию слоя представления
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Кэширование
- •Сетевое взаимодействие
- •Композиция
- •Управление исключениями
- •Навигация
- •Взаимодействие с пользователем
- •Пользовательский интерфейс
- •Валидация
- •Выбор технологии
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Аспекты производительности
- •Этапы проектирования слоя представления
- •Шаблоны проектирования
- •Предложения patterns & practices
- •Дополнительные источники
- •Рекомендации по проектированию бизнес-слоя
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Кэширование
- •Связывание и связность
- •Управление исключениями
- •Протоколирование, аудит и инструментирование
- •Валидация
- •Вопросы развертывания
- •Этапы проектирования бизнес-слоя
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Рекомендации по проектированию слоя доступа к данным
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Пакетная обработка
- •Большие бинарные объекты
- •Подключения
- •Формат данных
- •Управление исключениями
- •Объектно-реляционное сопоставление
- •Запросы
- •Хранимые процедуры
- •Сравнение хранимых процедур и динамического SQL
- •Транзакции
- •Валидация
- •Вопросы выбора технологий
- •Вопросы производительности
- •Вопросы безопасности
- •Вопросы развертывания
- •Этапы проектирования слоя доступа к данным
- •Шаблоны проектирования
- •Дополнительные источники
- •Рекомендации по проектированию слоя сервисов
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Сетевое взаимодействие
- •Управление исключениями
- •Каналы обмена сообщениями
- •Структура сообщения
- •Конечная точка для передачи сообщения
- •Безопасность сообщений
- •Маршрутизация сообщений
- •Преобразование сообщений
- •Интерфейс сервиса
- •Валидация
- •REST и SOAP
- •Аспекты проектирования при использовании REST
- •Аспекты проектирования при использовании SOAP
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Этапы проектирования слоя сервисов
- •Шаблоны проектирования
- •Дополнительные источники
- •Рекомендации по проектированию компонентов
- •Обзор
- •Общие рекомендации по проектированию компонентов
- •Распределение компонентов по слоям
- •Компоненты слоя представления
- •Компоненты слоя сервисов
- •Компоненты бизнес-слоя
- •Компоненты слоя доступа к данным
- •Компоненты сквозной функциональности
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Проектирование компонентов представления
- •Обзор
- •Шаг 1 – Понимание предъявляемых к UI требований
- •Шаг 2 – Выбор необходимого типа UI
- •Шаг 3 – Выбор технологии UI
- •Шаг 4 – Проектирование компонентов представления
- •Компоненты пользовательского интерфейса
- •Компоненты логики представления
- •Компоненты модели представления
- •Сущности представления
- •Шаг 5 – Определение требований к привязке данных
- •Шаг 6 – Выработка стратегии обработки ошибок
- •Шаг 7 – Определение стратегии валидации
- •Предложения patterns & practices
- •Дополнительные источники
- •Проектирование компонентов бизнес-слоя
- •Обзор
- •Шаг 1 – Выбор компонентов бизнес-слоя, которые будут использоваться в приложении
- •Шаг 3 – Выбор соответствующей поддержки транзакций
- •Шаг 4 – Выработка стратегии обработки бизнес-правил
- •Шаг 5 – Выбор шаблонов, соответствующих требованиям
- •Дополнительные источники
- •Обзор
- •Шаг 1 – Выбор способа представления сущностей
- •Шаг 2 – Выбор дизайна бизнес-сущностей
- •Шаг 3 – Определение механизмов сериализации
- •Проектирование на основе предметной области
- •Дополнительные источники
- •Проектирование компонентов рабочего процесса
- •Обзор
- •Шаг 1 – Выбор стиля рабочего процесса на основании сценариев
- •Шаг 2 – Выбор способа разработки
- •Шаг 3 – Определение стратегии обработки правил
- •Шаг 4 – Выбор решения для рабочего процесса
- •Шаг 5 – Проектирование компонентов бизнес-слоя для поддержки рабочего процесса
- •Windows Workflow Foundation
- •Сервер BizTalk
- •BizTalk с ESB
- •Совместное использование Windows Workflow Foundation и BizTalk
- •Дополнительные источники
- •Проектирование компонентов слоя доступа к данным
- •Обзор
- •Шаг 1 – Выбор технологии доступа к данным
- •Шаг 2 – Принятие решения о методе извлечения и хранения бизнес-объектов источника данных
- •Шаг 3 – Выбор способа подключения к источнику данных
- •Подключения
- •Пул подключений
- •Транзакции и параллелизм
- •Шаг 4 – Выработка стратегий обработки ошибок источника данных
- •Исключения
- •Логика повтора попыток
- •Истечение времени ожидания
- •Шаг 5 – Проектирование объектов агентов сервисов (необязательный)
- •Дополнительные источники
- •Показатели качества
- •Обзор
- •Общие показатели качества
- •Доступность
- •Концептуальная целостность
- •Возможность взаимодействия
- •Удобство и простота обслуживания
- •Управляемость
- •Производительность
- •Надежность
- •Возможность повторного использования
- •Масштабируемость
- •Безопасность
- •Обеспеченность технической поддержкой
- •Тестируемость
- •Взаимодействие с пользователем /удобство и простота использования
- •Дополнительные источники
- •Сквозная функциональность
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Кэширование
- •Сетевое взаимодействие
- •Управление конфигурацией
- •Управление исключениями
- •Протоколирование и инструментирование
- •Управление состоянием
- •Валидация
- •Этапы проектирования стратегии кэширования
- •Шаг 1 – Выбор данных, подлежащих кэшированию
- •Шаг 2 – Выбор места кэширования данных
- •Шаг 3 – Определение формата кэширования данных
- •Шаг 4 – Выработка подходящей стратегии управления кэшем
- •Шаг 5 – Выбор метода загрузки кэшированных данных
- •Этапы проектирования стратегии управления исключениями
- •Шаг 1 – Выбор обрабатываемых исключений
- •Шаг 2 – Выбор стратегии выявления исключений
- •Шаг 3 – Выработка стратегии распространения исключений
- •Шаг 4 – Выработка стратегии использования собственных исключений
- •Шаг 5 – Выбор соответствующих данных для сбора
- •Шаг 6 – Выработка стратегии протоколирования исключений
- •Шаг 7 – Выбор стратегии уведомления об исключениях
- •Шаг 8 – Принятие решение об обработке необрабатываемых исключений
- •Этапы проектирования стратегии валидации ввода и данных
- •Шаг 1 – Определение границ доверия
- •Шаг 2 – Определение ключевых сценариев
- •Шаг 3 – Выбор места валидации
- •Шаг 4 – Выработка стратегий валидации
- •Шаблоны проектирования
- •Предложения группы patterns & practices
- •Дополнительные источники
- •Взаимодействие и обмен сообщениями
- •Обзор
- •Общие принципы проектирования
- •Рекомендации по реализации связи посредством обмена сообщениями
- •Сравнение асинхронного и синхронного взаимодействия
- •Связывание и связность
- •Форматы данных
- •Возможность взаимодействия с другими системами
- •Производительность
- •Управление состоянием
- •Контрактно-ориентированное проектирование
- •Вопросы безопасности
- •Безопасность на транспортном уровне
- •Безопасность на уровне сообщения
- •Технологии
- •Технология WCF
- •Технология ASMX
- •Дополнительные источники
- •Физические уровни и развертывание
- •Обзор
- •Распределенное и нераспределенное развертывание
- •Нераспределенное развертывание
- •Распределенное развертывание
- •Вопросы производительности и проектирования в распределенных средах
- •Рекомендации по размещению компонентов при распределенном развертывании
- •Шаблоны распределенного развертывания
- •Развертывание клиент-сервер
- •n-уровневое развертывание
- •2-уровневое развертывание
- •3-уровневое развертывание
- •4-уровневое развертывание
- •Развертывание веб-приложения
- •Развертывание насыщенного Интернет-приложения
- •Развертывание насыщенного клиентского приложения
- •Шаблоны развертывания для обеспечения наилучшей производительности
- •Кластер с балансировкой нагрузки
- •Привязка к конкретному серверу и сеансы пользователей
- •Фермы приложений
- •Шаблоны развертывания для обеспечения надежности
- •Отказоустойчивый кластер
- •Шаблоны обеспечения безопасности
- •Олицетворение/делегирование
- •Доверенная подсистема
- •Модель с применением множества доверенных удостоверений сервиса
- •Вертикальное и горизонтальное масштабирование
- •Вопросы вертикального масштабирования
- •Проектирование с поддержкой горизонтального масштабирования
- •Компромиссы и последствия их принятия
- •Компоненты без сохранения состояния
- •Секционирование данных и базы данных
- •Вопросы безопасности сетевой инфраструктуры
- •Вопросы управляемости
- •Шаблоны проектирования
- •Дополнительные источники
- •Архетипы приложений
- •Выбор типа приложения
- •Обзор
- •Обзор архетипов приложений
- •Типы приложений
- •Мобильное приложение
- •Насыщенное клиентское приложение
- •Насыщенное Интернет-приложение
- •Сервис
- •Веб-приложение
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Обработка запросов приложения
- •Аутентификация
- •Авторизация
- •Кэширование
- •Управление исключениями
- •Протоколирование и инструментирование
- •Навигация
- •Компоновка страницы
- •Формирование визуального отображения страницы
- •Управление сеансами
- •Валидация
- •Вопросы проектирования слоев
- •Слой представления
- •Бизнес-слой
- •Слой доступа к данным
- •Слой сервисов
- •Вопросы тестирования и тестируемости
- •Вопросы выбора технологий
- •Вопросы выбора стратегии развертывания
- •Нераспределенное развертывание
- •Распределенное развертывание
- •Балансировка нагрузки
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование насыщенных клиентских приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Бизнес-слой
- •Сетевое взаимодействие
- •Композиция
- •Управление конфигурацией
- •Доступ к данным
- •Управление исключениями
- •Удобство и простота обслуживания
- •Слой представления
- •Управление состоянием
- •Рабочий процесс
- •Вопросы безопасности
- •Вопросы обработки данных
- •Кэширование данных
- •Параллельная обработка данных
- •Привязка данных
- •Вопросы автономной работы/работы без постоянного подключения
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Самодостаточное приложение
- •Развертывание по схеме клиент/сервер
- •N-уровневое развертывание
- •Технологии развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование насыщенных Интернет-приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Бизнес-слой
- •Кэширование
- •Сетевое взаимодействие
- •Композиция
- •Доступ к данным
- •Управление исключениями
- •Протоколирование
- •Мультимедиа и графика
- •Приложения для мобильных устройств
- •Портируемость
- •Представление
- •Управление состоянием
- •Валидация
- •Вопросы безопасности
- •Вопросы обработки данных
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Установка подключаемого модуля RIA
- •Распределенное развертывание
- •Балансировка нагрузки
- •Веб-ферма
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование мобильных приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация и авторизация
- •Кэширование
- •Сетевое взаимодействие
- •Управление конфигурацией
- •Доступ к данным
- •Особенности устройств
- •Управление исключениями
- •Протоколирование
- •Портирование приложений
- •Управление энергопотреблением
- •Синхронизация
- •Тестирование
- •Пользовательский интерфейс
- •Валидация
- •Вопросы выбора технологий
- •Microsoft Silverlight for Mobile
- •.NET Compact Framework
- •Windows Mobile
- •Windows Embedded
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование сервисных приложений
- •Обзор
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Аутентификация
- •Авторизация
- •Бизнес-слой
- •Сетевое взаимодействие
- •Слой доступа к данным
- •Управление исключениями
- •Структура сообщения
- •Конечная точка сообщения
- •Защита сообщений
- •Преобразование сообщений
- •Шаблоны обмена сообщениями
- •Передача репрезентативного состояния
- •Слой сервисов
- •SOAP
- •Валидация
- •Вопросы выбора технологий
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование размещаемых сервисов и сервисов в облаке
- •Обзор
- •Обработка данных в облаке
- •Терминология размещаемых сервисов и сервисов в облаке
- •Преимущества приложений в облаке
- •Преимущества для ISV и поставщиков услуг размещения
- •Преимущества корпоративных потребителей сервисов
- •Вопросы проектирования
- •Изоляция и совместное использование данных
- •Безопасность данных
- •Шаблоны обеспечения безопасности данных
- •Хранение и расширяемость данных
- •Управление удостоверениями
- •Многотенантная архитектура
- •Локально или удаленно, создавать или покупать
- •Производительность
- •Композиция сервисов
- •Интеграция сервисов
- •Управление сервисами
- •Шаблоны проектирования
- •Дополнительные источники
- •Проектирование офисных бизнес-приложений
- •Обзор
- •Компоненты офисных бизнес-приложений
- •Основные сценарии использования офисных бизнес-приложений
- •Управление корпоративной информацией
- •Бизнес-аналитика
- •Унифицированный обмен сообщениями
- •Общие шаблоны OBA
- •Расширенный канал доступа
- •Шаблон Direct Integration
- •Шаблон Mediated Integration
- •Интеграция документов
- •Шаблон Application Generated Documents
- •Шаблон Intelligent Documents/Embedded LOB Information
- •Шаблон Intelligent Documents/Embedded LOB Template
- •Шаблон Intelligent Documents/LOB Information Recognizer
- •Рабочий процесс обработки документов
- •Составной UI
- •Консолидация данных (Поисковая навигация)
- •Шаблон Data Consolidation
- •Запуск LOB-процесса
- •Координация совместной деятельности
- •Уведомления и задачи
- •Общие вопросы проектирования
- •Вопросы безопасности
- •Вопросы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Обзор
- •Логические слои LOB-приложения SharePoint
- •Развертывание физического уровня
- •Основные сценарии и функции
- •Общие принципы проектирования
- •Специальные вопросы проектирования
- •Каталог бизнес-данных
- •Хранилище документов и содержимого
- •Сервисы Excel
- •Сервисы форм InfoPath
- •Объектная модель SharePoint
- •Веб-части
- •Рабочий процесс
- •Вопросы выбора технологий
- •Принципы развертывания
- •Шаблоны проектирования
- •Дополнительные источники
- •Приложения
- •Обзор
- •Поиск данных и ресурсов
- •Как Microsoft организует техническую информацию в глобальной сети Интернет
- •Microsoft Developer Network
- •Microsoft TechNet
- •Технология .NET Framework
- •Общеязыковая среда выполнения
- •Доступ к данным
- •Мобильные приложения
- •Насыщенное клиентское приложение
- •Насыщенное Интернет-приложение
- •Сервисы
- •Рабочий процесс
- •Веб-приложения
- •Веб-сервер – Internet Information Services
- •Сервер базы данных – SQL Server
- •Среда разработки Visual Studio
- •Другие инструменты и библиотеки
- •Решения patterns & practices
- •Дополнительные источники
- •Матрица технологий слоя представления
- •Обзор
- •Обзор технологий представления
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Преимущества и недостатки
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Общие сценарии и решения
- •Мобильные приложения
- •Насыщенные клиентские приложения
- •Насыщенные Интернет-приложения
- •Веб-приложения
- •Дополнительные источники
- •Матрица технологий слоя доступа к данным
- •Обзор
- •Обзор технологий доступа к данным
- •Преимущества и недостатки
- •Объектно-реляционный доступ к данным
- •Доступ к данным без подключения и в автономном режиме
- •Сценарии SOA/Сервис
- •N-уровневые и общие сценарии
- •Общие рекомендации
- •Общие сценарии и решения
- •Рекомендации по применению LINQ to SQL
- •Рекомендации по применению мобильных технологий
- •Дополнительные источники
- •Матрица интеграционных технологий
- •Обзор
- •Обзор интеграционных технологий
- •Преимущества и недостатки
- •Общие сценарии и решения
- •Дополнительные источники
- •Матрица технологий рабочего процесса
- •Обзор
- •Обзор технологий рабочего процесса
- •Пользовательский и системный рабочий процесс
- •Преимущества и недостатки
- •Общие сценарии и решения
- •Дополнительные источники
- •Enterprise Library от patterns & practices
- •Обзор
- •Назначение Enterprise Library
- •Составляющие Enterprise Library
- •Блоки приложений
- •Блок кэширования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок шифрования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок доступа к данным
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок обработки исключений
- •Ключевые сценарии
- •Применение
- •Блок протоколирования
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок внедрения политик
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок безопасности
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок Unity
- •Ключевые сценарии
- •Применение
- •Замечания
- •Блок валидации
- •Ключевые сценарии
- •Применение
- •Замечания
- •Дополнительные источники
- •Каталог шаблонов patterns & practices
- •Шаблоны передачи данных
- •Шаблоны корпоративных решений
- •Шаблоны интеграции
- •Шаблоны безопасности Веб-сервисов
- •Дополнительные источники
Определите набор операций, осуществляемых сервисом; структуры данных, передаваемые с запросом к сервису; и ошибки или сбои, возвращаемые запросом к сервису.
Выберите соответствующую модель безопасности для сервисов. Более подробно эти вопросы рассматриваются в статье «Improving Web Services Security: Scenarios and Implementation Guidance for WCF» (Повышение безопасности Веб-сервисов:
сценарии и руководство по реализации для WCF) по адресу http://msdn.microsoft.com/en-us/library/cc949034.aspx.
Избегайте использования составных типов в сообщениях. Применение только простых типов обеспечит максимальную возможность взаимодействия.
Более подробно REST и SOAP рассматриваются в главе 25, «Проектирование приложений сервисов».
Вопросы выбора технологий
Следующие рекомендации помогут правильно выбрать технологию для реализации слоя сервисов:
Для простоты используйте ASP.NET Web services (ASMX), но только если доступен Веб-сервер, работающий под управлением Microsoft Internet Information Services (IIS).
Используйте сервисы WCF, если требуется реализовать расширенные возможности, такие как надежные сеансы с гарантированной доставкой сообщений и транзакции, трассировка действий, протоколирование сообщений, счетчики производительности и поддержка нескольких транспортных протоколов.
Если для сервиса решено использовать ASMX и требуется обеспечить безопасность на уровне сообщения и передачу двоичных данных, можно применить Web Service Extensions (WSE)1. Однако, как правило, в случае необходимости реализации функциональность WSE следует переходить к WCF.
Если решено использовать WCF для сервиса:
◦Используйте HTTP-транспорт на базе спецификаций SOAP для обеспечения возможности взаимодействия с не-WCF и не-Windows клиентами.
◦Используйте протокол TCP и двоичное кодирование сообщений с безопасностью на транспортном уровне и аутентификацией Windows, если требуется поддерживать клиентов во внутренней сети.
◦Используйте протокол именованных каналов и бинарное кодирование сообщений, если требуется поддерживать WCF-клиентов, размещенных на том же компьютере.
1 Расширения Веб-сервисов (прим. переводчика).
◦Определяйте контракты сервисов, которые используют явную, а не неявную, оболочку сообщений. Это позволит определять контракты сообщений как вход и выход для операций, таким образом, вы сможете расширять контракты данных, включенные в контракты сообщения, не оказывая влияния на контракт сервиса.
Доступные технологии обмена сообщениями представлены в главе 18, «Взаимодействие и обмен сообщениями».
Вопросы развертывания
Слой сервисов может развертываться на одном уровне с другими слоями приложения или на разных уровнях, если это обусловлено требованиями производительности и изоляции. Тем не менее, в большинстве случаев слой сервисов располагается физически на одном уровне с бизнес-слоем, это позволяет обеспечить наилучшую производительность при предоставлении бизнес-функциональности. При развертывании слоя сервисов руководствуйтесь следующими рекомендациями:
Если это не идет в разрез с требованиями производительности и безопасности среды производственной эксплуатации, развертывайте слой сервисов на одном уровне с бизнес-слоем, это обеспечит максимальную производительность приложения.
Если сервис размещается на одном уровне с потребителем сервиса, используйте именованные каналы или протоколы общей памяти.
Если сервис используется только приложениями локальной сети, используйте для взаимодействия протокол TCP.
Если сервис публично доступен через Интернет, используйте HTTP в качестве транспортного протокола
Более подробно схемы развертывания рассматриваются в главе 19, «Физические уровни и развертывание».
Этапы проектирования слоя сервисов
Проектирование слоя сервисов начинается с определения интерфейса сервиса, состоящего из контрактов, которые планируется предоставлять. Обычно такой подход называют Contract First Design (Контрактно-ориентированное проектирование). Следующий шаг после определения интерфейса сервиса – проектирование реализации сервиса, который используется для преобразования контрактов данных в бизнес-сущности и для взаимодействия с бизнес-слоем. Проектирование слоя сервисов может включать следующие основные этапы:
1.Определение контрактов данных и сообщений, которые представляют используемую для сообщений схему.
2.Определение контрактов сервиса, которые представляют операции, поддерживаемые сервисом.
3.Определение контрактов сбоев, которые возвращают данные об ошибках потребителям сервиса.
4.Проектирование объектов преобразований, которые обеспечивают преобразования между бизнес-сущностями и контрактами данных.
5.Проектирования абстракции, используемой для взаимодействия с бизнес-слоем.
Для разработки Веб-сервисов можно использовать инструменты проектирования, такие как
Web Service Software Factory: Modeling Edition (также известный как Service Factory) от группы patterns & practices. Этот интегрированный набор ресурсов создан с целью обеспечить возможность быстро и единообразно создавать Веб-сервисы с использованием широко известных архитектурных схем и шаблонов проектирования. Более подробно данные вопросы рассматриваются в статье «Web Service Software Factory: Modeling Edition» (Фабрика ПО для разработки Веб-сервисов: издание для построения моделей) по адресу http://msdn.microsoft.com/en-us/library/cc487895.aspx.
Проектирование контрактов сообщений и подход Contract-First рассматриваются в главе 18, «Взаимодействие и обмен сообщениями». Абстракции в многослойных архитектурах посвящена глава 5, «Рекомендации по проектированию многослойных приложений».
Шаблоны проектирования
Основные шаблоны организованы по категориям и представлены в следующей таблице. Рассмотрите возможности применения этих шаблонов при принятии проектных решений для каждой из категорий.
Категория |
Шаблоны проектирования |
|
|
Сетевое |
Duplex (Двусторонний обмен сообщениями). Двунаправленный обмен |
взаимодействие |
сообщениями, при котором и сервис, и клиент отправляют сообщения |
|
друг другу независимо и без учета того, какой шаблон используется, One- |
|
Way (Однонаправленный) или Request-Reply (Запрос-ответ). |
|
Fire and Forget (Отправил и забыл). Однонаправленный обмен |
|
сообщениями, используемый, когда ожидать ответа нет необходимости. |
|
Reliable Sessions (Надежные сеансы). Надежная передача сообщений |
|
из конца в конец между источником и точкой назначения, не зависящая от |
|
количества или типа посредников между конечными точками. |
|
Request Response (Запрос-ответ). Механизм двунаправленного обмена |
|
сообщениями, при котором клиент ожидает ответа на каждое |
|
отправленное сообщение. |
|
|
Каналы обмена |
Channel Adapter (Адаптер канала). Компонент, который может |
сообщениями |
выполнять доступ к API или данным приложения и на основании этих |
|
данных публиковать сообщения в канале, а также может принимать |
|
сообщения и вызывать функции приложения. |
|
Message Bus (Шина сообщений). Структурирует связующее |
|
промежуточное ПО между приложениями как шину связи, что позволяет |
|
приложениям взаимодействовать, используя обмен сообщениями. |
|
Messaging Bridge (Мост обмена сообщениями). Компонент, |
|
соединяющий обменивающиеся сообщениями системы и тиражирующий |
|
сообщения между этими системами. |
|
Point-to-Point Channel (Канал «точка-точка»). Передача сообщения по |
|
каналу «точка-точка» гарантирует, что получит это конкретное сообщение |
|
только один получатель. |
|
Publish-Subscribe Channel (Канал публикации-подписки). Создает |
|
механизм отправки сообщений только приложениям, заинтересованным в |
|
получении этих сообщений, без идентификации получателей. |
|
|
Структура сообщения |
Command Message (Сообщение с командой). Структура сообщения, |
|
используемая для поддержки команд. |
|
Document Message (Сообщение с данными документа). Структура, |
|
используемая для передачи документов или структуры данных между |
|
приложениями. |
|
Event Message (Сообщение о событии). Структура, обеспечивающая |
|
надежное асинхронное уведомление о событиях между приложениями. |
|
Request-Reply (Запрос-отклик). Запрос и отклик передаются по разным |
|
каналам. |
|
|
Конечная точка |
Competing Consumer (Конкурирующий потребитель). Задает несколько |
сообщения |
потребителей для одной очереди сообщений и заставляет их |
|
конкурировать за право обрабатывать сообщения, что позволяет |
|
обменивающемуся сообщениями клиенту обрабатывать множество |
|
сообщений одновременно. |
|
Durable Subscriber (Постоянный подписчик). Чтобы обеспечить |
|
гарантированную доставку в сценарии без подключения, сообщения |
|
сохраняются и затем предоставляются для доступа клиенту при |
|
подключении к каналу сообщений. |
|
Idempotent Receiver (Идемпотентный получатель). Гарантирует, что |
|
сервис обрабатывает сообщение только один раз. |
|
Message Dispatcher (Диспетчер сообщений). Компонент, рассылающий |
|
сообщения множеству потребителей. |
|
Messaging Gateway (Шлюз обмена сообщениями). Инкапсулирует |
|
вызовы, осуществляемые посредством обмена сообщениями, в один |
|
интерфейс, чтобы отделить их от остального кода приложения. |
|
Messaging Mapper (Преобразователь обмена сообщениями). |
|
Преобразует запросы в бизнес-объекты для входящих сообщений и |
|
выполняет обратный процесс для преобразования бизнес-объектов в |
|
ответные сообщения. |
|
Polling Consumer (Опрашивающий потребитель). Потребитель |
|
сервиса, который проверяет канал на наличие сообщений через равные |
|
промежутки времени. |
|
Selective Consumer (Избирательный потребитель). Потребитель |
|
сервиса, использующий фильтры для поучения только сообщений, |
|
соответствующих определенному критерию. |
|
Service Activator (Активатор сервиса). Сервис, принимающий |
|
асинхронные запросы для вызова операций в компонентах бизнес-слоя. |
|
Transactional Client (Транзакционный клиент). Клиент, который может |
|
реализовать транзакции при взаимодействии с сервисом. |
|
|
Безопасность |
Data Confidentiality (Конфиденциальность данных). Использует |
сообщений |
шифрование на уровне сообщений для защиты конфиденциальных |
|
|
|
данных в сообщении. |
|
Data Integrity (Целостность данных). Гарантированно обеспечивает |
|
защиту сообщений от повреждения или подделки при передаче. |
|
Data Origin Authentication (Аутентификация происхождения данных). |
|
Проводит проверку источника сообщения как расширенный метод |
|
обеспечения целостности данных. |
|
Exception Shielding (Экранирование исключений). При возникновении |
|
исключения предотвращает разглашение сервисом данных о его |
|
внутренней реализации. |
|
Federation (Объединение). Интегрированное представление данных, |
|
распределенных по многим сервисам и потребителям. |
|
Replay Protection (Защита от атак повторов). Обеспечивает |
|
идемпотентность сообщения, предотвращая возможность его перехвата и |
|
многократного выполнения злоумышленниками. |
|
Validation (Валидация). Проверяет содержимое и значения сообщений |
|
для обеспечения защиты сервиса от неправильно сформированного или |
|
злонамеренного содержимого. |
|
|
Маршрутизация |
Aggregator (Агрегатор). Фильтр, обеспечивающий сбор и сохранение |
сообщения |
взаимосвязанных сообщений, объединение этих сообщений и публикацию |
|
в выходном канале одного агрегатного сообщения для дальнейшей |
|
обработки. |
|
Content-Based Router (Маршрутизатор на основе содержимого). |
|
Выполняет маршрутизацию каждого сообщения к соответствующему |
|
потребителю, исходя из содержимого сообщения, например, наличия |
|
определенных полей, заданных значений полей и т.д. |
|
Dynamic Router (Динамический маршрутизатор). Компонент, |
|
выполняющий динамическую маршрутизацию сообщения к потребителю |
|
на основании оценки условий/правил, заданных потребителем. |
|
Message Broker (Hub and Spoke) (Брокер сообщений (веерная |
|
структура)). Центральный компонент, взаимодействующий с множеством |
|
приложений для получения сообщений из многих источников; определяет |
|
место назначения сообщения и направляет его в соответствующий канал. |
|
Message Filter (Фильтр сообщений). На основании заданных критериев |
|
предотвращает передачу по каналу потребителю нежелательных |
|
сообщений. |
|
Process Manager (Диспетчер процесса). Компонент, обеспечивающий |
|
маршрутизацию сообщений через множество этапов рабочего процесса. |
|
|
Преобразование |
Canonical Data Mapper (Канонический преобразователь данных). |
сообщения |
Использует общий формат данных для осуществления преобразований |
|
между двумя несопоставимыми форматами данных. |
|
Claim Check (Проверка утверждений). Извлекает данные из постоянного |
|
хранилища по необходимости. |
|
Content Enricher (Расширитель содержимого). Дополняет сообщения |
|
недостающими данными, полученными из внешнего источника данных. |
|
Content Filter (Фильтр содержимого). Удаляет конфиденциальные |
|
данные из сообщения и максимально сокращает объем сетевого трафика, |
|
удаляя ненужные данные из сообщения. |
|
Envelope Wrapper (Оболочка конверта). Оболочка сообщений, |
|
включающая данные заголовка, используемые, например, для защиты, |
|
маршрутизации или аутентификации сообщения. |
|
Normalizer (Нормализатор). Преобразует или трансформирует данные в |
|
общий формат обмена, если организации используют разные форматы. |
|
|
REST |
Behavior (Поведение). Применяется к ресурсам, выполняющим |
|
операции. Обычно такие ресурсы не содержат состояния и поддерживают |
|
только операцию POST. |
|
Container (Контейнер). Создает шаблон сущности, обеспечивая средства |
|
для динамического добавления и/или обновления вложенных ресурсов. |
|
Entity (Сущность). Ресурсы, чтение которых может быть осуществлено |
|
операцией GET, но изменение возможно только с помощью операций PUT |
|
и DELETE. |
|
Store (Хранилище). Обеспечивает возможность создания и обновления |
|
сущностей с помощью операции PUT. |
|
Transaction (Транзакция). Ресурсы, поддерживающие транзакционные |
|
операции. |
|
|
Интерфейс сервиса |
Façade (Фасад). Реализует унифицированный интерфейс для набора |
|
операций, чтобы обеспечить упрощенный интерфейс и уменьшить |
|
связанность систем. |
|
Remote Façade (Удаленный фасад). Создает обобщенный |
|
унифицированный интерфейс для набора операций или процессов в |
|
удаленной подсистеме, обеспечивая обобщенный интерфейс для |
|
детализированных операций, чтобы упростить использование этой |
|
подсистемы и свести до минимума вызовы по сети. |
|
Service Interface (Интерфейс сервиса). Программный интерфейс, |
|
который может использоваться другими системами для взаимодействия с |
|
сервисом. |
|
|
SOAP |
Data Contract (Контракт данных). Схема, определяющая структуры |
|
данных, передаваемые с запросом к сервису. |
|
Fault Contracts (Контракты сбоев). Схема, определяющая ошибки или |
|
сбои, которые могут быть возвращены из запроса к сервису. |
|
Service Contract (Контракт сервиса). Схема, определяющая операции, |
|
которые может осуществлять сервис. |
|
|
Более подробно шаблоны Duplex и Request Response рассматриваются в статье «Designing Service Contracts» (Проектирование контрактов сервисов) по адресу http://msdn.microsoft.com/en-us/library/ms733070.aspx.
Более подробно шаблон Request-Reply рассматривается в статье «Request-Reply» (Запрос-
ответ) по адресу http://www.eaipatterns.com/RequestReply.html.
Более подробно шаблоны Command, Document Message, Event Message, Durable Subscriber, Idempotent Receiver, Polling Consumer и Transactional Client рассматриваются в статье
«Messaging Patterns in Service-Oriented Architecture, Part I» (Шаблоны обмена сообщениями в сервисно-ориентированной архитектуре. Часть I) по адресу http://msdn.microsoft.com/enus/library/aa480027.aspx.