25.09.2019

Сервис-ориентированная архитектура. SOA Архитектурные особенности и практические аспекты


Сервис-ориентированная архитектура (SOA) — настоящей статье рассматриваются способы обоснования эффективности, а также варианты ее внедрения с минимальными затратами.

Любое ИТ-подразделение занимается оптимизацией своих внутренних процессов и технологий с целью снижения затрат и повышения востребованности ИТ в компании. Управление требованиями, изменениями, инцидентами и проблемами — все эти процессы служат объектами для оптимизации, но практика показала, что на этом много не сэкономить.

Эффект от оптимизации процессов управления информационными технологиями для бизнеса незначителен: если затраты на ИТ были сокращены на 5%, а в общей сумме затрат компании они составляют всего 2%, то суммарный эффект от оптимизации — 0,1%. Достигнутые результаты не приносят ожидаемого эффекта на уровне бизнеса, поэтому энтузиазм ИТ-специалистов часто сопровождается разочарованием.

От применения сервис-ориентированной архитектуры (SOA) при построении ИТ-решения эффект может быть намного существеннее, поскольку преимущества SOA не столько в кратковременном сокращении затрат, сколько в усилении адаптивности информационных систем и всей компании в целом. Адаптивность — это очень важное качество сегодня, стратегический приоритет. В более длительной перспективе, на стратегическом горизонте, применение SOA также позволяет оптимизировать затраты на развитие ИТ в компании на больший процент, чем оптимизация процессов ИТ-подразделения. Однако возникает вопрос: как помочь компании воспользоваться преимуществами от внедрения SOA.

Любой проект, в том числе проект развития ИТ, при включении его в бизнес-план сейчас оценивается с точки зрения окупаемости сделанных инвестиций (ROI). В общем случае ROI рассчитывается следующим образом: определяется смета расходов, необходимых для разработки нового решения, затем оценивается полезность этого решения с точки зрения эффективности и результативности, а также время, необходимое для того, чтобы новое решение начало приносить доход или обеспечило сокращение издержек.

Данный алгоритм при кажущейся простоте требует детального анализа и оценки преимуществ от применения SOA. Самые важные из них:

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

Для расчета ROI указанные преимущества необходимо оцифровать соответствующими показателями и отслеживать через них по ходу проекта экономическую эффективность применения SOA. Следовательно, внедряя SOA, важно анализировать получаемые преимущества уже на первых шагах, что и поможет получить одобрение и финансирование от бизнеса.
По прогнозу экспертов Aberdeen Group, в течение пяти лет крупнейшие мировые компании ожидают экономии до 53 трлн долл. за счет внедрения SOA.

Сервис-ориентированная архитектура — тактика внедрения

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

Такие частые замены могут стоить компании больших денег, а ИТ-директору — карьеры, поэтому смотреть на существующий ИТ-ландшафт нужно с прагматичной точки зрения. Все, что еще может послужить, — пусть служит, и лучший способ перехода от существующего ИТ-ландшафта к целевому (основанному на SOA) — это разбивка приложений на отдельные сервисы с четко определенными интерфейсами, что позволит спланировать каждый этап перехода. В результате получается адаптивное ИТ-решение, для которого основные затраты приходятся на поддержание, определение ценности каждого компонента и принятие решения о его дальнейшей судьбе.

После того как приложение разделено на компоненты, адаптивность системы становится заметнее, что отражается на ускорении внесения изменений в ИТ-решение. Создавая композитное приложение на базе SOA, компания получает определенную гибкость в принятии решений о том, как и куда двигаться дальше, не будучи связанной выбранными ИТ-платформами и унаследованными информационными системами. При этом разделенное на части приложение проще поддерживать или заменить в случае необходимости. Такое разделение на отдельные компоненты способствуют повышению качества информационной системы в целом, так как зависимости между компонентами становятся более понятными, а влияние изменений — предсказуемым.
Итак, ощутимыми выгодами от проведения модернизации и интеграции приложений в соответствии с принципами SOA являются:
контролируемые расходы при изменении функциональности информационных систем;
сокращение времени адаптации сложных информационных систем к постоянно изменяющимся бизнес-процессам компании;
систематизация компонентов ИТ-архитектуры и повышение степени интегрированности информационных систем компании;
быстрые результаты при автоматизации новых функциональных областей;
сокращение затрат на поддержку информационной системы через унификацию компонентов.
Данные цели не так противоречивы, как может показаться на первый взгляд, и отражают естественное желание бизнеса иметь эффективную ИТ-поддержку, т.е. прозрачные, гибкие и надежные информационные системы, изменения в которые можно вносить мгновенно.

Сервис-ориентированная архитектура — стратегия внедрения

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

В стратегии развертывания SOA должны быть предложены и организационные стимулы, например продвижение преимуществ работы с SOA посредством организации обучения и создания системы поощрения специалистов. Умение мотивировать может обеспечить успех внедрения SOA без поддержки сверху — методом «снизу-вверх». Первая группа, на которую надо обратить внимание, — поставщики сервисов. В компании, привыкшей разрабатывать требуемый функционал в виде отдельных приложений, сотрудники могут сопротивляться переходу на сервисы. Преимущества работы с сервисами им неочевидны, и они просто не хотят связывать себя дополнительной ответственностью, поэтому необходима мотивация. Вторая группа — потребители сервисов. Идея использования сервисов от других поставщиков или их типизации внутри компании может быть воспринята потребителями как угроза того, что их требования не будут учтены в должной мере.

Система мотивации должна предусматривать следующие основные принципы:

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

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

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

Сервис-ориентированная архитектура и технологии BPM, ESB

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

Внедрение SOA невозможно без технологии управления бизнес-процессами (Business Process Management, BPM), которая поможет быстро компоновать новые автоматизированные процессы с учетом существующих сервисов. Сочетание принципов SOA с технологией BPM и BPM-системой гарантирует согласованность выполнения процесса без жесткой привязки к кодированию. В свою очередь BPM-система позволяет определить рамки использования компонентов и необходимость их типизации.

Далее при внедрении SOA потребуется инструментарий SOA Governance — библиотека унифицированных сервисов, которая обеспечит общий доступ к компонентам композитной среды для их повторного использования. SOA также должна поддерживаться определенным интеграционным инструментарием (Enterprise Service Bus, ESB), предназначенным для интеграции разнородных ИТ-ресурсов и рационализации обмена данными с помощью сервисной шины. И хотя в принципе SOA может быть построена без ESB, по мнению большинства аналитиков, именно интеграционная шина служит ключевым решением для сервис-ориентированной архитектуры.

