В программной инженерии сервисно -ориентированная архитектура ( SOA ) — это архитектурный стиль, который фокусируется на дискретных сервисах вместо монолитного дизайна . [1] SOA — хороший выбор для системной интеграции . [2] Как следствие, он также применяется в области проектирования программного обеспечения , где сервисы предоставляются другим компонентам компонентами приложения через протокол связи по сети. Сервис — это дискретная единица функциональности, к которой можно получить удаленный доступ, которую можно использовать и обновлять независимо, например, получать выписку по кредитной карте онлайн. SOA также должна быть независимой от поставщиков, продуктов и технологий. [3]
Ориентация на услуги – это способ мышления в терминах услуг и развития на основе услуг, а также результатов услуг. [1]
Согласно одному из многочисленных определений SOA, сервис обладает четырьмя свойствами: [4]
Различные сервисы могут использоваться совместно в качестве сервисной сетки для предоставления функциональности большого программного приложения , [6] принцип SOA разделяет с модульным программированием . Сервисно-ориентированная архитектура объединяет распределенные, отдельно поддерживаемые и развертываемые программные компоненты. Она обеспечивается технологиями и стандартами, которые облегчают коммуникацию и взаимодействие компонентов по сети, особенно по IP-сети.
SOA связана с идеей API ( интерфейс прикладного программирования ), интерфейса или протокола связи между различными частями компьютерной программы, призванного упростить реализацию и обслуживание программного обеспечения. API можно рассматривать как службу, а SOA — как архитектуру, которая позволяет службе работать.
Обратите внимание, что сервисно-ориентированную архитектуру не следует путать с сервисно-ориентированной архитектурой, поскольку это два разных архитектурных стиля. [7]
В SOA сервисы используют протоколы, которые описывают, как они передают и анализируют сообщения, используя метаданные описания . Эти метаданные описывают как функциональные характеристики сервиса, так и характеристики качества обслуживания. Сервисно-ориентированная архитектура направлена на то, чтобы позволить пользователям объединять большие фрагменты функциональности для формирования приложений, которые построены исключительно из существующих сервисов и объединяют их специальным образом. Сервис представляет простой интерфейс для запрашивающей стороны, который абстрагируется от базовой сложности, действуя как черный ящик. Другие пользователи также могут получать доступ к этим независимым сервисам без каких-либо знаний об их внутренней реализации. [8]
Связанное с этим модное слово « сервис-ориентация» способствует слабой связи между сервисами. SOA разделяет функции на отдельные единицы или сервисы, [9] которые разработчики делают доступными по сети, чтобы позволить пользователям объединять и повторно использовать их в производстве приложений. Эти сервисы и их соответствующие потребители взаимодействуют друг с другом, передавая данные в четко определенном, общем формате или координируя деятельность между двумя или более сервисами. [10]
SOA можно рассматривать как часть континуума, который простирается от старой концепции распределенных вычислений [9] [11] и модульного программирования , через SOA и далее к практикам гибридных приложений , SaaS и облачных вычислений (которые некоторые считают потомками SOA). [12]
Не существует отраслевых стандартов, касающихся точного состава сервисно-ориентированной архитектуры, хотя многие отраслевые источники опубликовали свои собственные принципы. Некоторые из них [13] [14] [15] включают следующее:
Каждый строительный блок SOA может играть любую из трех ролей:
Отношения между потребителем и поставщиком услуг регулируются стандартизированным договором на оказание услуг [19] , который состоит из деловой части, функциональной части и технической части.
Шаблоны композиции сервисов имеют два широких, высокоуровневых архитектурных стиля: хореография и оркестровка . Шаблоны интеграции предприятия более низкого уровня, которые не привязаны к определенному архитектурному стилю, продолжают быть актуальными и приемлемыми в разработке SOA. [20] [21] [22]
Сервисно-ориентированная архитектура может быть реализована с помощью веб-сервисов или микросервисов . [23] Это делается для того, чтобы сделать функциональные строительные блоки доступными через стандартные интернет-протоколы, которые не зависят от платформ и языков программирования. Эти сервисы могут представлять собой либо новые приложения, либо просто оболочки вокруг существующих устаревших систем, чтобы сделать их сетевыми. [24]
Разработчики обычно создают SOA, используя стандарты веб-сервисов. Одним из примеров является SOAP , который получил широкое признание в отрасли после рекомендации версии 1.2 от W3C [25] (Консорциум Всемирной паутины) в 2003 году. Эти стандарты (также называемые спецификациями веб-сервисов ) также обеспечивают большую совместимость и некоторую защиту от привязки к проприетарному программному обеспечению поставщика. Однако можно также реализовать SOA, используя любую другую технологию на основе сервисов, например Jini , CORBA , Internet Communications Engine , REST или gRPC .
Архитектуры могут работать независимо от конкретных технологий и поэтому могут быть реализованы с использованием широкого спектра технологий, включая:
Реализации могут использовать один или несколько из этих протоколов и, например, могут использовать механизм файловой системы для передачи данных в соответствии с определенной спецификацией интерфейса между процессами, соответствующими концепции SOA. Ключевым моментом являются независимые службы с определенными интерфейсами, которые могут быть вызваны для выполнения своих задач стандартным образом, без того, чтобы служба заранее знала о вызывающем приложении, и без того, чтобы приложение имело или нуждалось в знании того, как служба фактически выполняет свои задачи. SOA позволяет разрабатывать приложения, которые создаются путем объединения слабосвязанных и совместимых служб.
Эти сервисы взаимодействуют на основе формального определения (или контракта, например, WSDL), которое не зависит от базовой платформы и языка программирования. Определение интерфейса скрывает реализацию сервиса, специфичного для языка. Таким образом, системы на основе SOA могут функционировать независимо от технологий и платформ разработки (таких как Java, .NET и т. д.). Сервисы, написанные на C#, работающие на платформах .NET, и сервисы, написанные на Java, работающие на платформах Java EE , например, могут потребляться общим составным приложением (или клиентом). Приложения, работающие на любой платформе, также могут потреблять сервисы, работающие на другой, как веб-сервисы, которые облегчают повторное использование. Управляемые среды также могут обертывать устаревшие системы COBOL и представлять их как программные сервисы. . [26]
Языки программирования высокого уровня, такие как BPEL , и спецификации, такие как WS-CDL и WS-Coordination, расширяют концепцию сервиса, предоставляя метод определения и поддержки оркестровки мелкозернистых сервисов в более крупнозернистые бизнес-сервисы, которые архитекторы, в свою очередь, могут включать в рабочие процессы и бизнес-процессы, реализованные в составных приложениях или порталах .
Сервисно-ориентированное моделирование — это фреймворк SOA, который определяет различные дисциплины, которые направляют практиков SOA для концептуализации, анализа, проектирования и разработки их сервисно-ориентированных активов. Фреймворк сервисно-ориентированного моделирования (SOMF) предлагает язык моделирования и рабочую структуру или «карту», изображающую различные компоненты, которые способствуют успешному подходу сервисно-ориентированного моделирования. Он иллюстрирует основные элементы, которые определяют аспекты «что делать» схемы разработки сервиса. Модель позволяет практикам разрабатывать план проекта и определять вехи сервисно-ориентированной инициативы. SOMF также предоставляет общую нотацию моделирования для решения проблемы согласованности между бизнес- и ИТ-организациями.
Некоторые корпоративные архитекторы полагают, что SOA может помочь компаниям быстрее и экономически эффективнее реагировать на меняющиеся рыночные условия. [28] Этот стиль архитектуры способствует повторному использованию на макроуровне (сервис), а не на микроуровне (классы). Он также может упростить взаимосвязь с существующими (унаследованными) ИТ-активами и их использование.
Идея SOA заключается в том, что организация может рассматривать проблему целостно. Бизнес имеет более общий контроль. Теоретически не было бы массы разработчиков, использующих любые наборы инструментов, которые им нравятся. Вместо этого они бы кодировали в соответствии со стандартом, установленным в бизнесе. Они также могут разрабатывать SOA для всего предприятия, которая инкапсулирует ориентированную на бизнес инфраструктуру. SOA также была проиллюстрирована как система автомагистралей, обеспечивающая эффективность для водителей автомобилей. Суть в том, что если бы у всех была машина, но нигде не было бы автомагистралей, все было бы ограничено и дезорганизовано в любой попытке добраться куда-либо быстро или эффективно. Вице-президент IBM по веб-сервисам Майкл Либоу говорит, что SOA «строит автомагистрали». [29]
В некоторых отношениях SOA можно рассматривать как архитектурную эволюцию, а не как революцию. Она охватывает многие из лучших практик предыдущих программных архитектур. Например, в системах связи было мало разработок решений, которые используют действительно статические привязки для взаимодействия с другим оборудованием в сети. Принимая подход SOA, такие системы могут позиционировать себя так, чтобы подчеркнуть важность четко определенных, высокосовместимых интерфейсов. Другие предшественники SOA включают компонентно-ориентированную программную инженерию и объектно-ориентированный анализ и проектирование (OOAD) удаленных объектов, например, в CORBA .
Услуга представляет собой автономную единицу функциональности, доступную только через формально определенный интерфейс. Услуги могут быть своего рода «нанопредприятиями», которые легко производить и улучшать. Также услуги могут быть «мегакорпорациями», построенными как скоординированная работа подчиненных услуг.
Причины, по которым внедрение услуг следует рассматривать как отдельные проекты от более крупных проектов, включают:
SOA обещает упростить тестирование косвенно. Сервисы являются автономными, не имеют состояния, полностью документированы интерфейсами и отделены от сквозных задач реализации. Если организация обладает надлежащим образом определенными тестовыми данными, то создается соответствующая заглушка, которая реагирует на тестовые данные при создании сервиса. Полный набор регрессионных тестов, сценариев, данных и ответов также фиксируется для сервиса. Сервис можно тестировать как «черный ящик», используя существующие заглушки, соответствующие сервисам, которые он вызывает. Тестовые среды могут быть созданы, где примитивные и не входящие в область действия сервисы являются заглушками, в то время как остальная часть сетки представляет собой тестовые развертывания полных сервисов. Поскольку каждый интерфейс полностью документирован с собственным полным набором документации регрессионного теста, становится просто выявлять проблемы в тестовых сервисах. Тестирование развивается, чтобы просто проверить, что тестовый сервис работает в соответствии со своей документацией, и находит пробелы в документации и тестовых случаях всех сервисов в среде. Управление состоянием данных идемпотентных сервисов является единственной сложностью.
Примеры могут оказаться полезными для документирования сервиса до уровня, на котором он становится полезным. Документация некоторых API в Java Community Process дает хорошие примеры. Поскольку они являются исчерпывающими, сотрудники обычно используют только важные подмножества. Файл 'ossjsa.pdf' в JSR-89 является примером такого файла. [31]
SOA была объединена с веб-сервисами ; [32] однако веб-сервисы являются лишь одним из вариантов реализации шаблонов, которые составляют стиль SOA. При отсутствии собственных или бинарных форм удаленного вызова процедур (RPC) приложения могут работать медленнее и требовать больше вычислительной мощности, что увеличивает затраты. Большинство реализаций действительно влекут за собой эти накладные расходы, но SOA может быть реализована с использованием технологий (например, Java Business Integration (JBI), Windows Communication Foundation (WCF) и служба распределения данных (DDS)), которые не зависят от удаленных вызовов процедур или трансляции через XML или JSON. В то же время появляющиеся технологии анализа XML с открытым исходным кодом (такие как VTD-XML ) и различные XML-совместимые бинарные форматы обещают значительно улучшить производительность SOA. [33] [34] [35]
Службы с отслеживанием состояния требуют, чтобы и потребитель, и поставщик разделяли один и тот же специфичный для потребителя контекст, который либо включен в сообщения, которыми обмениваются поставщик и потребитель, либо на него ссылаются. Это ограничение имеет тот недостаток, что оно может снизить общую масштабируемость поставщика услуг, если поставщику услуг необходимо сохранять общий контекст для каждого потребителя. Это также увеличивает связь между поставщиком услуг и потребителем и затрудняет переключение поставщиков услуг. [36] В конечном счете, некоторые критики считают, что службы SOA все еще слишком ограничены приложениями, которые они представляют. [37]
Основной проблемой, с которой сталкивается сервисно-ориентированная архитектура, является управление метаданными. Среды на основе SOA включают множество служб, которые взаимодействуют друг с другом для выполнения задач. В связи с тем, что проект может включать несколько служб, работающих совместно, приложение может генерировать миллионы сообщений. Другие службы могут принадлежать разным организациям или даже конкурирующим фирмам, создавая огромную проблему доверия. Таким образом, управление SOA входит в схему вещей. [38]
Еще одной серьезной проблемой SOA является отсутствие единой среды тестирования. Нет инструментов, которые предоставляют требуемые функции для тестирования этих сервисов в сервисно-ориентированной архитектуре. Основные причины трудностей: [39]
Интерфейсы прикладного программирования (API) — это среды, с помощью которых разработчики могут взаимодействовать с веб-приложением.
Тим О'Рейли ввел термин « Web 2.0 » для описания воспринимаемого, быстро растущего набора веб-приложений. [40] Тема, которая получила широкое освещение, включает в себя взаимосвязь между Web 2.0 и сервисно-ориентированными архитектурами. [ какие? ]
SOA — это философия инкапсуляции логики приложения в сервисы с единообразно определенным интерфейсом и предоставления их публичного доступа через механизмы обнаружения. Понятие сокрытия сложности и повторного использования, а также концепция слабосвязанных сервисов вдохновили исследователей на разработку сходств между двумя философиями, SOA и Web 2.0, и их соответствующими приложениями. Некоторые утверждают, что Web 2.0 и SOA имеют существенно разные элементы и, таким образом, не могут считаться «параллельными философиями», в то время как другие считают эти две концепции взаимодополняющими и рассматривают Web 2.0 как глобальную SOA. [41]
Философии Web 2.0 и SOA обслуживают различные потребности пользователей и, таким образом, выявляют различия в отношении дизайна, а также технологий, используемых в реальных приложениях. Однако, по состоянию на 2008 год [обновлять], примеры использования продемонстрировали потенциал объединения технологий и принципов как Web 2.0, так и SOA. [41]
Микросервисы — это современная интерпретация сервисно-ориентированных архитектур, используемых для построения распределенных программных систем . Сервисы в микросервисной архитектуре [42] — это процессы , которые взаимодействуют друг с другом по сети для достижения цели. Эти сервисы используют протоколы, не зависящие от технологий , [43] которые помогают инкапсулировать выбор языка и фреймворков, делая их выбор внутренним для сервиса. Микросервисы — это новый подход к реализации и внедрению SOA, который стал популярным с 2014 года (и после введения DevOps ), и который также подчеркивает непрерывное развертывание и другие гибкие практики. [44]
Не существует единого общепринятого определения микросервисов. В литературе можно найти следующие характеристики и принципы:
Интерактивные приложения, требующие времени отклика в реальном времени, например, интерактивные 3D-приложения с малой задержкой, используют определенные сервисно-ориентированные архитектуры, отвечающие конкретным потребностям такого рода приложений. К ним относятся, например, оптимизированные распределенные вычисления и коммуникации с малой задержкой, а также управление ресурсами и экземплярами. [45] [46] [47]
{{cite web}}
: CS1 maint: бот: исходный статус URL неизвестен ( ссылка ){{cite journal}}
: CS1 maint: несколько имен: список авторов ( ссылка )