A szolgáltatásorientált architektúra (SOA) egy olyan rendszertervezési szemlélet, ahol az egyes komponensek lazán csatoltan működnek, az integrációt magas szinten teszi láthatóvá, elérhetővé. A szolgáltatásorientált architektúrának nincsen pontos definíciója, elsősorban a szolgáltatások előtérbe helyezésén van a hangsúly, az objektumorientált és a komponensalapú technológia felhasználásával.
Az idők során a moduláris, rugalmas felépítés szerepe nőtt meg, ennek historikus fejlődése a következőképpen alakult:
- 1950-1960-as évek: Monolit architektúrák
- 1980-as évek: Szubrutinok, Távoli eljáráshívások (RPC)
- 1990-es évek: Távoli Objektumhívások
- 2000-es évek: Üzenetalapú feldolgozás, EAI
- 2000-es évek második felétől: SOA
-
A szolgáltatásokat komponensek nyújtják (például a Szolgáltatáskomponens Architektúra (SCA) szabványnak megfelelő komponensek), melyek között üzenetalapú kommunikáció zajlik. A szolgáltatásorientált architektúrában a folyamatok elemi szintű szolgáltatásokból épülnek fel, a technológiai, illetve az üzleti szolgáltatások elkülönülnek egymástól. Mivel a szolgáltatások lazán csatoltak, ezért a komponensekben alkalmazott technológia elválik a folyamatoktól, az implementációt elég komponensenként végezni.
A szolgáltatásorientált architektúrában a szolgáltatás a következőket jelenti:
- a szolgáltatásokat, komponenseket implementációtól független interfészekkel írunk le
- a szolgáltatások egymással laza kapcsolatban állnak, meghívni őket valamilyen kommunikációs protokollon keresztül lehet, ami biztosítja a helytől való függetlenséget.
- A szolgáltatások újrafelhasználható üzleti funkciókat tartalmaznak.
Ezáltal magát a komponenst az interfész „becsomagolja”, az implementációt elrejtve a másik szolgáltatás elől. Ennek a dobozos felépítésnek köszönhetően a szolgáltatások többször is felhasználhatóak lesznek, például egy algoritmust elég egyszer implementálni, az interfészen keresztül azt több helyen felhasználhatjuk.
Szolgáltatásokat kétféleképpen alkalmazhatunk az architektúrában:
- a szolgáltatás egy helyen van csak, minden hívás távolról történik. Ennek a módszernek az előnye, hogy ha a szolgáltatásban valamit meg kell változtatni (például egy számítási algoritmust), akkor azt csak egy helyen kell megtenni.
- a másik módszer, hogy a szolgáltatásokat egyszer tervezzük meg, de többször implementáljuk, több helyen. Itt az előny a teljesítmény növekedése, illetve a különböző helyeken a szolgáltatásokat testre tudjuk szabni, például lokalizálhatjuk.
Ezekkel a módszerekkel gyorsul a fejlesztés, és mivel az interfészek definiálják magát a szolgáltatást, ezért ha magában az implementációban szeretnénk csak változtatni (az interfészben nem), akkor nincs szükség az egész rendszer megváltoztatására, átkonfigurálására. Jó példa erre, hogy a programnyelvek egyfolytában fejlődnek, és egy régi banki üzleti metódust át lehet ültetni egy fejlettebb programnyelvre.
Mivel a rendszert a moduláris technológia által magasabb szintről is át tudjuk tekinteni, könnyebbé válik a tervezés.
A szolgáltatásorientált architektúrával szoros kapcsolatban állnak a webes szolgáltatások (Web Service), hiszen kitűnően lehetséges a nyílt szabványokra épülő webes szolgáltatásokkal felépíteni egy SOA szemléletű folyamatot.
A webes szolgáltatások a következő (szintén) szabványokat használják az egymás között kommunikációban:
- üzenetküldő protokollok, például SOAP
- szállítási protokollok, például http, https, JMS
- biztonság a szállítási szinten (https), protokoll szinten (WS-Security)
A szolgáltatásorientált architektúrának éppen a laza kapcsolatokból fakad a legnagyobb hátránya: nem lehet tudni a komponensek közötti egymásra épülést, nem lehet tudni, hogy melyik komponens használja ki egy adott másik szolgáltatásait. Egészen odáig tehát nincsen probléma, amíg úgy kell megváltoztatni egy komponenst, hogy az interfészei változatlanok maradnak. Ebben az ún. szolgáltatástárak nyújtanak segítséget, melyek tartalmazzák a szolgáltatásokat, leíróikat, a kapcsolatokat, illetve a szolgáltatások életciklusát. A szolgáltatástárakban tárolt adatok alapján lehet létrehozni a szolgáltatástérképet, illetve össze lehet integrálni a szolgáltatások futtatásához szükséges alacsonyabb szintű komponenseket nyilvántartó, monitorozó eszközökkel, leltárakkal, változáskezelési folyamatokkal.
Riba István