Basic Services
Классификация сервисов
Для удобства сервисы классифицируют по следующей схеме:
- Application frontends – хотя они и не являются сервисами, они являются неотъемлимой частью SOA. Они инициируют все бизнес процессы и получают конечный результат. Типичными примерами application frontend’ов являются GUI или batch (пакетные) процессы.
- Basic services – являются фундаментов в SOA. Они представляют основные элементы вертикального домена. Базовые сервисы могут быть дата- или логик- ориентированные.
- Intermediary services – разделяются на технологические шлюзы (technology gateway), адаптеры, фасады и сервисы добавляющие функциональность (functionality-added services). В отличие от process centric services промежуточные сервисы не содержат состояния (stateless).
- Process centric services – инкапсулируют знания о бизнес процессе организации. Этот тип сервисов как правило поддерживает состояния, т.е. является stateful.
- Public enterprise services – предоставляют интерфейсы для взаимодействия между предприятиями. По эти причинам они как правило менее детализированы (coarse-grained) и предоставляют такие необходимые механизмы как безопасность (security), биллинг (billing) и отказоустойчивость.
Выделенные типы сервисов обладают радом различающихся характеристик.
Basic services | Intermediary services | Process-centric services | Public enterprise services | |
Описание | Простые дата- или бизнеслогика- ориентированные сервисы | Технологические адаптеры, мосты и фасады (adapters, façades, gateways) | Инкапсулируют логику процесса | Сервис, разделяемый с другим предприятием или партнёрами |
Сложность реализации | От низкой до средней | От средней до высокой | высокая | Зависит от конкретного сервиса |
Управление состоянием (state management) | Нет (stateless) | Нет (stateless) | Да (stateful) | Зависит от конкретного сервиса |
Переиспользуемость (reusability) | высокая | низкая | низкая | Высокая |
Частота изменений | низкая | От умеренной до высокой | высокая | низкая |
Обязательно для архитектуры SOA | да | нет | нет | Нет |
Базовые сервисы являются основным компонентом в архитектуре SOA. Они являются простыми сервисами и не поддерживают состояние. Различают два вида базовых сервисов – дата- и логика-ориентированные. В действительности, это различие весьма условное и граница между типами сервисов достаточно прозрачная. Деление на эти два подтипа обусловлено чисто академическими принципами.
Сервисы ориентированные на данные (data oriented services)
Их основной задачей является предоставление услуг по сохранению и поиску данных, блокировка и поддержка транзакций. В чистом виде такие сервисы не предоставляют никакой бизнес логики по обработки этих данных., за исключением, возможно бизнес валидации. Основным отличием от технических сервисов обработки данных является их вертикальное выделение. В то время как обычные технические сервиса (например Data Access Layer) предоставляют услуги по работе с абстрактными данными для всей системы (или приложения), бизнес сервисы предоставляют услуги по сохранению лишь связанной группы сущностей, например, заказ на поставку товара. Как следствие большое приложение требует наличия нескольких data-centric service’ов.
Одной из основных задач создания SOA архитектуры является выделение основных сущностей, наподобие того, как это делается в ER-моделях (сущность-связь). Однако, важно понимать, что полученные сущности являются лишь входными и выходными данными для сервисов. Важным отличием является то, что сервисы не могут содержать взаимосвязи друг на друга, как это можно сделать, например, в связанном графе объектов.
Проектирование data-oriented сервисов порождает ряд проблем, с которыми разработчики не сталкиваются при проектировании единой монолитной схемы данных. Это проблема владения данными. Т.е. в данном случае - какую сущность отнести к какому сервису. Сразу возникает ряд связанных проблем с распределением транзакционности.
Logic-centric Services
Такие сервисы инкапсулируют сложную обработку бизнес правил или вычислений. В традиционных приложениях этот тип функциональности, как правило, сосредоточен в библиотеках классов. Сервисы бизнес логики пользуются услугами сервисов данных и других сервисов бизнес логики, что в результате даёт возможность группировать эти сервисы и строить довольно сложные конфигурации вычисления бизнес правил.