Situatie
Backend-ul primește un volum ridicat de request-uri pentru endpoint-uri de citire intensivă (ex. rapoarte, cataloage, configurări), care execută interogări SQL complexe și repetitive. Această situație saturează capacitatea CPU și de I/O a bazei de date relaționale, generând creșteri masive ale latenței API-ului și timeout-uri pe frontend. Scalarea verticală a serverului SQL este costisitoare și rezolvă problema doar temporar.
Solutie
Pasi de urmat
Implementarea infrastructurii Redis Pe un server dedicat sau în orchestratorul curent (Swarm/K8s), se instalează instanța Redis. Se configurează parametrii esențiali în redis.conf:
-
Se definește limita de memorie RAM alocată (
maxmemory 2gb). -
Se setează politica de evicțiune pentru cazurile în care memoria se umple (
maxmemory-policy allkeys-lru), asigurându-se astfel că intrările cele mai vechi și nefolosite sunt șterse automat pentru a face loc datelor noi.
Conectarea la nivel de aplicație (Backend) Se instalează biblioteca de client Redis corespunzătoare limbajului de backend utilizat (ex. redis-py pentru Python, ioredis pentru Node.js). Se stabilește conexiunea folosind un model de Connection Pool la inițializarea aplicației, pentru a menține conexiunile TCP deschise și a evita overhead-ul de conectare la fiecare request.
Implementarea modelului Cache-Aside la nivelul endpoint-ului Logica din controller-ul API-ului se modifică pentru a respecta secvențialitatea Cache-Aside:
-
La primirea unui request HTTP, aplicația generează o cheie unică bazată pe parametrii cererii.
-
Aplicația interoghează rapid Redis.
-
Cache Hit: Dacă rezultatul este prezent în memorie, acesta este returnat instantaneu către client (latență de sub 5ms).
-
Cache Miss: Dacă datele nu există, se execută interogarea standard pe baza de date (SQL).
Popularea cache-ului și strategia de invalidare După un Cache Miss, rezultatul preluat din baza de date SQL este scris automat în Redis și returnat clientului.
-
Time To Live (TTL): Fiecărei chei scrise i se asociază o valoare TTL de expirare automată (ex. 10 minute pentru date dinamice, 24h pentru configurații statice).
-
Invalidare activă: La endpoint-urile care modifică datele (operațiuni POST/PUT/DELETE), se inserează instrucțiuni pentru ștergerea directă a cheilor Redis corespunzătoare, garantând că la următorul GET, cache-ul va fi repopulat cu datele proaspete din SQL, eliminând riscul datelor învechite.
Leave A Comment?