Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdAlexander Janssen Laatst gewijzigd meer dan 6 jaar geleden
1
SCALABLE DATA PROCESSING MET RABBITMQ
2
HET PROJECT www.dekrachtvanmarktplaats.nl
Voor autodealers die adverteren op marktplaats Inzichten in het aantal leads en views op geplaatste advertenties Historische informatie terug zien
5
DE OPDRACHT Opschalen van 2.000 dealers naar 10.000 dealers
Verwerken van alle automotive leads van Marktplaats Hudige platform is end of life Focus op schaalbaarheid Applicatie opdelen in 2 componenten
6
WEB APPLICATIE Advertentie overzicht
Actuele en historische statistieken inzien Performance van advertenties vergelijken tegen een benchmark Techniek UI (Angular) API (Zend expressive) Om de frontend zo licht mogeljik te maken en het dataverkeer naar de server te beperken hebben we gekozen om de frontend op te bouwen in AngularJS. API en UI losgekoppeld om ze individueel te kunnen schalen. UI load is nagenoeg niets (alleen 1x laden) API draait nu op 3 servers, maar er kan eenvoudig een server bijgezet worden.
7
CONSOLE APPLICATIE Afhandelen van alle leads
Verwerken van statistieken voor alle dealers Veel data verwerken in korte tijd (data spikes) Er mogen geen leads verloren gaan door timeouts oid
8
DATA SPIKES Asynchroon Meerdere processen die parallel data verwerken
Alleen 1 probleem … Asynchroon Meerdere processen die parallel data verwerken Asynchroon: bericht aannemen, opslaan zodat deze later verwerkt kan worden Parallel data verwerken (mutli threaded)
9
Randvoorwaarde voor het project
Multi threading en async in PHP… yeah…
10
SUPERVISOR Process manager
Kan meerdere instanties van een process starten Herstart scripts automatisch in geval van errors
11
LEAD VERWERKING Valideren van de lead signature
Verrijken van de lead met gegevens uit de Marktplaats API Opslaan van de lead in de database Doorsturen van de lead naar API Partners Leads hebben een hash die berekent wodt aan de hand van de lead body en een secret Valideren van signature is een simpele operatie Communicatie van externe services kan langer duren Opsplitsen in losse processes die ieder een actie op zich nemen.
12
LEAD VERWERKING Valideren van de lead signature
Verrijken van de lead met gegevens uit de Marktplaats API Opslaan van de lead in de database Doorsturen van de lead naar API Partners Kunnen echter nog niet individueel schalen…
13
MESSAGE BROKER Twee taken Berichten aannemen en in een queue zetten
Het eerste bericht uit de queue terug geven als daarom gevraagd wordt. (FIFO) Door de message broker te gebruiken krijgen kunnen we de workers nu loskoppelen van elkaar en kunnen we voor acties die langer duren makkelijk meerdere workers gebruiken.
15
MESSAGE BROKER SELECTIE
Criteria Moet kunnen draaien in een cluster Bestand zijn tegen grote hoeveelheden berichten Er mag geen data verloren gaan (persistent messages)
16
RABBITMQ VS KAFKA RABBITMQ Goede documentatie
Ondersteund verschillende clients en protocollen Makkelijk te installeren en te configureren KAFKA Enterprise level Geschikt voor extreem veel berichten Focus op JAVA Kafka en RabbitMQ waren toentertijd de populairste brokers Gekozen voor RabbtMQ Verwerkingssnelheid was ruim voldoende Ondersteuning voor PHP Makkelijk op te zetten
17
RabbitMQ komt ook nog met een slicke interface…
18
Pas als de worker het ACK signaal stuurt beschouw Rabbit het bericht als verwerkt en wordt het verwijderd van de queue. Maar wat als er wat misgaat? De API van een externe partij is down (hopelijk tijdelijk), er zit een bug in de code of de database server geeft geen response?
19
ERROR HANDLING Het probleem is permanent (inconsistente data aanlevering, bug in de code) Het probleem is tijdelijk en gaat “vanzelf” over (externe API is overbelast) Permanente problemen worden weggeschreven naar een aparte queue zonder listener -> Failed queue Voor tijdelijke problemen gebruiken we een RabbitMQ plugin: “delayed message plugin”
20
Vertraging volgens Fibonacci
22
PUNT.
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.