Сервис-ориентированная архитектура
Се́рвис-ориенти́рованная архитекту́ра (СОА, англ. service-oriented architecture- SOA) — модульный подход к разработке программного обеспечения, базирующийся на обеспечении удаленного по стандартизированным протоколам использования распределённых, слабо связанных легко заменяемых компонентов (сервисов) со стандартизированными интерфейсами.
Программные комплексы, разработанные в соответствии с СОА, обычно реализуются как набор веб-служб, взаимодействующих по протоколу SOAP, но существуют и другие реализации (например, на базе jini, CORBA, на основе REST).
Интерфейсы компонентов в сервис-ориентированной архитектуре инкапсулируют детали реализации (операционную систему, платформу, язык программирования) от остальных компонентов, таким образом обеспечивая комбинирование и многократное использование компонентов для построения сложных распределённых программных комплексов, обеспечивая независимость от используемых платформ и инструментов разработки, способствуя масштабируемости и управляемости создаваемых систем.
Получила распространение в конце 1990-х — начале 2000-х годов. С середины 2010-х годов обрела популярность микросервисная архитектура — вариант СОА, базирующийся на применении, насколько это возможно, минимальных по размеру сервисов.
Технологии реализации
Сервис-ориентированная архитектура не привязана к какой-либо определённой технологии. Она может быть реализована с использованием широкого спектра технологий, включая такие технологии как REST, RPC, DCOM, CORBA или веб-сервисы. SOA может быть реализована, используя один из этих протоколов и, например, дополнительно может использовать механизм файловой системы для обмена данными.
Главное, что отличает SOA — это использование независимых сервисов, выполняющих точно определённые задачи, вызываемых стандартным способом через точно определённые интерфейсы, при отсутствии у сервисов знаний о вызывающих их приложениях, а у приложений - способов, которыми сервисы выполняют свою задачу.
SOA также может рассматриваться как стиль архитектуры информационных систем, который позволяет создавать приложения, построенные путём комбинации слабосвязанных взаимодействующих сервисов. Эти сервисы взаимодействуют на основе строго определённого платформенно- и языково-независимого интерфейса (например, WSDL). Определение интерфейса скрывает языковую реализацию сервиса.
Таким образом, системы, основанные на SOA, могут быть независимы от технологий разработки и платформ (таких как Java, .NET и т. д.). К примеру, сервисы, написанные на C#, работающие на платформах .Net и сервисы на Java, работающие на платформах Java EE, могут быть одинаковым образом вызваны общим составным приложением. Обеспеченная таким образом возможность приложениям, работающим на одних платформах, вызывать сервисы, работающие на других платформах, облегчает повторное использование компонентов.
SOA может поддерживать интеграцию и консолидацию операций в составе сложных систем, однако SOA не определяет и не предоставляет методологий или фреймворков для документирования сервисов.
Языки высокого уровня, такие как BPEL, или спецификации, такие как WS-CDL и WS-Coordination, расширяют концепцию сервиса, предоставляя метод оркестровки, для объединения сервисов низших уровней в более обширные бизнес-сервисы, которые, в свою очередь, могут быть использованы технологическими и бизнес- процессами, реализованными в виде составных приложений или порталов.
Использование компонентной архитектуры (SCA) для реализации SOA — это область текущих исследований.