Fast & realtime data in a microservice architecture
Wehkamp, de online winkel die jaarlijks miljoenen pakketjes verstuurt. Die pakketjes zijn het resultaat van een zoektocht naar het perfecte kledingstuk. Een zoektocht die kan bestaan uit vele productpagina’s bekijken, favoriete kledingstukken op een verlanglijstje plaatsen, er weer afhalen, vervolgens in het winkelmandje plaatsen, een emailherinnering ontvangen en vervolgens een aankoop doen.
Vanaf het moment dat de klant voor het eerst de site bezoekt totdat hij een review achterlaat over een gekocht product; tijdens de hele customer journey consumeert en produceert de klant data. Hoe gaat een bedrijf als Wehkamp, dat terabytes aan data heeft en waar realtime data enorm belangrijk is, hiermee om?
Mark van Gool, technisch product owner en data architect bij Wehkamp, kwam het ons woensdagavond 5 november tijdens een pizzasessie vertellen. BI consultant Annemijn van der Vaart neemt je mee in zijn verhaal.
Communicerende systemen
Het lijkt redelijk simpel, even een paar schoenen of een nieuw overhemd online kopen. Maar om de klant van voldoende en vooral de juiste informatie te voorzien, heeft een goedwerkende e-commerce site flink wat data nodig. Denk maar eens aan productprijzen, voorraad, productbeschrijvingen, klantervaringen, productafbeeldingen en nog veel meer.
Al deze gegevens zijn in afzonderlijke systemen opgeslagen. Een mooie uitdaging, want al deze systemen moeten wel met elkaar kunnen communiceren, en het liefst ook nog real time. Niemand wordt immers blij van producten die voor verkeerde prijzen online staan, of producten die worden verkocht terwijl ze niet meer op voorraad zijn.
Van miljoenen regels code naar autonome microservices
Om dit goed in te richten heeft Wehkamp zijn website sinds een aantal jaren opgebouwd uit microservices. Voorheen werd de website, die uit miljoenen regels code bestond, eens per drie weken in zijn geheel gereleaset. Met de verschillende microservices kan dat nu meerdere keren per dag.
Een microservice is goed in één ding. Dat is dan ook de definitie die Wehkamp aanhoudt voor een microservice. Dit kan bijvoorbeeld het winkelmandje zijn of de zoekfunctie op de website. Al deze microservices zijn autonoom, wat wil zeggen dat ze onafhankelijk kunnen functioneren. Dit betekent dat elke microservice data nodig heeft.
Publish & subscribe met Kafka
Die aanlevering van data wordt opgelost door een Data Platform. Elke bron van data is hierin beschikbaar. Waar de ‘oude’ website en de data die deze genereerde afhankelijk was van een dure Enterprise Service Bus (ESB), gebruikt de op microservices gebaseerde nieuwe website het gratis en open source Kafka.
Via een publish en subscribe patroon kan elke microservice zich abonneren op de nodige data. Dit zorgt er automatisch voor dat er vele kopieën van de data zijn. Maar, dit is voor Wehkamp niet erg. Dit is zelfs de gewenste situatie aangezien de microservices zo autonoom kunnen werken en altijd up to date zijn.
Alle microservices die worden ontwikkeld, hebben dan ook als eis dat ze met Kafka kunnen praten. Aan de taal waarin de microservice wordt geschreven worden geen eisen meer gesteld. Dit kan Scala, Java of .Net zijn, als het maar met Kafka kan communiceren. Ditzelfde geldt voor de datastores waarin de microservices hun data opslaan. Dat kan bijvoorbeeld Redis, PostgreSQL of een andere key-value store, NoSql- of relationele database zijn.
Speeltuin voor data scientists én management
Al deze data wordt niet alleen gebruikt om de website optimaal te laten functioneren. De data wordt ook zeker gebruikt om inzichten te krijgen voor het optimaliseren van de bedrijfsvoering. Wehkamp maakt hierbij gebruik van traditionele Business Intelligence (BI), maar dat is nog niet genoeg. De BI-oplossing is namelijk niet geschikt voor clickstream data, bovendien kan dat platform geen realtime inzichten leveren. Om dit gat te vullen maakt Wehkamp ook gebruik van een Data Lake.
Het Data Lake, dat wordt gehost in de cloudservice Amazon S3, biedt behalve een speeltuin aan de data scientists ook snelle inzichten voor het management. Toch kent een Data Lake ook de nodige uitdagingen, want voor je het weet creëer je een Data Swamp. Door trial en error, en geholpen door Slack-bot Nessie, het vriendelijke monster van Loch Ness, leert Wehkamp hoe ze het data lake het beste kunnen inrichten.
Ondertussen hebben ze hier een goede modus in gevonden. Hoe dan ook moet er altijd een use case zijn om te bepalen welke data er in het Data Lake komt. Dat houdt de ontwikkeling beheersbaar en maakt het mogelijk te leren en te itereren.
Live demo
Klinkt misschien als een ingewikkeld verhaal, maar aan de hand van een live demo met vier Raspberry Pi’s, een printertje en een aantal random tweets van de aanwezigen, liet Mark op kleine schaal zien hoe deze complete architectuur werkt. Inclusief een paar microservices, publish-subscribe via Kafka en een mini Data Lake waarin real-time data wordt verzameld.
Herkenbaar voor alle disciplines
Al met al een heel interessante avond voor alle disciplines binnen New Nexus. Natuurlijk voor onze BI-specialisten die zelf ook te maken hebben met miljoenen regels aan data. Maar ook voor onze app ontwikkelaars, die zelf ook webshops optimaliseren. Voor onze ontwikkelaars die zelf ook dagelijks .Net, Scala of Java schrijven. En voor onze management consultants die organisaties begeleiden bij digitale transities.
Ben je benieuwd naar wat New Nexus Data Solutions te bieden heeft? We helpen bij business intelligence vraagstukken variërend van architectuur en data management tot datavisualisatie en data science.
Meer informatie over Annemijn