maandag 19 augustus 2013

De kracht van webservices

Cloud computing is de belofte om IT makkelijker en goedkoper te maken. De beste vorm van cloud computing is software as a service en voor goede integratie is platform as a service een aanjager van goede online software. Platform as a service bestaat concreet uit webservices. Laat mij uitleggen waarom webservices zo’n belangrijk onderdeel zijn van cloud computing.
Een aantal jaren geleden van de term SOA een veel gehoord begrip in ICT land. Service oriented architecture. De term werd een flop, maar de essentie ervan is nu de dagelijkse praktijk voor zeer veel online diensten.

Wat is een webservice?

Een webservice is in feite een soort van internet site die gestructureerde data aanbied aan diens gebruikers veelal op basis van authenticatie. De taal die een webservice spreekt is vaak XML, bijvoorbeeld in de vorm van Simple Object Access Protocol, ofwel SOAP danwel JavaScript Object Notion (JSON). Een webservice zorgt ervoor dat data over het internet beschikbaar gesteld kan worden op een schaalbare manier. Net als websites kun je meerdere servers inzetten om gebruikers (mensen en andere computers) te bedienen. Doordat de webservice zelf geen data bevat - er moet code uitgevoerd worden om data op te halen en te versturen- heb je meteen een business laag tussen de presentatie laag en de data opslag. Dit leent zich goed voor grote robuuste en complexe systemen. Daarnaast zorgt deze natuurlijk scheiding voor het isloren van complexiteit ofwel de “Separation of Concerns”.
Platform onafhankelijk
Een bijna niet te overschatten voordeel van webservices is dat zij van nature platform onafhankelijk zijn. Het maakt niet uit of de webservice gebouwd is in Java, Python of .NET doordat de output in feite tekst is kan andere software in een andere taal heel makkelijk aansluiten op een webservice.
Software ontwerpen op basis van webservices betekent ook dat de software bijna per definitie in de cloud te draaien is. Mijn advies is dan ook, ontwerp software op basis van webservices al draai je ze in een eigen datacenter of servers. Dit verlengd de lifecycle vam software en samen met schaalbaarheid is dit een goed architectuur principe die zeer goed te verdedigen is.

Performance
Als het allemaal zo simpel was kon iedereen het en zou je niets anders meer tegenkomen. Er kleven ook nadelen aan webservices. Ik zal er een paar benoemen. De belangrijkste is performance. Webservices zijn slechte performers ondanks dat ze hele stabiele schaalbare performers zijn. De performance is namelijk slecht omdat er meer afstand tussen de database en de interface van de gebruiker zit. Kijk maar naar het pad wat afgelegd wordt om iets op het scherm van de gebruiker te tonen: Gebruiker drukt op een knop. Er wordt code uitgevoerd om de webservice aan te spreken. De webservice voert code uit om data uit de database op te halen. De data uit de database wordt vertaald naar XML of JSON. De webserver geeft dit antwoord terug aan de vragende software die op antwoord wacht. De software vertaald de data weer naar iets wat een gebruiker kan lezen.
Terwijl in de meest eenvoudige vorm de gebruiker op een knop drukt en er code wordt uitgevoerd die data uit een database haalt en op het scherm toont.
Een ander aspect van webservices is dat de data vaak niet dicht bij de gebruiker staat en dus over het internet getransporteerd moet worden, deze latency is ook altijd een punt van aandacht.
Iedere webservice is anders en het consumeren van webservices vaak leidt tot maatwerk, er is geen dominate standaard voor identificatie, authenticatie en autorisatie. Overigens wordt dit vaak wel weer opgelost met connectors; generieke stukjes code die alle verschillen van input omvormen naar een standaard output. Om data uit Salesforce.com te halen gebruik je een andere connector dan om data uit Google te halen.
Ten slotte is het met webservice heel gemakkelijk om alsnog een rommeltje te maken van een eindproduct door een oerwoud van verbindingen en afhankelijkheden.
Voorbeelden
Ik zal wat fictieve voorbeelden schetsen zoals je deze in de praktijk tegenkomt en welke voorbeelden zijn die heel zwaar leunen op webservices. Neem bijvoorbeeld een webshop die zeer veel producten aanbiedt van verschillende leveranciers. Je logt in op de webshop, besteld een product en bekijkt de beschikbaarheid. Je rekent af (ook een webservice) en krijgt bevestigings e-mail welk ook vaak via een webservice worden verzorgd. Op het moment dat de bestelling verzonden is krijg je een link die aangeeft waar de bestelling zich bevindt, de track and trace.
Data halen uit je online boekhoudpakket verloopt via webservices. Evenals zeer veel van de geïnstalleerde apps op je smartphone.
De gehele infrastructuur van Amazon webservices verloopt zoals de naam al zegt, via webservices. Een virtuele server aanmaken kan in een paar regels code.
Cloud computing
In de wereld van cloud computing zijn webservices het fundament. Webservices in hun huidige verschijningsvorm zijn niet perfect, maar de voordelen zijn zo groot dat je achter ieder succesverhaal wel een webservice in de basis zult vinden. Ook integratie -één van de grootste uitdagingen bij de adoptie van cloud computing- worden praktisch altijd gerealiseerd met webservices. Gek genoeg kom ik in de praktijk maar weinig webservice bouwers tegen. Als je software ontwikkeld voor de cloud, focus dan op webservices. Zijn de techneuten tegen, vraag dan door naar hun beweegredenen. Performance is een veel gehoord argument, maar bedenk dan dat veel grote bedrijven dit obstakel overwonnen hebben en succesvol zijn. Juist doordat webservices net als een webserver functioneren weet je dat webservices heel erg schaalbaar zijn en prima functioneren in een multi-tenant omgeving.
Pak de toekomst, investeer in webservices.