-
Notifications
You must be signed in to change notification settings - Fork 0
concepten
Data is de kleinste eenheid binnen integratie. Het is een feit, zoals bijvoorbeeld de naam van een medewerker of een ordernummer. Data als verzameling feiten heeft nog een beperkte waarde. Dat is nog niet interessant voor een bedrijf. De echte waarde ontstaat als informatiesystemen en mensen die data kunnen gebruiken en interpreteren. Alle verschillende manieren om met data om te gaan dienen het doel om van data informatie te maken. Er zijn echter veel manieren om data te categoriseren en aan te duiden.
Wanneer je de feiten van een data verzameling volgens een vaste structuur opslaat dan spreken we van een data formaat. De meest bekende data formaten binnen integratie zijn CSV, XML en JSON. In basis zijn data formaten gewoon tekst. Maar wel tekst die is geordend volgens een aantal vaste regels.
Omdat tekstbestanden niet technologie afhankelijk zijn, zie je dat deze veel gebruikt worden voor het uitwisselen van gegevens. De data formaten standaardiseren de wijze waarop de data wordt gestructureerd, zodat deze makkelijk verwerkt kunnen worden. Het zijn als ware de containers die door schepen, treinen enzovoorts vervoert worden.
CSV
CSV staat voor Comma-Separated Values. Waardes zijn door een komma gescheiden, maar het kan ook door een andere teken zijn. Het zou beter "Delimeter Separated Values" kunnen heten, maar dat is niet het geval. Het is, zoals het scheidingsteken al aangeeft, een erg los formaat in een simpele tabelstructuur. Het voordeel van CSV is dat je alleen waardes weergeeft, waardoor je veel data op een klein stuk geheugen kwijt kan. Het formaat is helaas niet erg strikt en daarom soms lastig te gebruiken voor data integratie. Door welk teken worden de waardes gescheiden? Hoeveel regels staan er maximaal in een bericht? Bevat het bericht headers? Daarnaast is lastig leesbaar door mensen en beperkt voor complexere structuren.
Voorbeeld:
ordernummer, klant, adres
12345, Dirk Hondenvriend, Stationsstraat 11
34523, Anneke de Vries, Dorpstraat 369a
Om CSV bestanden makkelijker te bewerken, worden deze vaak eerst omgezet in het XML formaat.
XML
XML is een gestructureerde tekst formaat, waarbij je ingewikkelde structuren kan weergeven die zowel door mensen als machines gelezen kunnen worden. Als een tekstbestand aan de regels van XML voldoet dan is de XML well-formed. De belangrijkste regels zijn dat een XML één root element heeft en elk element een begin en eind tag heeft:
<root>
<element attribuut="waardeX">waardeY</element>
</root>
Een waarde staat in een element of attribuut. In eerste instantie lijkt XML veel op HTML, gezien deze ook van tags gebruik maakt:
<html>
<b>tekst</b>
<br>
<html>
Bij HTML zijn de tags al voorgedefinieerd om te worden geïnterpreteerd door een browser. De tag <b>
betekent bijvoorbeeld dat de tekst ertussen vetgedrukt dient te worden. De tag <br>
betekent een enter. Toch is een HTML document niet persé een well-formed XML document, omdat bijvoorbeeld de tag <br>
helemaal niet afgesloten hoeft te worden. Er is ooit het plan geweest om HTML wel aan de regels van XML te laten doen (XHTML), maar dat heeft zich niet doorgezet in de browsermarkt.
Één van de belangrijkste kenmerken van XML is dat het uitbreidbaar (eXtensible) is. Je kan dus zelf bepalen hoe je tags definieert. Stel ik wil een taart XML maken, dan is het prima om deze XML zelf op te stellen:
<taartjes>
<taart>appeltaart</taart>
<jarige>Albert</jarige>
</taartjes>
Er zijn veel technieken gemaakt die XML kunnen verwerken. Bijvoorbeeld door een schema op te stellen, wat voor jouw systeem een geldig XML is. In dit zogenoemde XSD (XML Schema Definition) bepaal je zelf de voorwaarden voor de tags. Op welke plek moet de tag voorkomen? Is dit een tekstveld? Wat is de maximale lengte? Als je vervolgens een bestelling voor het bakken van een taart krijgt, kan je controleren of dit in het afgesproken formaat is.
<taartjes>
<taart>appeltaart</taart>
<jarige>Albert</jarige>
<aantal>2</aantal>
</taartjes>
Als de tag <aantal>
niet in het schema staat dan wordt de bestelling afgekeurd. De buurvrouw vindt het een beetje veel om er twee te bakken, dat was niet de afspraak!
Er zijn nog een hoop andere technieken die met XML overweg kunnen. Een belangrijke techniek voor data integratie is XSLT (eXtensible Stylesheet Language Transformations). XSLT bouwt een nieuw document op en gebruikte waardes en velden uit het input document. Stel de ontvanger verwacht een andere volgorde van de tags en ook dat ze in het Engels is opgesteld. XSLT transformeert deze dan naar:
<cakes>
<number>2</number>
<cake>Apple pie</cake>
<name>Albert</name>
</cakes>
JSON
Net als XML is JSON (Javascript Object Notation) een data formaat voor gestructureerde data die door mensen en systemen kan worden geschreven en gelezen. Gezien Javascript de belangrijkste taal is voor websites zie je de laatste jaren dat JSON enorm aan populariteit heeft gewonnen. Veelal zie je het als data formaat tussen backend (op de server) en front end (in de browser) van een webapplicatie. Tegenwoordig zie je dit ook meer verschijnen als formaat voor uitwisseling van data tussen systemen (vooral bij REST API's).
{
"number": "2",
"cake": "app",
"name": "Albert"
}
Er zijn nog enkele alternatieven data formaten:
- YAML - Een data formaat die probeert om de benodigde syntax te minimaliseren. Het wordt veel gebruikt voor de configuratie van systemen en minder in data integratie.
- Protocol Buffers - Een data formaat ontwikkelt door Google. Deze met name met hoge performance ontwikkelt. Op basis van het data formaat kan code in verschillende talen gegenereerd worden om te lezen en te schrijven naar het formaat.
- AXON - AXON staat voor An eXtended Object Notation. Een data formaat voor het vastleggen en uitwisselen van objecten, documenten en data. Het poogt het beste van JSON, XML and YAML te combineren.
- MARK - MARK is een nieuw data formaat die probeert de voordelen van verschillende oudere formaten, zoals JSON, XML en YAML met elkaar te verenigen.
- TOML -Tom's Obvious, Minimal Language is voor data en configuratie die eenvoudig vanuit verschillende programmeertalen te bewerken is.
Hoewel de bovenstaande formaten in sommige opzichten superieur zijn ten op zichte van gangbare data formaten, ontbreekt het vaak in de ondersteuning van programmeertalen, applicatiesystemen en tools.
Een corporate data model (CDM) is als er bedrijfsbreed de standaarden en definities worden van vastgelegd. Er ontstaan vaak binnen bedrijven allerlei termen voor hetzelfde, terwijl hetzelfde weer iets anders betekent. Een corporate data model is een standaard manier om over data te praten. Wat verstaan we onder "assortiment". Zijn dit artikelen die we bestellen bij leverancier, die we op voorraad hebben of die we verkopen in de winkel? Een corporate data model kan zulke zaken definiëren en zo één manier van communiceren opleveren. Gezien de meeste problemen vallen en staan bij goede communicatie kan een corporate data model veel opleveren ook voor 'communicatie' tussen systeem. Dit kan het aantal integratie stappen verminderen of een duidelijk tussen vertaalslag maken naar het algemene data model. Een corporate data model kan ook vertragend en bureaucratisch werken, omdat de definities moeten worden opgesteld en onderhouden. Hier geldt dan ook "Bezint, voor je eraan begint".
Een verzameling data kan enerzijds duiden op gegevens die bij elkaar horen. Bijvoorbeeld alle gegevens van een specifieke order. Het kan anderzijds ook de verzameling van alle gegevens betekenen, bijvoorbeeld de orderdata van de laatste jaren.
Wanneer een dataverzameling wordt opgeslagen (meestal in een tekstbestand) dan betreft het een data bestand. Een data bestand heeft een fysieke plaats op een systeem.
Een data bericht is een data verzameling dat onderweg is. Je kunt het het beste vergelijken met een pakket dat onderweg is. Een data bericht is meestal onderweg in een netwerk. Het heeft een inhoud dat vaak als data bestand kan worden opgeslagen en vaak headers, zoals een timestamp of een afzender. Binnen protocollen als HTTP of JMS zijn de berichtheaders gestandaardiseerd. Headers zijn als ware de sticker op het pakket of de enveloppe van een brief.
Een interface is het snijpunt waar twee componenten samenkomen. Bij een user interface is dat het punt waar de gebruiker de applicatie bedient. Bij een data interface is dat waar twee systemen verbonden zijn. Bij een directe koppeling zit hier geen (of wellicht één) middleware component tussen. Bij ontkoppelde systemen kan de data interface uit vele schakels bestaan. Dit wordt ook wel een data flow of data proces genoemd. Een data interface is dan het gehele pad van schakels (middleware componenten) waarover data berichten lopen.
Data berichten waarbij de velden zijn gestandaardiseerd. Meestal is dit voor een specifiek data formaat. Bijvoorbeeld het artikelbericht in XML door de standaardisatieorganisatie GS1.
Middleware is software die tussen andere software in staat. Binnen applicatie integratie zijn het de componenten die het berichtenverkeer regelen tussen verschillende applicaties. Het is mogelijk om één middleware component als centraal component tussen alle applicaties te plaatsen. Het is ook mogelijk om meerdere kleinere middleware componenten die decentraal data uitwisselen.
Veelal is er een combinatie van centrale en decentrale middleware componenten in gebruik. In dit geval ontstaan er schakels van middleware componenten. Dit is soms nodig omdat elke middleware component zijn eigen functie heeft. Een aantal concepten zie je terug bij meerdere type middleware componenten. De meest gangbare type middleware is MOM (Message Orientated Middleware) die data berichten gebruiken voor uitwisseling en verwerking van gegevens. De meeste brokers, gateway, API’s en ESB zijn message orientated middleware.
Een endpoint is een bestemming waarop data kan worden geplaatst of opgehaald. Voorbeelden van zulke bestemmingen zijn directories, url of een queue.
De meeste middleware ondersteunen een "quality of service" (QoS). De QoS geeft aan wat de mate van aflevergarantie is. Bekende niveaus zijn:
- Exactly once
- At least once
- Best Effort
Exactly once geeft aan dat er precies één bericht wordt afgeleverd, terwijl het bij At least once kan voorkomen dat een bericht twee keer wordt afgeleverd. Meestal is Exactly once het wenselijke niveau. Dit niveau komt echter wel met een performance trade off. Hoe hoger de QoS des te meer checks het middleware component moet doen om deze garantie te kunnen waar maken. De verwerkingssnelheid is daarom lager.
Een middleware component kan op verschillende manieren worden aangeroepen. De eenvoudigste is Fire and Forget. Dit betekent dat de producer van de data het databericht verstuurt, maar er verder niets mee doet. Je ziet dit vooral met event-driven systemen. Er is bijvoorbeeld een wijziging aangebracht in een systeem. Een nieuwe taart bijvoorbeeld. Het systeem geeft dit door aan een middleware component en is dan klaar. Wellicht dat de data bij verschillende andere systemen terecht komt, misschien gebeurt er niets mee, misschien gaat het ergens fout. Het versturende kan het allemaal niet schelen. Het kan nog wel zijn dat er bevestiging van middleware komt dat deze het bericht ontvangen heeft, maar er komt geen inhoudelijk antwoord.
Bij Request/Reply wordt er altijd een antwoord verwacht. De applicatie die verstuurd kan een officieel bevestiging terug krijgen dat het bericht door de ontvanger is verwerkt. Het kan ook zijn dat de producer van het bericht maar een zeer beperkte aantal gegevens heeft. In dit geval doet hij een verzoek voor meer gegevens en in de response ontvangt hij deze.
Er zijn twee manieren waarop berichten worden afgehandeld bij request/reply. Bij synchroon wordt gewacht op het antwoord (response). Je ziet dit vooral bij webapplicaties. Iemand drukt op een website op de knop betalen, het bericht gaat naar de backend en als de betaling voldaan is gaat er een reply bericht terug. De gebruiker heeft de taart betaald.
Bij asynchroon wordt er niet gewacht op de antwoord. Stel je wilt weten waar de taart het goedkoopste is en surft naar een vergelijkingssite. Deze website doet een verzoek bij drie verschillende externe partijen. Wellicht krijg de website geen antwoord of niet snel genoeg antwoord van de eerste, maar wel van de tweede en derde. In dit geval kan hij die laatste twee al tonen op de website.
Een transactie geeft aan dat een bewerking in zijn geheel moet worden uitgevoerd. Stel een data bericht gaat langs meerdere middleware componenten tot dat deze bij de consumer komt. Het geheel wordt dan beschouwd als één transactie. Kenmerkend is dat als er ergens iets in het proces fout gaat, alles weer terug naar het beginpunt wordt hersteld. Net als een hoge quality-of-service kan transactionele integratie veel resources vergen.