Serviceorientert arkitektur (SOA) dukket opp i begynnelsen av dette århundret som en utvikling av distribuert databehandling. Før SOA ble tjenester forstått som sluttresultatet av applikasjonsutviklingsprosessen. I SOA består selve applikasjonen av tjenester. Tjenester kan leveres individuelt eller kombineres som komponenter i en større, sammensatt tjeneste.
Tjenester samhandler over ledningen ved hjelp av en protokoll som REST eller SOAP (Simple Object Access Protocol). Tjenester er løst koblet, noe som betyr at tjenestegrensesnittet er uavhengig av den underliggende implementeringen. Utviklere eller systemintegratorer kan komponere en eller flere tjenester i et program uten nødvendigvis å vite hvordan hver tjeneste implementeres.
Denne artikkelen er en oversikt over Java SOA og nøkkelegenskapene til en tjenesteorientert arkitektur implementert ved bruk av SOAP-baserte webtjenester. Jeg vil også kort sammenligne SOA og mikrotjenester og diskutere forskjellen mellom RESTful og SOAP-baserte webtjenester i Java.
Hvorfor serviceorientert arkitektur?
SOA adresserer tre vanlige bedriftsutfordringer. :
- Svar raskt på forretningsendringer.
- Utnytt eksisterende infrastrukturinvesteringer.
- Støtt nye kanaler for interaksjon med kunder, partnere og leverandører.
Bedriftsinfrastruktur er heterogen på tvers av operativsystemer, applikasjoner, systemprogramvare og applikasjonsinfrastruktur. Som et resultat består mange bedriftssystemer av komplekse og inkonsekvente applikasjoner som gir en utvalg av gjensidig avhengige tjenester. Eksisterende applikasjoner som kjører nåværende forretningsprosesser er kritiske, så det er en delikat forslag å starte fra bunnen av eller endre dem. Men bedrifter må kunne endre og utvide teknisk infrastruktur for å møte forretningskravene.
Som sammenlignet med en monolitisk archi Tecture, SOAs løst koblede natur gjør det relativt sømløst å koble til nye tjenester eller oppgradere eksisterende tjenester for nye forretningskrav. Det gir også muligheten til å gjøre tjenester forbrukbare på tvers av forskjellige kanaler, og å eksponere eldre applikasjoner som tjenester, og dermed sikre infrastrukturinvesteringer.
Fordi de er løst koblet, kan SOA-komponenter endres med minimal innvirkning på andre komponenter . Komponenter kan også legges til i arkitekturen på en standardisert måte, og de kan skaleres til for å adressere belastning.
Som et eksempel kan du vurdere hvordan en bedrift kan bruke et sett med eksisterende applikasjoner for å lage en ny, sammensatt forsyningskjedeapplikasjon. Mens de eksisterende applikasjonene er heterogene og distribueres over forskjellige systemer, blir funksjonaliteten deres eksponert og tilgjengelig ved bruk av standardgrensesnitt.
Nøkkelegenskaper for SOA
SOA kan være så enkelt som en enkeltkomponentkrevende tjenester levert av en annen komponent eller så sofistikert som en rekke komponenter som interagerer via en bedriftstjenestebuss som MuleSofts ESB. Uansett skala, er nøkkelen til en vellykket SOA-implementering å bruke så lite kompleksitet som mulig for å oppnå dine mål. Ditt første og siste spørsmål bør alltid være: Oppfyller dette designet våre forretningskrav?
Uavhengig av skala eller kompleksitet, mønsteret til en serviceorientert arkitektur er mer eller mindre det samme:
- Tjenesteleverandører avslører sluttpunkter og beskriver tilgjengelige handlinger ved hvert sluttpunkt.
- Tjenesteforbrukere sender forespørsler og bruker svar.
- Tjenesteleverandører genererer meldinger for å håndtere forespørsler.
Implementering av tjeneste- orientert arkitektur
For å implementere SOA starter du med den grunnleggende tjenestearkitekturen, og gir deretter infrastrukturen, det vil si protokoller og andre verktøy som muliggjør kommunikasjon og interoperabilitet. Figur 2 viser et diagram over en typisk tjenestearkitektur.
I dette diagrammet påkaller tre forbrukere tjenester ved å sende meldinger til en bedriftstjenestebuss, som transformerer og dirigerer meldingene til en passende tjenesteimplementering . En forretningsregelmotor inkorporerer forretningsregler i en tjeneste eller på tvers av tjenester. Et tjenesteadministrasjonslag administrerer aktiviteter som revisjon, fakturering og logging.
Komponenter i denne arkitekturen er løst koblet, slik at de kan byttes ut eller oppdateres med relativt minimal innvirkning på applikasjonen som helhet. Dette gir virksomheten fleksibilitet til å legge til eller oppdatere forretningsprosesser etter behov. For det meste bør endringer i individuelle tjenester ikke i stor grad påvirke andre tjenester.
SOAP-baserte webtjenester
Webtjenester implementert ved bruk av SOAP er fortsatt stivere enn en RESTful implementering av webtjenester eller mikrotjenester, men langt mer fleksible enn SOAs tidlige dager. Her vil vi bare se på høynivåprotokollene som kreves for SOAP-baserte nettjenester.
SOAP, WSDL og XSD
SOAP, WSDL og XSD er den grunnleggende infrastrukturen av en SOAP-basert nettjenesteimplementering. WSDL brukes til å beskrive tjenesten, og SOAP er transportsjiktet for sending av meldinger mellom tjenesteforbrukere og leverandører. Tjenester kommuniserer med meldinger formelt definert ved hjelp av XML Schema (XSD). Du kan tenke på WSDL som tjenestens grensesnitt (løst analogt med et Java-grensesnitt). Implementeringen gjøres i Java-klasser, og kommunikasjon på tvers av nettverket skjer via SOAP. Funksjonelt vil en forbruker lete etter en tjeneste, få WSDL for den tjenesten og deretter påkalle tjenesten ved hjelp av SOAP.
Webtjenestesikkerhet
WS -I Basic Profile 2.0 spesifikasjon adresserer meldingssikkerhet. Denne spesifikasjonen fokuserer på legitimasjonsutveksling, meldingsintegritet og konfidensialitet for meldinger.
Funn av webtjenester
Når hjørnesteinen i oppdagelse av webtjeneste, har UDDI (Universal Description, Definition and Integration) bleknet inn i historien. I dag er det vanlig å eksponere en SOAP-basert nettjeneste slik du ville gjort med andre tjenester, via en sluttpunkts-URL. Som et eksempel kan du bruke JAX-WS Service Endpoint Interface og dens @WebService
og @WebMethod
merknader.
Bygging og distribusjon av webtjenester
Java-utviklere har flere muligheter for å bygge og distribuere SOAP-baserte webtjenester, inkludert Apache Axis2 og Spring-WS, men Java-standarden er JAX-WS, Java API for XML Web Services. Kjernetanken bak JAX-WS er å lage Java-klasser og kommentere dem for å lage de nødvendige gjenstandene. Under panseret bruker JAX-WS flere Java-pakker, inkludert JAXB, et bibliotek for generell bruk for å binde Java-klasser til XML.
JAX-WS skjuler den underliggende kompleksiteten og protokollene fra utvikleren, og effektiviserer dermed prosessen for å definere og distribuere Java-baserte SOAP-tjenester. Moderne Java IDEer som Eclipse inkluderer full støtte for utvikling av JAX-WS-webtjenester. WS-spesifikasjon er også valgt for pågående utvikling i Jakarta EE.
Konklusjon
Tjenesteorientert arkitektur implementert med SOAP-baserte webtjenester krever mer rigid og formelle tjenestedefinisjoner enn RESTful webtjenester eller mikrotjenester. Imidlertid fortsetter noen større organisasjoner å favorisere den mer formelle stilen som håndheves av SOAP. Mange store eldre systemer er også bygget på SOAP, og noen B2B og interne systemer velger SOAP-baserte webtjenester for sine mer formelt definerte API-kontrakter. Enten du utvikler eller vedlikeholder et storstilt foretakssystem, å forstå SOA-mønsteret og være i stand til å evaluere alternativene dine for å implementere det, vil tjene deg godt i din programmeringskarriere.