Serviceorientierte Architektur (SOA), (englisch service-oriented architecture), auch dienstorientierte Architektur, ist ein Architekturmuster der Informationstechnik aus dem Bereich der verteilten Systeme, um Dienste von IT-Systemen zu strukturieren und zu nutzen.

SOA unterstützt mehr Softwareflexibilität, kurze Innovationszyklen und Agilität.

Mit einer SOA sollten monolithische Anwendungen in einzelne, autonome Services aufgebrochen werden die, miteinander kombiniert, Geschäftsprozesse schnell abbilden können. 

Die Services sind wiederverwertbar und aufgrund standardisierter Schnittstellen flexibel einsetzbar.

SOA ist als Konzept Teil der Industrialisierung der IT und reiht sich somit in eine langfristige Entwicklung ein. Dahinter verberge sich nichts anderes als die Notwendigkeit, Software weniger zu programmieren als mehr zu montieren. Die Bausteine - Services, wie es bei SOA heißt - seien die nächste Stufe nach der Objektorientierung und der Businessobjektorientiertung in der Softwareprogrammierung.

  • SOA Reference Architecture (SOA RA)

versteht sich als eine Art Bauplan, um SOA-Lösungen zu konzipieren und zu beurteilen

  • Service-Oriented Cloud Computing Infrastructure Framework (SOCCI)

beschreibt Konzepte und Bausteine für SOA- und Cloud-Infrastrukturen

Vereinfacht kann SOA als Methode angesehen werden, die vorhandenen EDV-Komponenten wie Datenbanken, Server und Websites so in Dienste zu kapseln und dann so zu koordinieren („Orchestrierung“), dass ihre Leistungen zu höheren Diensten zusammengefasst und anderen Organisationsabteilungen oder Kunden zur Verfügung gestellt werden können.

Maßgeblich sind also nicht technische Einzelaufgaben wie Datenbankabfragen, Berechnungen und Datenaufbereitungen, sondern die Zusammenführung dieser IT-Leistungen zu „höheren Zwecken“ – wie Ausführen einer Bestellung oder Prüfen der Rentabilität einer Abteilung usw. –, die eine Organisationsabteilung anbietet.

Bei SOA handelt es sich somit um eine Struktur, welche die Unternehmens-anwendungsintegration ermöglicht, indem die Komplexität der einzelnen Anwendungen („Applications“) hinter den standardisierten Schnittstellen verborgen wird.