А.Коптелов
Руководитель практики внедрения бизнес-приложений IDS Scheer Россия и страны СНГ

  • Совершенный код
    • Перевод

    Сервис-ориентированная архитектура (service-oriented architecture, SOA) придумана в конце 1980-х. Она берёт своё начало в идеях, изложенных в CORBA, DCOM, DCE и других документах. О SOA написано много, есть несколько её реализаций. Но, по сути, SOA можно свести к нескольким идеям, причём архитектура не диктует способы их реализации:

    • Сочетаемость приложений, ориентированных на пользователей.
    • Многократное использование бизнес-сервисов.
    • Независимость от набора технологий.
    • Автономность (независимые эволюция, масштабируемость и развёртываемость).

    SOA - это набор архитектурных принципов, не зависящих от технологий и продуктов, совсем как полиморфизм или инкапсуляция.


    В этой статье я рассмотрю следующие паттерны, относящиеся к SOA:

    • Общая архитектура брокера объектных запросов (CORBA).
    • Веб-сервисы.
    • Очередь сообщений.
    • Сервисная шина предприятия (ESB).
    • Микросервисы.

    Общая архитектура брокера объектных запросов (CORBA)

    В 1980-х началось активное использование корпоративных сетей и клиент-серверной архитектуры. Возникла потребность в стандартном способе взаимодействия приложений, которые созданы с использованием разных технологий, исполняются на разных компьютерах и под разными ОС. Для этого была разработана CORBA. Это один из стандартов распределённых вычислений, зародившийся в 1980-х и расцветший к 1991 году.


    Стандарт CORBA был реализован несколькими вендорами. Он обеспечивает:

    • Не зависящие от платформы вызовы удалённых процедур (Remote Procedure Call).
    • Транзакции (в том числе удалённые!).
    • Безопасность.
    • События.
    • Независимость от выбора языка программирования.
    • Независимость от выбора ОС.
    • Независимость от выбора оборудования.
    • Набор данных через язык описания интерфейсов (Interface Definition Language, IDL).

    Сегодня CORBA всё ещё используется для разнородных вычислений. Например, он до сих пор является частью Java EE , хотя начиная с Java 9 будет поставляться в виде отдельного модуля .


    Хочу отметить, что не считаю CORBA паттерном SOA (хотя отношу и CORBA, и SOA-паттерны к сфере распределённых вычислений). Я рассказываю о нём здесь, поскольку считаю недостатки CORBA одной из причин возникновения SOA.

    Принцип работы

    Сначала нам нужно получить брокер объектных запросов (Object Request Broker, ORB), который соответствует спецификации CORBA. Он предоставляется вендором и использует языковые преобразователи (language mappers) для генерирования «заглушек» (stub) и «скелетов» (skeleton) на языках клиентского кода. С помощью этого ORB и определений интерфейсов, использующих IDL (аналог WSDL), можно на основе реальных классов генерировать в клиенте удалённо вызываемые классы-заглушки (stub classes). А на сервере можно генерировать классы-скелеты (skeleton classes), обрабатывающие входящие запросы и вызывающие реальные целевые объекты.



    Вызывающая программа (caller) вызывает локальную процедуру, реализованную заглушкой.

    1. Заглушка проверяет вызов, создаёт сообщение-запрос и передаёт его в ORB.
    2. Клиентский ORB шлёт сообщение по сети на сервер и блокирует текущий поток выполнения.
    3. Серверный ORB получает сообщение-запрос и создаёт экземпляр скелета.
    4. Скелет исполняет процедуру в вызываемом объекте.
    5. Вызываемый объект проводит вычисления и возвращает результат.
    6. Скелет пакует выходные аргументы в сообщение-ответ и передаёт его в ORB.
    7. ORB шлёт сообщение по сети клиенту.
    8. Клиентский ORB получает сообщение, распаковывает и передаёт информацию заглушке.
    9. Заглушка передаёт выходные аргументы вызывающему методу, разблокирует поток выполнения, и вызывающая программа продолжает свою работу.

    Достоинства

    • Независимость от выбранных технологий (не считая реализации ORB).
    • Независимость от особенностей передачи данных/связи.

    Недостатки

    • Независимость от местоположения : клиентский код не имеет понятия, является ли вызов локальным или удалённым. Звучит неплохо, но длительность задержки и виды сбоев могут сильно варьироваться. Если мы не знаем, какой у нас вызов, то приложение не может выбрать подходящую стратегию обработки вызовов методов, а значит, и генерировать удалённые вызовы внутри цикла. В результате вся система работает медленнее.
    • Сложная, раздутая и неоднозначная спецификация : её собрали из нескольких версий спецификаций разных вендоров, поэтому (на тот момент) она была раздутой, неоднозначной и трудной в реализации.
    • Заблокированные каналы связи (communication pipes) : используются специфические протоколы поверх TCP/IP, а также специфические порты (или даже случайные порты). Но правила корпоративной безопасности и файрволы зачастую допускают HTTP-соединения только через 80-й порт, блокируя обмены данными CORBA.

    Веб-сервисы

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


    И для решения этих задач в конце 1990-х начали появляться веб-сервисы.

    • Нужен был надёжный канал связи , поэтому:
      • HTTP стал по умолчанию работать через порт 80.
      • Для обмена сообщениями начали использовать платформо-независимый язык (вроде XML или JSON).
    • Нужно было уменьшить количество удалённых обращений , поэтому:
    [Веб-]сервисы можно публиковать, находить и использовать стандартным образом вне зависимости от технологий.
    - Microsoft 2004,


    Благодаря микросервисам мы перешли в парадигме SOA от удалённого вызова методов объекта (CORBA) к передаче сообщений между сервисами.


    Но нужно понимать, что в рамках SOA веб-сервисы - не просто API общего назначения, всего лишь предоставляющие CRUD-доступ к базе данных через HTTP. В каких-то случаях эта реализация может быть полезной, но ради целостности ваших данных необходимо, чтобы пользователи понимали лежащую в основе реализации модель и соблюдали бизнес-правила . SOA подразумевает, что веб-сервисы являются ограниченными контекстами бизнес-субдоменов (business sub-domain) и отделяет реализацию от решаемых веб-сервисами задач.


    С точки зрения технологий SOA не просто сервисная архитектура, а набор политик, методик и фреймворков, благодаря которым мы предоставляем и получаем нужные сервисы.
    - Microsoft 2004, Understanding Service-Oriented Architecture

    Достоинства

    • Изолированность контекстов доменов (Domain contexts).

    Недостатки

    • Синхронный обмен сообщениями может перегрузить системы.

    Очередь сообщений

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


    Очередь сообщений использует в качестве компонента инфраструктуры программный брокер сообщений (RabbitMQ, Beanstalkd, Kafka и т. д.). Для реализации связи между приложениями можно по-разному настроить очередь:

    • Запрос/Ответ

      • Клиент шлёт в очередь сообщение, включая ссылку на «разговор» («conversation» reference) . Сообщение приходит на специальный узел, который отвечает отправителю другим сообщением, где содержится ссылка на тот же разговор , так что получатель знает, на какой разговор ссылается сообщение, и может продолжать действовать. Это очень полезно для бизнес-процессов средней и большой продолжительности (цепочек событий, sagas ).
    • Публикация/Подписка
      • По спискам
        Очередь поддерживает списки опубликованных тем подписок (topics) и их подписчиков. Когда очередь получает сообщение для какой-то темы, то помещает его в соответствующий список. Сообщение сопоставляется с темой по типу сообщения или по заранее определённому набору критериев, включая и содержимое сообщения.
      • На основе вещания
        Когда очередь получает сообщение, она транслирует его всем узлам, прослушивающим очередь. Узлы должны сами фильтровать данные и обрабатывать только интересующие сообщения.


    Все эти паттерны можно отнести к либо к pull- (polling) , либо к push -подходу:

    • В pull-сценарии клиент опрашивает очередь с определённой частотой. Клиент управляет своей нагрузкой, но при этом может возникнуть задержка: сообщение уже лежит в очереди, а клиент его ещё не обрабатывает, потому что не пришло время следующего опроса очереди.
    • В push-сценарии очередь сразу же отдаёт клиентам сообщения по мере поступления. Задержки нет, но клиенты не управляют своей нагрузкой.

    Достоинства

    • Независимость набора технологий, развёртывания и масштабируемости сервисов.
    • Стандартный, простой и надёжный канал связи (передача текста по HTTP через порт 80).
    • Оптимизированный обмен сообщениями.
    • Стабильная спецификация обмена сообщениями.

    Недостатки

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

    Сервисная шина предприятия (ESB)

    Сервисная шина предприятия использовала веб-сервисы уже в 1990-х, когда они только развивались (быть может, некоторые реализации сначала использовали CORBA?).


    ESB возникла во времена, когда в компаниях были отдельные приложения. Например, одно для работы с финансами, другое для учёта персонала, третье для управления складом, и т. д., и их нужно было как-то связывать друг с другом, как-то интегрировать. Но все эти приложения создавались без учёта интеграции, не было стандартного языка для взаимодействия приложений (как и сегодня). Поэтому разработчики приложений предусматривали конечные точки для отправки и приёма данных в определённом формате. Компании-клиенты потом интегрировали приложения, налаживая между ними каналы связи и преобразуя сообщения с одного языка приложения в другой.


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



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


    Клиент (сервис или модульное приложение) отправляет запрос на сервисную шину, которая преобразует сообщение в формат, поддерживаемый в точке назначения, и перенаправляет туда запрос. Всё взаимодействие идёт через сервисную шину, так что если она падает, то с ней падают и все остальные системы. То есть ESB - ключевой посредник, очень сложный компонент системы.


    Это очень упрощённое описание архитектуры ESB. Более того, хотя ESB является главным компонентом архитектуры, в системе могут использоваться и другие компоненты вроде доменных брокеров (Domain Broker), сервисов данных (Data Service), сервисов процессной оркестровки (Process Orchestration Service) и обработчиков правил (Rules Engine). Тот же паттерн может использовать интегрированная архитектура (federated design): система разделена на бизнес-домены со своими ESB, и все ESB соединены друг с другом. У такой схемы выше производительность и нет единой точки отказа: если какая-то ESB упадёт, то пострадает лишь её бизнес-домен.



    Главные обязанности ESB:

    • Отслеживать и маршрутизировать обмен сообщениями между сервисами.
    • Преобразовывать сообщения между общающимися сервисными компонентами.
    • Управлять развёртыванием и версионированием сервисов.
    • Управлять использованием избыточных сервисов.
    • Предоставлять стандартные сервисы обработки событий, преобразования и сопоставления данных, сервисы очередей сообщений и событий, сервисы обеспечения безопасности или обработки исключений, сервисы преобразования протоколов и обеспечения необходимого качества связи.
    Создавая структуры связи между разными процессами, мы видели много продуктов и подходов, в которых применяются очень развитые механизмы связи. Хороший пример - сервисные шины предприятий, часто включающие в себя сложные средства маршрутизации сообщений, хореографии, преобразования и применения бизнес-правил.
    - Martin Fowler 2014, Microservices

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


    Достоинства

    • Независимость набора технологий, развёртывания и масштабируемости сервисов.
    • Стандартный, простой и надёжный канал связи (передача текста по HTTP через порт 80).
    • Оптимизированный обмен сообщениями.
    • Стабильная спецификация обмена сообщениями.
    • Изолированность контекстов домена (Domain contexts).
    • Простота подключения и отключения сервисов.
    • Асинхронность обмена сообщениями помогает управлять нагрузкой на систему.
    • Единая точка для управления версионированием и преобразованием.

    Недостатки

    • Ниже скорость связи, особенно между уже совместимыми сервисами.
    • Централизованная логика:
      • Единая точка отказа, способная обрушить системы связи всей компании.
      • Большая сложность конфигурирования и поддержки.
      • Со временем можно прийти к хранению в ESB бизнес-правил.
      • Шина так сложна, что для её управления вам потребуется целая команда.
      • Высокая зависимость сервисов от ESB.

    Микросервисы

    В основе микросервисной архитектуры лежат концепции SOA. Назначение у неё то же, что и у ESB: создать единое общее корпоративное приложение из нескольких специализированных приложений бизнес-доменов.


    Главное различие микросервисов и шины в том, что ESB была создана в контексте интеграции отдельных приложений , чтобы получилось единое корпоративное распределённое приложение. А микросервисная архитектура создавалась в контексте быстро и постоянно меняющихся бизнесов, которые (в основном) с нуля создают собственные облачные приложения.


    То есть в случае с ESB у нас уже были приложения, которые нам не «принадлежат» , и поэтому мы не могли их изменить. А в случае с микросервисами мы полностью контролируем приложения (при этом в системе могут использоваться и сторонние веб-сервисы).


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


    [Микросервисы - это] маленькие автономные сервисы, работающие вместе и спроектированные вокруг бизнес-домена.
    - Sam Newman 2015, Principles Of Microservices

    Главным недостатком архитектуры ESB было очень сложное централизованное приложение, от которого зависели все остальные приложения. А в микросервисной архитектуре это приложение почти целиком убрано.


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


    • Проектирование сервисов вокруг бизнес-доменов
      Это может дать нам стабильные интерфейсы, высокосвязные и мало зависящие друг от друга модули кода, а также чётко определённые разграниченные контексты.
    • Культура автоматизации
      Это даст нам гораздо больше свободы, мы сможем развернуть больше модулей.
    • Скрытие подробностей реализации
      Это позволяет сервисам развиваться независимо друг от друга.
    • Полная децентрализация
      Децентрализуйте принятие решений и архитектурные концепции, предоставьте командам автономность, чтобы компания сама превратилась в сложную адаптивную систему, способную быстро приспосабливаться к переменам.
    • Независимое развёртывание
      Можно развёртывать новую версию сервиса, не меняя ничего другого.
    • Сначала потребитель
      Сервис должен быть простым в использовании, в том числе другими сервисами.
    • Изолирование сбоев
      Если один сервис падает, другие продолжают работать, это делает всю систему устойчивой к сбоям.
    • Удобство мониторинга
      В системе много компонентов, поэтому трудно уследить за всем, что в ней происходит. Нам нужны сложные инструменты мониторинга, позволяющие заглянуть в каждый уголок системы и отследить любую цепочку событий.


    Сообщество предпочитает другой подход: умные конечные точки и глупые каналы . Микросервисы, из которых собираются приложения, должны как можно меньше зависеть друг от друга и при этом быть очень тесно связанными - они содержат собственную доменную логику и работают скорее как фильтры с точки зрения классического Unix: получают запросы, применяют логику и генерируют ответы. Они оркестрируются с помощью простых REST-подобных протоколов, а не сложных протоколов вроде WS-Choreography или BPEL либо какого-то централизованного инструмента.
    - Martin Fowler 2014, Microservices

    Достоинства

    • Независимость набора технологий, развёртывания и масштабируемости сервисов.
    • Стандартный, простой и надёжный канал связи (передача текста по HTTP через порт 80).
    • Оптимизированный обмен сообщениями.
    • Стабильная спецификация обмена сообщениями.
    • Изолированность контекстов домена (Domain contexts).
    • Простота подключения и отключения сервисов.
    • Асинхронность обмена сообщениями помогает управлять нагрузкой на систему.
    • Синхронность обмена сообщениями помогает управлять производительностью системы.
    • Полностью независимые и автономные сервисы.
    • Бизнес-логика хранится только в сервисах.
    • Позволяют компании превратиться в сложную адаптивную систему, состоящую из нескольких маленьких автономных частей/команд, способную быстро адаптироваться к переменам.

    Недостатки

    • Высокая сложность эксплуатации:
      • Нужно много вложить в сильную DevOps-культуру.
      • Использование многочисленных технологий и библиотек может выйти из-под контроля.
      • Нужно аккуратно управлять изменениями входных/выходных API, потому что эти интерфейсы будут использовать многие приложения.
      • Использование «согласованности в конечном счёте» (eventual consistency) может привести к серьёзным последствиям, которые нужно учитывать при разработке приложения, от бэкенда до UX.
      • Тестирование усложняется, потому что изменения в интерфейсе могут непредсказуемо влиять на другие сервисы.
    • Перевод

    Сервис-ориентированная архитектура (service-oriented architecture, SOA) придумана в конце 1980-х. Она берёт своё начало в идеях, изложенных в CORBA, DCOM, DCE и других документах. О SOA написано много, есть несколько её реализаций. Но, по сути, SOA можно свести к нескольким идеям, причём архитектура не диктует способы их реализации:

    • Сочетаемость приложений, ориентированных на пользователей.
    • Многократное использование бизнес-сервисов.
    • Независимость от набора технологий.
    • Автономность (независимые эволюция, масштабируемость и развёртываемость).

    SOA - это набор архитектурных принципов, не зависящих от технологий и продуктов, совсем как полиморфизм или инкапсуляция.


    В этой статье я рассмотрю следующие паттерны, относящиеся к SOA:

    • Общая архитектура брокера объектных запросов (CORBA).
    • Веб-сервисы.
    • Очередь сообщений.
    • Сервисная шина предприятия (ESB).
    • Микросервисы.

    Общая архитектура брокера объектных запросов (CORBA)

    В 1980-х началось активное использование корпоративных сетей и клиент-серверной архитектуры. Возникла потребность в стандартном способе взаимодействия приложений, которые созданы с использованием разных технологий, исполняются на разных компьютерах и под разными ОС. Для этого была разработана CORBA. Это один из стандартов распределённых вычислений, зародившийся в 1980-х и расцветший к 1991 году.


    Стандарт CORBA был реализован несколькими вендорами. Он обеспечивает:

    • Не зависящие от платформы вызовы удалённых процедур (Remote Procedure Call).
    • Транзакции (в том числе удалённые!).
    • Безопасность.
    • События.
    • Независимость от выбора языка программирования.
    • Независимость от выбора ОС.
    • Независимость от выбора оборудования.
    • Набор данных через язык описания интерфейсов (Interface Definition Language, IDL).

    Сегодня CORBA всё ещё используется для разнородных вычислений. Например, он до сих пор является частью Java EE , хотя начиная с Java 9 будет поставляться в виде отдельного модуля .


    Хочу отметить, что не считаю CORBA паттерном SOA (хотя отношу и CORBA, и SOA-паттерны к сфере распределённых вычислений). Я рассказываю о нём здесь, поскольку считаю недостатки CORBA одной из причин возникновения SOA.

    Принцип работы

    Сначала нам нужно получить брокер объектных запросов (Object Request Broker, ORB), который соответствует спецификации CORBA. Он предоставляется вендором и использует языковые преобразователи (language mappers) для генерирования «заглушек» (stub) и «скелетов» (skeleton) на языках клиентского кода. С помощью этого ORB и определений интерфейсов, использующих IDL (аналог WSDL), можно на основе реальных классов генерировать в клиенте удалённо вызываемые классы-заглушки (stub classes). А на сервере можно генерировать классы-скелеты (skeleton classes), обрабатывающие входящие запросы и вызывающие реальные целевые объекты.



    Вызывающая программа (caller) вызывает локальную процедуру, реализованную заглушкой.

    1. Заглушка проверяет вызов, создаёт сообщение-запрос и передаёт его в ORB.
    2. Клиентский ORB шлёт сообщение по сети на сервер и блокирует текущий поток выполнения.
    3. Серверный ORB получает сообщение-запрос и создаёт экземпляр скелета.
    4. Скелет исполняет процедуру в вызываемом объекте.
    5. Вызываемый объект проводит вычисления и возвращает результат.
    6. Скелет пакует выходные аргументы в сообщение-ответ и передаёт его в ORB.
    7. ORB шлёт сообщение по сети клиенту.
    8. Клиентский ORB получает сообщение, распаковывает и передаёт информацию заглушке.
    9. Заглушка передаёт выходные аргументы вызывающему методу, разблокирует поток выполнения, и вызывающая программа продолжает свою работу.

    Достоинства

    • Независимость от выбранных технологий (не считая реализации ORB).
    • Независимость от особенностей передачи данных/связи.

    Недостатки

    • Независимость от местоположения : клиентский код не имеет понятия, является ли вызов локальным или удалённым. Звучит неплохо, но длительность задержки и виды сбоев могут сильно варьироваться. Если мы не знаем, какой у нас вызов, то приложение не может выбрать подходящую стратегию обработки вызовов методов, а значит, и генерировать удалённые вызовы внутри цикла. В результате вся система работает медленнее.
    • Сложная, раздутая и неоднозначная спецификация : её собрали из нескольких версий спецификаций разных вендоров, поэтому (на тот момент) она была раздутой, неоднозначной и трудной в реализации.
    • Заблокированные каналы связи (communication pipes) : используются специфические протоколы поверх TCP/IP, а также специфические порты (или даже случайные порты). Но правила корпоративной безопасности и файрволы зачастую допускают HTTP-соединения только через 80-й порт, блокируя обмены данными CORBA.

    Веб-сервисы

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


    И для решения этих задач в конце 1990-х начали появляться веб-сервисы.

    • Нужен был надёжный канал связи , поэтому:
      • HTTP стал по умолчанию работать через порт 80.
      • Для обмена сообщениями начали использовать платформо-независимый язык (вроде XML или JSON).
    • Нужно было уменьшить количество удалённых обращений , поэтому:
    [Веб-]сервисы можно публиковать, находить и использовать стандартным образом вне зависимости от технологий.
    - Microsoft 2004,


    Благодаря микросервисам мы перешли в парадигме SOA от удалённого вызова методов объекта (CORBA) к передаче сообщений между сервисами.


    Но нужно понимать, что в рамках SOA веб-сервисы - не просто API общего назначения, всего лишь предоставляющие CRUD-доступ к базе данных через HTTP. В каких-то случаях эта реализация может быть полезной, но ради целостности ваших данных необходимо, чтобы пользователи понимали лежащую в основе реализации модель и соблюдали бизнес-правила . SOA подразумевает, что веб-сервисы являются ограниченными контекстами бизнес-субдоменов (business sub-domain) и отделяет реализацию от решаемых веб-сервисами задач.


    С точки зрения технологий SOA не просто сервисная архитектура, а набор политик, методик и фреймворков, благодаря которым мы предоставляем и получаем нужные сервисы.
    - Microsoft 2004, Understanding Service-Oriented Architecture

    Достоинства

    • Изолированность контекстов доменов (Domain contexts).

    Недостатки

    • Синхронный обмен сообщениями может перегрузить системы.

    Очередь сообщений

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


    Очередь сообщений использует в качестве компонента инфраструктуры программный брокер сообщений (RabbitMQ, Beanstalkd, Kafka и т. д.). Для реализации связи между приложениями можно по-разному настроить очередь:

    • Запрос/Ответ

      • Клиент шлёт в очередь сообщение, включая ссылку на «разговор» («conversation» reference) . Сообщение приходит на специальный узел, который отвечает отправителю другим сообщением, где содержится ссылка на тот же разговор , так что получатель знает, на какой разговор ссылается сообщение, и может продолжать действовать. Это очень полезно для бизнес-процессов средней и большой продолжительности (цепочек событий, sagas ).
    • Публикация/Подписка
      • По спискам
        Очередь поддерживает списки опубликованных тем подписок (topics) и их подписчиков. Когда очередь получает сообщение для какой-то темы, то помещает его в соответствующий список. Сообщение сопоставляется с темой по типу сообщения или по заранее определённому набору критериев, включая и содержимое сообщения.
      • На основе вещания
        Когда очередь получает сообщение, она транслирует его всем узлам, прослушивающим очередь. Узлы должны сами фильтровать данные и обрабатывать только интересующие сообщения.


    Все эти паттерны можно отнести к либо к pull- (polling) , либо к push -подходу:

    • В pull-сценарии клиент опрашивает очередь с определённой частотой. Клиент управляет своей нагрузкой, но при этом может возникнуть задержка: сообщение уже лежит в очереди, а клиент его ещё не обрабатывает, потому что не пришло время следующего опроса очереди.
    • В push-сценарии очередь сразу же отдаёт клиентам сообщения по мере поступления. Задержки нет, но клиенты не управляют своей нагрузкой.

    Достоинства

    • Независимость набора технологий, развёртывания и масштабируемости сервисов.
    • Стандартный, простой и надёжный канал связи (передача текста по HTTP через порт 80).
    • Оптимизированный обмен сообщениями.
    • Стабильная спецификация обмена сообщениями.

    Недостатки

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

    Сервисная шина предприятия (ESB)

    Сервисная шина предприятия использовала веб-сервисы уже в 1990-х, когда они только развивались (быть может, некоторые реализации сначала использовали CORBA?).


    ESB возникла во времена, когда в компаниях были отдельные приложения. Например, одно для работы с финансами, другое для учёта персонала, третье для управления складом, и т. д., и их нужно было как-то связывать друг с другом, как-то интегрировать. Но все эти приложения создавались без учёта интеграции, не было стандартного языка для взаимодействия приложений (как и сегодня). Поэтому разработчики приложений предусматривали конечные точки для отправки и приёма данных в определённом формате. Компании-клиенты потом интегрировали приложения, налаживая между ними каналы связи и преобразуя сообщения с одного языка приложения в другой.


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



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


    Клиент (сервис или модульное приложение) отправляет запрос на сервисную шину, которая преобразует сообщение в формат, поддерживаемый в точке назначения, и перенаправляет туда запрос. Всё взаимодействие идёт через сервисную шину, так что если она падает, то с ней падают и все остальные системы. То есть ESB - ключевой посредник, очень сложный компонент системы.


    Это очень упрощённое описание архитектуры ESB. Более того, хотя ESB является главным компонентом архитектуры, в системе могут использоваться и другие компоненты вроде доменных брокеров (Domain Broker), сервисов данных (Data Service), сервисов процессной оркестровки (Process Orchestration Service) и обработчиков правил (Rules Engine). Тот же паттерн может использовать интегрированная архитектура (federated design): система разделена на бизнес-домены со своими ESB, и все ESB соединены друг с другом. У такой схемы выше производительность и нет единой точки отказа: если какая-то ESB упадёт, то пострадает лишь её бизнес-домен.



    Главные обязанности ESB:

    • Отслеживать и маршрутизировать обмен сообщениями между сервисами.
    • Преобразовывать сообщения между общающимися сервисными компонентами.
    • Управлять развёртыванием и версионированием сервисов.
    • Управлять использованием избыточных сервисов.
    • Предоставлять стандартные сервисы обработки событий, преобразования и сопоставления данных, сервисы очередей сообщений и событий, сервисы обеспечения безопасности или обработки исключений, сервисы преобразования протоколов и обеспечения необходимого качества связи.
    Создавая структуры связи между разными процессами, мы видели много продуктов и подходов, в которых применяются очень развитые механизмы связи. Хороший пример - сервисные шины предприятий, часто включающие в себя сложные средства маршрутизации сообщений, хореографии, преобразования и применения бизнес-правил.
    - Martin Fowler 2014, Microservices

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


    Достоинства

    • Независимость набора технологий, развёртывания и масштабируемости сервисов.
    • Стандартный, простой и надёжный канал связи (передача текста по HTTP через порт 80).
    • Оптимизированный обмен сообщениями.
    • Стабильная спецификация обмена сообщениями.
    • Изолированность контекстов домена (Domain contexts).
    • Простота подключения и отключения сервисов.
    • Асинхронность обмена сообщениями помогает управлять нагрузкой на систему.
    • Единая точка для управления версионированием и преобразованием.

    Недостатки

    • Ниже скорость связи, особенно между уже совместимыми сервисами.
    • Централизованная логика:
      • Единая точка отказа, способная обрушить системы связи всей компании.
      • Большая сложность конфигурирования и поддержки.
      • Со временем можно прийти к хранению в ESB бизнес-правил.
      • Шина так сложна, что для её управления вам потребуется целая команда.
      • Высокая зависимость сервисов от ESB.

    Микросервисы

    В основе микросервисной архитектуры лежат концепции SOA. Назначение у неё то же, что и у ESB: создать единое общее корпоративное приложение из нескольких специализированных приложений бизнес-доменов.


    Главное различие микросервисов и шины в том, что ESB была создана в контексте интеграции отдельных приложений , чтобы получилось единое корпоративное распределённое приложение. А микросервисная архитектура создавалась в контексте быстро и постоянно меняющихся бизнесов, которые (в основном) с нуля создают собственные облачные приложения.


    То есть в случае с ESB у нас уже были приложения, которые нам не «принадлежат» , и поэтому мы не могли их изменить. А в случае с микросервисами мы полностью контролируем приложения (при этом в системе могут использоваться и сторонние веб-сервисы).


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


    [Микросервисы - это] маленькие автономные сервисы, работающие вместе и спроектированные вокруг бизнес-домена.
    - Sam Newman 2015, Principles Of Microservices

    Главным недостатком архитектуры ESB было очень сложное централизованное приложение, от которого зависели все остальные приложения. А в микросервисной архитектуре это приложение почти целиком убрано.


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


    • Проектирование сервисов вокруг бизнес-доменов
      Это может дать нам стабильные интерфейсы, высокосвязные и мало зависящие друг от друга модули кода, а также чётко определённые разграниченные контексты.
    • Культура автоматизации
      Это даст нам гораздо больше свободы, мы сможем развернуть больше модулей.
    • Скрытие подробностей реализации
      Это позволяет сервисам развиваться независимо друг от друга.
    • Полная децентрализация
      Децентрализуйте принятие решений и архитектурные концепции, предоставьте командам автономность, чтобы компания сама превратилась в сложную адаптивную систему, способную быстро приспосабливаться к переменам.
    • Независимое развёртывание
      Можно развёртывать новую версию сервиса, не меняя ничего другого.
    • Сначала потребитель
      Сервис должен быть простым в использовании, в том числе другими сервисами.
    • Изолирование сбоев
      Если один сервис падает, другие продолжают работать, это делает всю систему устойчивой к сбоям.
    • Удобство мониторинга
      В системе много компонентов, поэтому трудно уследить за всем, что в ней происходит. Нам нужны сложные инструменты мониторинга, позволяющие заглянуть в каждый уголок системы и отследить любую цепочку событий.


    Сообщество предпочитает другой подход: умные конечные точки и глупые каналы . Микросервисы, из которых собираются приложения, должны как можно меньше зависеть друг от друга и при этом быть очень тесно связанными - они содержат собственную доменную логику и работают скорее как фильтры с точки зрения классического Unix: получают запросы, применяют логику и генерируют ответы. Они оркестрируются с помощью простых REST-подобных протоколов, а не сложных протоколов вроде WS-Choreography или BPEL либо какого-то централизованного инструмента.
    - Martin Fowler 2014, Microservices

    Достоинства

    • Независимость набора технологий, развёртывания и масштабируемости сервисов.
    • Стандартный, простой и надёжный канал связи (передача текста по HTTP через порт 80).
    • Оптимизированный обмен сообщениями.
    • Стабильная спецификация обмена сообщениями.
    • Изолированность контекстов домена (Domain contexts).
    • Простота подключения и отключения сервисов.
    • Асинхронность обмена сообщениями помогает управлять нагрузкой на систему.
    • Синхронность обмена сообщениями помогает управлять производительностью системы.
    • Полностью независимые и автономные сервисы.
    • Бизнес-логика хранится только в сервисах.
    • Позволяют компании превратиться в сложную адаптивную систему, состоящую из нескольких маленьких автономных частей/команд, способную быстро адаптироваться к переменам.

    Недостатки

    • Высокая сложность эксплуатации:
      • Нужно много вложить в сильную DevOps-культуру.
      • Использование многочисленных технологий и библиотек может выйти из-под контроля.
      • Нужно аккуратно управлять изменениями входных/выходных API, потому что эти интерфейсы будут использовать многие приложения.
      • Использование «согласованности в конечном счёте» (eventual consistency) может привести к серьёзным последствиям, которые нужно учитывать при разработке приложения, от бэкенда до UX.
      • Тестирование усложняется, потому что изменения в интерфейсе могут непредсказуемо влиять на другие сервисы.

    Очень часто становление того или иного подхода сопровождается появлением неверных или ошибочных трактовок. SOA не является чем-то новым: IT-отделы компаний успешно создавали и развертывали приложения, поддерживающие сервис-ориентированную архитектуру, уже много лет - задолго до появления XML и Web-сервисов.

    SOA - это всего лишь иной стиль построения современных корпоративных систем. Он ориентируется на сервисы, характеризуется распределенной архитектурой и слабосвязанными интерфейсами. Сервис в данном случае - это не что иное, как единица работ, выполняемая сервис-провайдером для обеспечения желаемого результата потребителю сервиса. Именно сервис, а не объект, как в ООП, является повторно используемым, и при этом он не зависит от технологий, языковых сред и других ресурсов. Интегрирующую роль между сервис-провайдером и потребителем берут на себя программные агенты. Ряд архитектурных особенностей SOA позволяет уменьшить степень связанности различных элементов системы. Для взаимодействия компонентов используется сравнительно небольшой набор простых интерфейсов, которые обладают только самой общей семантикой и доступны всем провайдерам и потребителям. Через эти интерфейсы передаются сообщения, ограниченные некоторым словарем. А поскольку даны только общая структура корпоративной системы и словарь, то вся семантика и бизнес-логика, специфичная для приложений, описывается непосредственно в этих сообщениях.

    Сами Web-сервисы не предполагают какого-либо архитектурного решения, в то время как именно архитектурой определяется стиль процессов взаимодействия. SOA не предписывает жесткой вертикальной методологии проектирования, внедрения или управления ИТ-инфраструктурой. Вместо этого, SOA ограничивается лишь рядом принципов, характеризующих каждый из этих процессов; поэтому ее иногда называют не архитектурой, а архитектурным стилем.

    Отметим некоторые из этих принципов.

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

    Постоянство изменений. Отдельные участки архитектуры могут претерпевать изменения в любой момент времени.

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

    Рекурсивность. Однотипные решения имеют место на различных уровнях архитектуры.

    Как бы неожиданно это ни показалось, перечисленные принципы были сформулированы американским архитектором Кристофером Александером в отношении архитектуры современного мегаполиса. В 1987 году он и его коллеги опубликовали работу под названием «Новая теория городского проектирования» (A New Theory of Urban Design), где излагались взгляды на возможность децентрализованного развития городов. В своей работе Александр показал, как можно осуществлять развитие городов с учетом существенной демографической разнородности жителей. Аналогичным образом SOA, основанная на адаптации этих принципов, позволяет объединить в общий взаимодействующий организм информационные системы, принадлежащие различным автономным организациям и их относительно автономным структурным подразделениям.

    Общая схема.

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

    Рис. 2.

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

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

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

    В SOA сервисы рассматриваются как автономные объекты, управление которыми не централизовано. Это позволяет взаимодействующим посредством сервисов информационным системам развиваться в соответствии с потребностями бизнеса, которые потребителям сервисов, как правило, не только не известны, но и не интересны. Однако это было бы невозможно, если бы интерфейс сервиса не был прочно закреплен обоюдным соглашением провайдера и потребителя сервиса. Одной из отличительных черт SOA является наличие контрактов, описывающих интерфейсы сервисов. Такой контракт представляет собой документ, специфицирующий ожидания сервиса по отношению к его потребителям и наоборот. Контракты Web-сервисов описываются WSDL-документом, в нотации XML определяющим, как потребители должны обращаться к сервису. Использование XML на этом этапе имеет принципиальное значение, позволяя и провайдеру, и потребителю сервиса не зависеть от определенной платформы.

    Подобные контракты существовали и до появления Web-сервисов. Например, в архитектуре CORBA для описания интерфейса объектов использовался язык IDL, который уступает WSDL по ряду существенных параметров. Главный из них -- отсутствие поддержки XML и XML Schema, ставших наиболее распространенными языками разметки передаваемых по сети сообщений и представления моделей данных. Технические контракты, формулируемые провайдером сервисов, должны быть доступны потенциальным потребителям для интерпретации, анализа и реализации интеграции. Для этого используется специальный реестр, каталогизирующий доступные сервисы.

    Обзор терминологии SOA

    Часть 1. Сервис, архитектура, управление и бизнес-термины

    Бертран Портье (Bertrand Portier)
    Опубликовано 25.06.2008

    Серия контента:

    Семантика важна в любой области, а особенно – в сервис-ориентированной архитектуре (Service-oriented architecture - SOA). Поскольку SOA связывает между собой команды и организации, согласованная терминология чрезвычайно важна. В этой серии статей мы проводим ознакомительный тур по SOA, определяя термины и стоящие за ними идеи. Здесь вы изучите терминологию, достаточную для общения в области SOA. Вы поймете, почему каждый из терминов важен для SOA, что он значит в данном контексте, с какими стандартами он связан и чем отличается от остальных терминов.

    Организационное замечание

    Перечисленные ниже термины не выстроены по алфавиту, равно как и по степени важности. Они организованы скорее в блочном стиле. Мы начинаем с "сервиса", поскольку это фундаментальное понятие в рамках SOA. На этом понятии мы строим определения таких терминов, как "архитектура", "управление" и "бизнес". Во многих случаях мы разбиваем объемные термины на их составные компоненты.

    Сервис

    Сервисы являются, несомненно, сердцем сервис-ориентированной архитектуры: сам термин сервис широко используется. Однако разные люди понимают его по-разному, а потому вопрос "Что такое сервис?" часто приводит к долгим спорам. Мне приходилось слышать, как люди разговаривают о бизнес-задачах, бизнес-сервисах, функциях приложений, технических сервисах и сервисах из области инфраструктуры. Позвольте, я дам вам определение, основанное на IBM Rational® Method Composer Plug-in for SOA Governance и на IBM Rational® Unified Process for Service-Oriented Architecture. Дополнительную информацию вы найдете в .

    "Сервис – это видимый ресурс, выполняющий повторяющуюся задачу и описанный внешней инструкцией".

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

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

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

    Также важно учитывать, что не все является сервисом. Есть такие ИТ-функции, которые размещать в качестве сервисов смысла нет. Такие аналитические техники, как IBM Service-Oriented Modeling and Architecture (SOMA), помогают определять соответствие сервисов перечисленным выше идеям. Все эти моменты (включая все выделенные термины из данного раздела) мы подробно рассмотрим в данной статье.

    Архитектура

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

    На форуме Open Group Architecture Forum (TOGAF) есть два определения архитектуры в зависимости от контекста:

    1. "Формальное описание или подробный план системы на уровне компонентов для руководства в процессе ее создания.
    2. Структура компонентов, их взаимосвязи, принципы и направления развития, определяющие их разработку и эволюцию."

    Эти два определения критически важны для понимания "A" (архитектуры) из аббревиатуры SOA. Заглянув глубже, мы видим также, что архитектура необходима для следующего:

    • Разработка и моделирование на разных уровнях абстракции
    • Отделение инструкции от реализации
    • Построение гибких систем
    • Проверка на соответствие бизнес-требованиям
    • Анализ объема изменений при появлении новых требований
    • Проверка на соответствие правилам

    Архитектура предприятия

    Вот определение из Википедии:

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

    Главная цель создания архитектуры предприятия – согласование бизнес-стратегии и вложений в сектор ИТ. Таким образом, архитектура предприятия позволяет от общей бизнес-стратегии перейти на уровень ниже, к лежащей в ее основе технологии."

    Вы можете отнести "архитектуру" на уровень проектов, а "архитектуру предприятия" - на уровень организаций. Отметьте также упоминания о процессах, информационных системах, персонале, целях, стратегии и бизнес-ориентировке ИТ.

    Сервис-ориентированная архитектура

    Ориентация на сервисы

    Как написано в техническом обзоре IBM SOA foundation, "... ориентация на сервисы – это путь интеграции бизнеса как набора связанных сервисов." Больше информации об IBM SOA foundation вы найдете в .

    Ключевое слово здесь - "бизнес". Ориентация на сервисы, например, позволяет гибко реализовывать и связывать сервисами бизнес-процессы из одной отрасли бизнеса (ОБ), разных ОБ, а также с бизнес-партнерами.

    Эталонная модель SOA foundation

    IBM SOA foundation содержит эталонную модель SOA, показанную на рисунке 1, в которой отображены ключевые характеристики, необходимые для поддержки сервис-ориентированной архитектуры.

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

    Рисунок 1. Эталонная модель SOA foundation

    Сервис-ориентированная архитектура

    В IBM SOA foundation SOA определена следующим образом:

    "Сервис-ориентированная архитектура (SOA) – архитектурный стиль для создания ИТ-архитектуры предприятия, использующий принципы ориентации на сервисы для достижения тесной связи между бизнесом и поддерживающими его информационными системами."

    SOA обладает следующими характеристиками:

    • Она улучшает взаимосвязь между архитектурой предприятия и бизнесом.
    • Она позволяет из наборов интегрированных сервисов создавать сложные приложения.
    • Она создает гибкие бизнес-процессы.

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

    Структура решений SOA, показанная на рисунке 2, представляет собой эталонную модель SOA, отражающую концептуальное (высокоуровневое) устройство решений SOA.

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

    Она не зависит от технологий, на которых построена. Как вы увидите в разделе "Модельно-управляемая архитектура" (Model-Driven Architecture - MDA) во второй статье данной серии, это разделение важно.

    Рисунок 2. Структура решений SOA

    Структура состоит из 5 функциональных слоев (снизу вверх):

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

    Управление

    Для успешного принятия SOA управление необходимо, в частности, из-за кросс-организационной природы SOA, где владельцы, разработчики, программисты, технический персонал и пользователи могут находиться в разных организациях, бизнесах, ИТ-департаментах, ОБ, отделах или департаментах.

    Этот раздел содержит определения из IBM Rational Method Composer Plug-in for SOA Governance. Здесь определяются термины "управление", "ИТ-управление", "SOA-управление", а также определяется разница между управлением, руководством и соответствием. Тут же описываются проблемы, стоящие перед SOA-управлением. Более подробную информацию о Rational Method Composer вы найдете в .

    Управление

    "Под управлением мы подразумеваем:

    • Установление цепочек ответственности, полномочий и связей, чтобы уполномочить людей (права на принятие решений)
    • Установление механизмов для измерений, расчетов и контроля с тем, чтобы люди могли выполнять свои обязанности в рамках своей ответственности

    Управление следит за назначением прав на принятие решений и решает, какими критериями и правилами руководствоваться при принятии этих решений. Правами на принятие решений наделяются определенные должности, а не личности. В отличие от управления, руководство включает назначение персонала на должности и слежение за исполнением правил.

    Частью любого управленческого решения является соответствие организационным правилам соответствия. Соответствие - это документированное доказательство того, что управление имеется и реализуется: решения документируются, а правила принятия решений соблюдаются."

    ИТ-управление

    "ИТ-управление касается тех моментов управления, которые относятся к процессам в сфере информационных технологий в организации и того, насколько эти процессы соответствуют целям бизнеса."

    ИТ-управление может быть описано как назначение прав на принятие решений и средств оценки ИТ-процессов.

    SOA-управление

    "SOA-управление – это надстройка над ИТ-управлением, ориентированная на сервисы и прочие продукты жизненного цикла SOA."

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

    "SOA-управление предназначено для решения следующих проблем:

    • Какие новые организационные должности и структуры нужны для идентификации, разработки и совместного использования сервисов?
    • Какие метрики поддерживают вложение средств, обслуживание, жизнеспособность и совместное использование сервисов?
    • Как бизнесу решить вопрос об инвестициях в создание и обслуживание сервисов?
    • Что такое зрелость производства в области сервис-ориентированности?
    • Какие необходимы образование, обучение или наставничество?"

    Жизненный цикл

    Жизненный цикл сервиса

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

    Во время своих "жизней" сервисы проходят через многие этапы и фазы (как и мы;-)). Можно представить себе жизненный цикл сервисов как бизнес-машину с состояниями (позициями), в которых могут пребывать сервисы, и переходами, которые переводят сервисы из одного состояния в другое.

    SOA-управление имеет дело с планированием, определением, разрешением и измерениями на протяжении жизненного цикла сервисов. SOA-управление определяет, какие должны быть сервисные состояния, какие действия должны совершаться для перемещения из состояния в состояние (переходы), как (процессы и методы) и кем (должности, контролеры).

    Например, SOA-управление может определять следующие сервисные состояния: идентифицированное, профинансированное, специфицированное, запрограммированное, одобренное, рабочее, опубликованное, одобренное к изъятию, изъятое.

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

    В определении жизненного цикла SOA IBM SOA foundation отмечает четыре фазы:

    • Модель состоит из бизнес-анализа и разработки (требования, процессы, цели, ключевые показатели продуктивности) и ИТ-анализа и разработки (определение и спецификация сервисов).
    • Сборка состоит из программирования сервисов и построения сложных приложений.
    • Размещение состоит из размещения приложений и средств времени исполнения, таких как Enterprise Service Buses (ESB).
    • Руководство состоит из поддержки операционной среды, мониторинга производительности сервисов и слежения за соблюдением сервисных политик.

    Определенные выше SOA-управление и процессы поддерживают эти четыре фазы. Это отображено на рисунке 3.

    Рисунок 3. Жизненный цикл SOA

    Бизнес

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

    Чтобы соответствовать предъявляемым клиентами и законодательством требованиям и возникающим вследствие конкуренции на рынках переменам, компаниям необходима гибкость и динамичность. Сервис-ориентированная архитектура помогает достичь этих целей и быстро адаптироваться к переменам.

    Ориентация на бизнес

    Ключ к успеху SOA лежит в повторном использовании существующих ИТ-ресурсов, например, унаследованных приложений. Однако SOA, в отличие от сервисов, построенных на изолированных информационных системах, позволяет бизнесам сосредоточить свои усилия на поддерживающих их нужды или процессы сервисах – например, операции сервисов могут соответствовать задачам бизнеса. Эта ориентация на бизнес ведет к более тесному сближению и облегчению связи между бизнесом и ИТ. В следующей части статьи, чтобы понять, как можно преобразовать бизнес-модели в ИТ-модели и как можно повысить их функциональность, мы рассмотрим различные подходы к SOA-анализу и разработке: "сверху вниз", "снизу вверх" и "сходимость в центре".

    Однако бизнес-ориентация не означает жесткой связи между производственными мощностями и их реализацией в области ИТ. Одна из ключевых идей SOA, слабая связь, отделяет спецификации (бизнес-модель, интерфейс) от реализации (технологии), что позволяет минимизировать последствия таких перемен, как, например, смена поставщика услуг.

    Компонентное представление бизнеса

    сайтponent Business Model® - стратегический метод, позволяющий компаниям фокусироваться на своих ключевых сферах деятельности – на том, чем компания отличается от своих конкурентов, на отслеживании потребления ресурсов и установлении лучшей связи бизнеса со сферой ИТ. В вы найдете дополнительную информацию о Component Business Model. С помощью и благодаря ориентации на сервисы достигается интеграция и взаимодействие этих компонентов бизнеса, а также гибкость, благодаря которой можно проводить аутсорсинг компонентов: у каждого из компонентов бизнеса есть своя уникальная цель, а сообщаются они между собой посредством набора бизнес-сервисов, которые они поставляют другим компонентам либо получают от других компонентов. Это можно рассматривать как часть "бизнес-архитектуры".

    Бизнес-моделирование

    Бизнес-моделирование определяется IBM Rational Unified Process® следующим образом:

    "Дисциплина Rational Unified Process Business Modeling предоставляет точное руководство для описания с помощью набора подходов и техник, на разных уровнях формализации "текущего" или "желаемого" бизнеса".

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

    SOA – долговременная стратегия реорганизации бизнеса и ИТ-систем, цель которой - быстрое реагирование на перемены. В есть ссылка на журнал IBM Systems (том 44, номер 4), рассказывающий о SOA, в котором вы найдете более подробное рассмотрение связанных с бизнесом сторон сервис-ориентированного мышления.

    Бизнес-процесс

    Бизнес-процесс – это последовательность действий, дающая полезный результат.

    Бизнес-процесс включает в себя протекающие сквозь него связанные бизнес-элементы (данные), в том числе входящие и исходящие данные процесса.

    Бизнес-деятельность и задачи

    Бизнес-деятельность и задачи – это элементы, которые, будучи связаны, образуют бизнес-процессы.

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

    Моделирование бизнес-процессов

    "Существующие" бизнес-процессы в организации могут быть сложны, поскольку они часто являются результатом многочисленных изменений, внесенных в изначальный процесс. Жизненно важными требованиями являются понимание, формальное определение и документирование бизнес-процессов. Кроме того, моделирование и имитация "существующих" и "желаемых" (будущих) бизнес-процессов позволяет определиться с затратами, временными задержками и областями, подлежащими автоматизации.

    Моделирование бизнес-процессов дает не только визуальное представление, но и позволяет позже связать элементы модели бизнес-процесса с элементами ИТ – в том случае, если осуществляется в инфраструктуре, которая работает с лежащими в основе процессов метаданными.

    Задачи для людей

    Довольно часто в процессах требуется человеческое вмешательство (например, утверждение командировки или кредита). Такие задачи при моделировании бизнес-процесса определяются как ручные, и для каждой задачи назначается определенная роль. После размещения для выполнения процессов SOA потребуется поддержка задач, выполняемых людьми. Такие продукты, как, например, IBM WebSphere Process Server, предоставляют пользователям списки ожидающих их задач для людей. При их комбинировании с такими продуктами, как IBM WebSphere Portal и Lotus Sametime, пользователи также могут сотрудничать между собой и оповещать систему о принятых ими решениях, чтобы система могла продолжать выполнение процессов. Этот человеческий фактор критически важен для успеха SOA.

    BPEL

    IBM, Microsoft и другие компании участвовали в разработке языка Business Process Execution Language (BPEL) for Web services specification (язык выполнения бизнес-процессов для создания спецификаций Web-сервисов), являющегося средством формального описания бизнес-процессов и протоколов взаимодействия.

    Отрасли

    В разных сферах деятельности и отраслях бизнес-процессы могут иметь свою специфику, как, например, в страховании. Отраслевые бизнес-процессы определяются промышленными консорциумами. Например, TeleManagement Forum определяет enhanced Telecom Operations Map (eTOM) для телекоммуникационной отрасли. Кроме того, компании, чтобы выделиться среди конкурентов, могут внедрять свои собственные бизнес-процессы, основанные на проверенных моделях, таких как IBM Industry Models. В приведена ссылка на IBM Insurance Application Architecture (IAA), которая является примером IBM Industry Models.

    Управление бизнес-процессами

    Управление бизнес-процессами (Business Process Management - BPM) занимается полным жизненным циклом бизнес-процессов с целью повышения их эффективности, гибкости и управляемости.

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

    Заключение

    В этой первой части серии статей, посвященных терминологии SOA, мы определили такие основные термины SOA, как сервис, SOA, а также связь SOA с архитектурой. Мы определили два термина - жизненный цикл сервиса и SOA-управление, - которые являются основополагающими элементами SOA. Кроме того, мы обсудили связь SOA с бизнесом и описали бизнес-процессы. И это только начало. В следующих статьях мы определим термины SOA, связанные с ИТ-дизайном, разработкой, рабочим процессом и управлением. Так что оставайтесь на связи с developerWorks!

    Благодарности

    Я хотел бы поблагодарить моих коллег из IBM, которые внесли большой вклад в сервис-ориентированную архитектуру и описанные в статье идеи. Особую благодарность выражаю Ричарду Джонсону (Richard D. Johnson) и Стиву Киндеру (Steve Kinder) за рецензию на эту статью.


    © 2024
    artistexpo.ru - Про дарение имущества и имущественных прав