Het is een bekende tool voor de meeste mensen, het is een simpel concept. Men neemt een link die ontzettend lang is, met mogelijk allerlei parameters en anders soort tags. Deze link stop je vervolgens in een online platform, dat jou vervolgens een korte link terug geeft. Deze korte link stuurt bezoekers dan vervolgens weer naar jouw originele link.
Toch werden we wel een beetje enthusiast toen het team achter Linkshortener.io ons benaderde om een nieuw platform van de grond af te ontwikkelen die de strijd aan gaat met de gevestigde orde. Technisch gezien gaat er namelijk wel een heleboel schuil achter dit ene simpele process.
Redirects, cache en data
In de ontwerp fase kwamen al snel een aantal dingen naar boven, een daarvan was het optimaliseren van ons redirect process. Zelfs bij een klein aantal gebruiks van het platform, kan een link met een veelvoud mensen gedeeld worden, en het is cruciaal voor het vertrouwen in de service dat dit dan ook altijd snel en goed gaat. In veel applicatie kan je het jezelf veroorloven om soms wat trager te zijn, maar bij een redirect kan dit niet, deze stap moet voor de eindgebruiker praktisch onzichtbaar en onvoelbaar zijn.
Om dit te bewerkstelligen hebben we voor Linkshortener.io een aantal technieken toegepast:
- Ten eerste gebruiken we PHP met een Swoole server voor onze redirects. Swoole is een PHP extensie die velen malen sneller is dan andere vergelijkbare oplossingen, zo kunnen we met Swoole bijvoorbeeld meer requests afhandelen dan vergelijkbare oplossingen in NodeJS.
- Ook met een snelle server zal je altijd nog data uit een store op moeten halen, waar de gebruiker naartoe gestuurd moet worden bijvoorbeeld. Om dit te optimaliseren hebben we een aantal caching lagen toegevoegd; als een link niet in de cache lagen gevonden kan worden dan halen we hem op uit een geoptimaliseerde database, maar in alle andere gevallen leeft de data in of de redis cache (hier slaan we data voor een langere tijd op), of in de Swoole memory tables (dit is een korte termijn store). Hierdoor kunnen we het ophalen van alle benodigde data altijd in een mum van tijd doen.
- Als laatste willen we natuurlijk ook informatie op slaan over de request de we zojuist hebben afgehandeld. Om te voorkomen dat dit impact heeft op de ervaring van de gebruiker, verwerken we alles wat niet direct met de redirect te maken heeft asynchroon.
Na het verwerken van de request, worden alle asynchrone processen afgehandeld om analyses op de vergaarde data toe te laten.
Dashboarding en "Independently deployable modules"
Naast het redirecten van requests moet er natuurlijk een hele applicatie gebouwd worden. In deze applicaties moesten dingen zoals het aanmaken van links, QR codes, inzien van statistieken gerealiseerd worden. Hier voor is een complete oplossing gerealiseerd met de TALL stack (Tailwind, Alpine, Laravel, Livewire). Omdat het belangrijk was dat de applicatie snel gerealiseerd kon worden, simpel te onderhouden is, en toch snel op kan schalen, hebben we een applicatie ontwikkeld die compleet op zichzelf kan staan, maar ook eenvoudig in modules gedeployed kan worden. Momenteel is bijvoorbeeld de redirect module onafhankelijk gehost van de rest van de applicatie. Dit bied ons de optie tot onafhankelijke schaalbaarheid en configuratie van de servers.
Servers en domein beheer
Naast het ontwikkelen van de applicatie, heeft Logicly ook een stukje server beheer en automatisering op zich genomen. Linkshortener.io biedt de mogelijkheid tot gebruik van een eigen domein voor de verkorte links. Om dit te faciliteren hebben we een stukje automatisering gebouwd die zowel een NGINX configuratie aanmaakt voor het domein, en ook een SSL certificaat aanvraagt en opzet. Na dit process wordt het domein beschikbaar gesteld voor de klant, en kunnen korte links aangemaakt worden.
Alles bij elkaar is Linkshortener.io technisch gezien een geweldig product geworden, en biedt het vele functionaliteiten die we hier nog niet hubben kunnen vermelden. We zijn dan ook blij om dit product te hebben mogen bouwen en te blijven hosten op ons eigen hosting platform.