Ordercapaciteit reserveren en vrijgeven met een event stream
Immutable events en negatieve orders in plaats van tellers.
- Beantwoordt
- Hoe reserveer je capaciteit voor een online bestelling terwijl de betaling nog loopt?
- Onderwerpen
- data · ecommerce · lemmid-store · payments · server · work
- Volledig artikel op willem.com
- https://willem.com/nl/2020-12-02_het-ontwerpen-van-een-multidimensionale-capaciteitswachtrij/
Samenvatting
Sla elke bestelling op als een onveranderlijk event met timestamp en reserveer capaciteit zodra de bestelling wordt geplaatst. Mislukt de betaling of wordt de bestelling afgebroken, voeg dan een negatieve order met dezelfde bezorgtijd toe om de capaciteit vrij te geven.
Volledige tekst
Ik bouwde dit voor mijn food ordering app, waar drie capaciteitsdimensies op elkaar inwerken: keuken, afhalen en bezorgen, elk met een eigen tijdspanne, zeg 10 gerechten per 15 minuten tegenover 3 bezorgingen per 30 minuten. Het ontwerp volgt de Lambda Architecture: een append-only stroom van onveranderlijke events met timestamp, verwerkt door een realtime speed layer en een batch precomputation layer. Elke bestelling is een event; het annuleren van drie pizza's voegt een negatieve order van min drie pizza's toe met dezelfde bezorgtimestamp, waardoor de gereserveerde capaciteit vrijkomt zonder ooit een record te wijzigen. Metrics worden berekend uit de echte streamdata in RAM. De eerste query initialiseert een model uit historische data in batch, realtime updates houden het actueel zolang het gevraagd wordt, en antwoorden komen binnen milliseconden.