Олифер в н сетевые операционные системы. Олифер В.Г., Олифер Н.А. Сетевые операционные системы. Общий доступ к данным и избыточность

Помощь 19.03.2019
Помощь

20 ответов

Маленький тизер:

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

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

    SOA - новый значок для некоторых очень старых идей:

      Разделите свой код на повторно используемые модули.

      Инкапсулируйте в модуле любое дизайнерское решение, которое может измениться.

      Создайте свои модули таким образом, чтобы их можно было комбинировать различными способами (иногда называемыми "семейством" или "продуктовой линейкой").

    Это все принципы разработки программного обеспечения для коренных пород, многие из которых впервые сформулированы Дэвидом Парнасом.

    Что нового в SOA

      Вы делаете это в сети.

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

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

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

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

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

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

      Надеюсь, это дало по крайней мере кому-то лучшую картину SOA.

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

      Как вы это делаете? Ну, сначала вы определите роли и интерфейс - повар 1 сделает салат, повар 2 сделает суп, повар 3 сделает стейк и т.д. Затем вы разместите блюда, хорошо организованные на столе (так это интерфейсы) и сказать: "Все, пожалуйста, поместите свое творение в свои назначенные блюда. Не заботьтесь ни о ком другом".

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

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

      Одна из самых успешных реализаций SOA была на Amazon. Из-за их дизайна они могут повторно упаковать всю свою инфраструктуру и продать ее как Amazon Web Service.

      * Это только один аспект SOA.

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

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

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

        Аналогичная функция была реализована несколько раз

        Данные (например, данные клиента или сотрудника) должны быть разделены между несколько приложений

        Приложения были децентрализованными.

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

        Не нужно переопределять подобные функции снова и снова (например, предоставлять услуги клиента или сотрудника)

        Облегчает интеграцию приложений вместе и доступ к общим данным или функциям

      • Развитие, ориентированное на предприятие усилие.

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

      Это 1000-футовый вид SOA. Однако это не останавливается. Существуют и другие концепции, дополняющие SOA, такие как организация бизнес-процессов (BPM), корпоративная шина обслуживания (ESB), комплексная обработка событий (CEP) и т.д. Они решают проблему ИТ/бизнес-ориентирования , что заключается в том, как ИТ-специалисты смогут эффективно поддерживать бизнес.

      SOA - это аббревиатура сервис-ориентированной архитектуры.

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

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

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

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

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

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

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

      Итак, вы покупаете Oracle SOA, а Oracle становится боссом всех ваших частей. Все остальные игроки должны работать с SOA через службу (веб-сервис или что-то еще). Монолит Oracle заботится обо всем (монолит не подразумевается уничижительным). О да, у вас есть ASP.NET MVC спереди или что-то еще.

      главное - перемещать вещи в систему и из нее без какого-либо воздействия и поддерживать поставщика Oracle SOA, Microsoft WCF, как мозги всего этого. все, что нравится oop/ood, жидкость, вещи, которые движутся и выходят без какого-либо воздействия, даже человеческие услуги, а не только компьютеры.

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

      из блога ittoolbox.

      Ниже описываются сходства и отличия от прошлых методов проектирования:

      SOA и структурированное программирование o Сходства: большинство похоже на вызовы подпрограмм, где передаются параметры, а функция функции абстрагируется от вызывающего абонента - например, CICS и выполнить и зарезервированное слово COBOL CALL. Копировальные книги используются для определения структуры данных, которая обычно определяется как XML-схема для служб. o Различия: SOA слабо взаимосвязана, что означает, что изменения в сервисе оказывают меньшее влияние на потребителя ("вызывающая" программа), а службы взаимодействуют между языками и платформами.

      SOA против OOA/OOD o Сходства: инкапсуляция, абстракция и определенные интерфейсы o Различия: SOA слабо связан с иерархией классов или наследованием, абстракции низкого уровня - уровень класса и бизнес-сервис

      SOA и устаревшая разработка на основе компонентов (CBD) - например, CORBA, DCOM, EJB o Сходства: Повторное использование через компоненты сборки, Интерфейсы, Удаленные вызовы o Различия: широкое внедрение стандартов, XML-схем и маршализированных объектов, сервис-оркестровка, проектирование для повторного использования проще, услуги ориентированы на бизнес и ИТ-ориентированные, бизнес-услуги являются конечно-крупными (широкими по охвату)

      SOA (для интеграции) по сравнению с интеграцией корпоративных приложений (EAI) o Сходства: лучшие практики (четко определенные интерфейсы, стандартизованные схемы, управляемая событиями архитектура), многоразовые интерфейсы, общие схемы o Различия: стандарты, принятие и улучшенные инструменты

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

      Назовите меня троллем, если хотите, но я серьезно - как точно новый тренд SOA отличается от архитектуры клиентского сервиса, которую я строил 15 лет назад? Я продолжаю слышать SOA, но я не вижу, как это отличается от того, что мы всегда делали. Назад 10 лет назад, у компании было несколько клиентов (на нескольких языках), которые говорили с одним и тем же сервисом. Это был не XML (это был двоичный протокол под названием Microsoft DCOM), и не было автоматического обнаружения через WSDL, но это нормально, так как чтение документов было так же просто. Наша система была даже "открытой" в том смысле, что мы ее достаточно документировали, чтобы третьи стороны могли говорить с нашими сервисами. Мы не были пионерами - каждая другая компания, которую я знала 10 лет назад, делала то же самое. Единственная разница, которую я вижу между тогда и сейчас, заключается в том, что теперь в Интернете есть одна служба, а 10 лет назад каждый клиент будет размещать свой экземпляр службы. Но это не проблема архитектуры, где физическая жизнь службы прозрачна для всех, кто пользуется службой.

      Так что же такое SOA, которая отличается от того, что мы делали годами? Является ли SOA просто маркетинговым термином, представляющим собой наилучшую практику, которая на самом деле стала распространенной давным-давно? Или я немного упустил SOA, что отличается от того, что мы делали все это время?

      10 ответов

      Забудьте о XML. Забудьте о WSDL. SOA - это не технология, которую вы можете купить, хотя она часто продается именно так.

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

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

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

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

      Позвольте мне использовать знаменитого мальчика-бичевателя Integration Hell: Telco.

      Вернувшись в 90-е годы, компании сотового телефона были в изобилии в моем районе, почти так же многочисленны, как и реселлеры на большие расстояния, которые стали возможными благодаря дерегулированию коммуникаций середины 90-х. Ну, время продолжается, и Bell Atlantic становится электростанцией Verizon и поглощает компанию после компании (и хотя бы одного Baby Bell). У каждой из этих компаний есть технологии на башнях, в коммутационном оборудовании, в биллинговых системах, которые ПОЛНОСТЬЮ несовместимы друг с другом.

      Итак, компания уходит и говорит, хорошо, у нас есть эти модели для того, как мы занимаемся бизнесом, давайте дружеское, последовательное лицо на ВСЕХ наших технологиях в виде WSDL/SOAP/XSD - на каждом языке и в системе мы сегодня могут быть сопряжены с этим! Медленно, но верно, компания создает все системы, способные сообщать о возможностях, быть опрошенными для загрузки и выставления счетов, а также подвергать будущих виджетов использованию в манерах, которые еще не были учтены.

      Любой может создать SOA-клиент. Любой, у кого есть wget и текстовый редактор. И каждый может анализировать результаты (XML).

      Это принципиально отличается от прошлых клиент-серверных архитектур. На днях я просто поговорил с кем-то о взаимодействии систем Cobol и Smalltalk с архитектурой SOA. Это легкая проблема для решения. Скажите, вы можете сказать то же самое для своих систем DCOM.

      SOA ничего, кроме способа дизайна , в котором модули взаимодействуют друг с другом через "сервисы". Это просто, и теперь следующий вопрос: что такое "сервис" и каково его отличие от обычного "метода"?

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

      SOA не имеет ничего общего с конкретной технологией, это всего лишь особый способ проектирования.

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

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

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

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

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

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

      Аналогия: Игрушки строятся с использованием строительных блоков Lego.

      Большинство ответов здесь, по-видимому, говорят о том, что SOA (Service Oriented architecture) относится к созданию приложения стандартизованным образом, чтобы другие приложения могли взаимодействовать с ним независимо от платформы.

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

      Конечно, при разработке приложения вы не можете гарантировать, что он будет совместим с кросс-платформой. Возьмем, например, stock Trading systems . Они используют Fix protocol для передачи сообщений. Ожидаете ли вы теперь вернуть данные в формате XML, чтобы он мог быть так назван SOA-совместимым? Точно нет! SOA - это архитектурный подход, который может помочь вам decouple your application/services и позволить им взаимодействовать друг с другом. Магистраль SOA - это ESB (Enterprise Service Bus) , которая используется для передачи данных из одной службы в другую. Архитектура SOA должна заботиться о преобразованиях форматов. Например -

      FIX(Service 1) -> (XML ---ESB---> XML) -> JSON (Service 2)

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

      Конечно, 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.
        • Тестирование усложняется, потому что изменения в интерфейсе могут непредсказуемо влиять на другие сервисы.

      Антипаттерн: архитектура равиоли (Ravioli Architecture)

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

      Заключение

      В последние десятилетия SOA сильно эволюционировала. Благодаря неэффективности прежних решений и развитию технологий сегодня мы пришли к микросервисной архитектуре.

      Эволюция шла по классическому пути: сложные проблемы разбивались на более мелкие, простые в решении.

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


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

      С помощью SOA реализуются три аспекта ИТ-сервисов, каждый из которых способствует получению максимальной отдачи от ИТ в бизнесе:

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

      Мировой рынок SOA

      Российский рынок SOA

      Развитие SOA

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

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

      Еще недавно мы пользовались традиционными веб-ресурсами, не предполагая, что в этом плане можно что-либо кардинально поменять. Оказалось – можно, и появился веб-два-ноль. Тренд оказался настолько удачным и привлекательным, что моментально был взят на вооружение маркетологами. Ярлык 2.0 появился на многих программных решениях и в большинстве случаев его использование весьма спорно. Такой всеобщей тенденции не удалось избежать и сервисно-ориентированной архитектуре. Читать статью "SOA 2.0 "

      Сервисно-ориентированное и объектно-ориентированное программирование

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

      Как известно, повторное использование программного кода упрощает разработку больших информационных систем. До недавнего времени с этой целью традиционно применялся объектно-ориентированный подход, подразумевающий жёсткое объединение компонентов и объектов приложения в одно целое. В парадигме ООП от разработчика требуется знание прикладного программного интерфейса, в котором объединены атрибуты и методы, сообща реализующие необходимый функционал. Но поскольку объектные системы обычно создаются на основе какого-то одного языка программирования (Delphi , C Яык программирования++ , C Яык программирования# , Java и др.) и фиксированных механизмов обмена информацией между объектами и модулями информационной системы, то и в ООП сохраняются все зависимости и ограничения. Такой подход удобен не всегда - в частности, он не позволяет оперативно реагировать на изменение ситуации и, к примеру, проектировать новомодные системы, опирающиеся на концепцию «ресурсы по требованию». Кроме того, для модификации объектных систем нередко приходится переписывать коды связанных объектов и методов.

      Cвести эти ограничения к минимуму позволяет технология SOA, которая многими уже признана как революция в технологии программирования.

      Аналитики о сервисно-ориентированной архитектуре

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

      Архитектурные особенности SOA

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

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

      Архитектура веб-сервисов также является сервисно-ориентированной. Более того, веб-сервисы - это суть SOA c двумя дополнительными ограничениями: интерфейсы базируются на интернет-протоколах (HTTP , FTP , SMTP Simple Mail Transfer Protocol - Простой протокол передачи почты , TCP), а все сообщения описываются в формате XML . Детальные описания стандарта веб-сервисов и спецификаций SOA приводятся на сайтах консорциума W3C и организации OASIS .

      Практические аспекты применения SOA

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

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

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

      Вот шесть механизмов, с помощью которых поддерживается SOA-политика:

      • Операционная модель жизненного цикла SOA
      • Организация SOA
      • SOA-процесс
      • Портфель активов для сервисной интеграции в SOA
      • Инструментарий SOA
      • SOA-технологии

      Эти механизмы используются обоими подходами к разработке и управлению SOA. Первый подход – это управление SOA по типу «сверху вниз». Он подразумевает, что управление по своей сути является стратегическим и начинается с модели и определённых проектов. Продвигаясь вниз, «стратегическое управление» определяет людей, процессы, сервисы, инструменты и технологии, которые будут привлекаться для поддержки корпоративного SOA-проекта. Второй подход – «снизу вверх» - соответственно подразумевает «тактическое управление», которое, наоборот, строит SOA-проект на основе создаваемых технологий, инструментов и сервисов. Большинство предприятий идет по пути «снизу вверх», начиная с конкретных сервис-ориентированных шагов, направленных на определённые предметные области. Очень редко встречаются организации, в которых создание стратегии первично по отношению к созданию необходимых отделов и бизнес-подразделений, первоначальных SOA-технологий и инструментария. Такой подход в целом только усложняет процесс налаживания управления SOA.



Рекомендуем почитать

Наверх