High Performance NodeJS API - deel 1

Back

In opdracht van Hogeschool Rotterdam en mijn stagebedrijf Hoppinger, heb ik samen met een mede student (Bryan Kroesbeek) een oude in Ruby geschreven applicatie compleet omgebouwd naar NodeJS. Dit betrof de applicatie van een uitgever, met duizenden bezoekers per dag.

Opmerking
Zoals de titel al doet vermoeden is dit deel 1 van deze casus. Het project is momenteel nog in volle gang en zeker niet afgerond. Een tweede deel van deze casus zal verschijnen als het project is afgerond.

Casus

De applicatie waar ik aan heb gewerkt is gemaakt in opdracht van een uitgever. Deze uitgever bezit meer dan 20 websites waarop nieuwsartikelen worden geplaatst voor verschillende doelgroepen. Deze 20 websites zijn allemaal gebaseerd op dezelfde codebase en bestaan uit een ingewikkelde architectuur. Namelijk: een Wordpress backend voor redacteurs, een Ruby on Rails front-end en verschillende caching mechanismen. Daarnaast bied de applicatie ook premium content aan waarvoor een koppeling met meerdere externe systemen wordt gebruikt.

Er waren meerdere aanleidingen voor het project. De belangrijkste betrof de performance. Mede door de Ruby front-end en een niet optimaal gebruik van caching was de applicatie erg traag. Daarnaast waren er ook problemen met de caching, waarbij deze soms niet synchroon liep met de backend. Als laatste was de applicatie niet goed beheer- en schaalbaar.

Nieuwe technieken

De nieuwe architectuur lijkt veel op de oorspronkelijke, maar bevat enkele grote verschillen. De belangrijkste is dat de nieuwe applicatie een Monoliet zal worden. Dit houdt in dat in plaats van 20 losstaand applicaties, met elke een eigen hosting omgeving, zal worden over gegaan naar één applicatie. De applicatie zal gehost worden op een Auto Scaling Platform zoals AWS van Amazone.

Naast de nieuwe architectuur is ook gekozen voor een andere programmeertaal. In plaats van Ruby zal gebruik worden gemaakt van TypeScript, NodeJS en ReactJS. Dit maakt de koppeling met de Wordpress backend en externe systemen makkelijker en levert bovendien een grote performance verbetering op.

Plan van aanpak

Het ontwikkelen van de nieuwe applicatie zou parallel lopen met het door ontwikkelen van de bestaande. Deze keuze is gemaakt omdat de doorontwikkeling simpelweg niet stilgelegd kon worden. De ontwikkeling zal gebeuren in twee fases. In de 1e fase zijn alle pagina’s, logica en belangrijkste features overgenomen. In de 2e fase zal een koppeling gemaakt worden met externe systemen betaling en Google Ads. Tot slot zal er ook een optimalisatie sprint plaats vinden waarin de focus ligt op het verbeteren van de caching en de performance.

Uitwerking

Op het moment van schrijven zijn we op 70% van de 1e fase van dit project. Hierbij heb ik mij veel beziggehouden met de koppeling naar de Wordpress backend. Ook heb ik veel nieuwe kennis opgedaan. Bijvoorbeeld het opzetten van een écht goede API en het schrijven van efficiënte en snelle code.

Terwijl het project vordert wordt ook steeds duidelijker waar de uitdagingen van het project zitten. Eén van de grootste is bijvoorbeeld het groot aantal uitzonderingen (edge cases) in het project. Dit maakt het schatten van taken en testen van features veel lastiger.

De volgende fase

De volgende fase van het project zal gerichte zijn het koppelen met externe systemen. Hieronder valt onder andere een authenticatie- en advertentie-systeem. De uitdagingen zullen hier vooral liggen in het “ontdekken” van deze systemen en deze op een veilige manier implementeren. Hier hoop ik in een volgend deel van deze casus meer over te kunnen vertellen.