RateLimiting i Gatewayen
I forbindelse med at UserService blev ristet på sit endpoint /register med 200 users som ville registrere sig over 20 sekunder, men ikke på 150 users over 20 sekunder, valgte vi at indsætte en ratelimiting vha. NuGet-pakken System.Threading.RateLimiting.
Ratelimiting i softwareudvikling er af min erfaring et relativt simpelt begreb. Jeg vil her hurtigt indskyde, at jeg opfatter det som et simpelt begreb, men af hvad jeg kan fornemme på ressourser, afhænger kompleksiteten af implementeringen af de krav og udfordringer et system står overfor. Ratelimiting går ud på hvilke regler (begrænsinger, limits) man sætter op for en ratio af requests over et givent tidspunkt, og man bruger det til at beskytte serverressourser, undgå overbelastning og forbedre et systems stabilitet.
Jeg må ærligt indrømme at det har været begrænset med hvor dybt jeg har gået i fht. optimering og tests og jeg er ikke sikker på jeg har ramt det mest optimale sweetspot i fht. vores ratelimiting politik. Den er blevet foretaget på baggrund af 7 tests og for at imødekomme SIMPLE DDOS-angreb.
Vores politik ser således ud:
og er 'naturligvis' implementeret i Gatewayen, da vi i vores arkitektur har valgt at centralisere load-balancing og ratelimiting i denne, da alle requests fra clients bliver ført igennem denne.
Dertil jeg implementeret en middleware som håndhæver politikken:
Og det var egentlig hvad jeg havde at sige om ratelimiting for denne gang.