W1siziisijiwmjevmdevmjevmtmvntivmzuvotc2ytcxndmtytfmms00ytdmlwiwn2mtzjcxote2yzu2ndqwl0fkb2jlu3rvy2tfmtgxmde1ndk4ich3zwnvbxbyzxnzlmnvbskgkdeplmpwzwcixsxbinailcj0ahvtyiisijiwmdb4njqwiyjdxq

Zo werkt reactive programming

Reactive programming

Aan software worden steeds hogere eisen gesteld. De consument verwacht dat een lokale webwinkel net zo goed werkt als Amazon of Zalando. De gebruikerservaring die techgiganten als Spotify en Facebook bieden, mag niet heel veel minder zijn. Alles moet snel, soepel en simpel gaan. 

De complexiteit van software neemt daardoor toe. Zeker in de e-commerce waar ordersystemen en de back-end perfect op elkaar moeten aansluiten, wordt de (bijna) real time verwerking van enorme hoeveelheden data steeds meer een vereiste. Het beheren van gelijktijdige wijzigingen tussen modules wordt een belangrijke uitdaging.

Trends

Een trend binnen de software engineering die hierop inspeelt, is ‘reactive programming’. Spilberg ziet de vraag toenemen naar software-ontwikkelaars die vertrouwd zijn met deze software-architectuurstijl. Wat is reactive programming, wat zijn reactive streams, waarom is deze denkwijze zo in opmars? En hoe werkt dit declaratief programmeerparadigma?

Spilberg vond Nicolas Fränkel, developer advocate bij Hazelcast, bereid dit nieuwe concept van programmeren toe te lichten. De Zwitserse consultant/trainer/auteur van boeken hield een webinar met veel ‘praktijk’. Hij wil geen 'reactive’ goeroe zijn die alleen maar de voordelen schetst en blind is voor de beperkingen.

In plaats van een lange theoretische verhandeling te houden demonstreerde Fränkel hoe reactive programming concreet werkt. Developers konden stap voor stap zien hoe hij een app migreerde naar het ‘reactive model'. Hij koos daarbij voor een traditionele Spring Boot applicatie, een op open source Java gebaseerd framework voor microservices. Zo'n Spring Boot bevat een allesomvattende infrastructurele ondersteuning. Je kunt er bedrijfsklare applicaties mee ontwikkelen. 

Eventgedreven

Reactive programming is simpelweg een programmeerconcept of denkpatroon dat door events wordt gedreven. Normaliter doen deze events zich in een bepaalde sequentie over de tijd voor. Deze software-architectuurstijl houdt zich bezig met deze datastromen en draait om de 'voortplanting' van veranderingen. Datastromen vormen de ruggengraat van de applicatie. Gebeurtenissen, berichten, oproepen en zelfs storingen worden overgebracht door een datastroom.

Bij reactief programmeren observeer je deze stromen en reageer je wanneer er een waarde wordt uitgezonden. Een dergelijk systeem reageert snel, indien mogelijk tijdig. Een ander kenmerk is veerkracht. Ook als er iets misgaat, blijft de reactiesnelheid gehandhaafd. Zelfs bij een sterk oplopende workload blijft alles goed werken. En last but not least: het systeem werkt volgens het ‘actor model’ en wordt 'gedreven’ door berichten. Deze berichtenstroom is asynchroon. Dit ontwikkelingsmodel is geheel gestructureerd rond asynchrone datastromen. 

Neveneffect is dat de applicatie door en door asynchroon wordt. Het doel van ‘reactive streams’ is te voorzien in een standaard voor het verwerken van asynchrone stromen met niet-blokkerende 'backpressure'.

De voornaamste voordelen van reactive programming zijn de enorme schaalbaarheid en geschiktheid voor de cloud. Het gebruik van resources is optimaal. Dit scheelt geld. Nadeel is dat zo’n concept complex kan zijn. Je moet anders denken. Bovendien zijn bugs moeilijker uit het systeem te halen. Ook zijn specifieke API's nodig. En niet onbelangrijk: één enkele 'blocking call’ in de ‘call chain’ betekent dat het systeem niet meer reactief is.