𝗬𝗼𝘂𝗿 𝗦𝗲𝗿𝘃𝗲𝗿𝗹𝗲𝘀𝘀 𝗜𝘀 𝗟𝘆𝗶𝗻𝗴 𝗧𝗼 𝗬𝗼𝘂 𝗔𝗯𝗼𝘂𝘁 𝗦𝗰𝗮𝗹𝗲 -> Votre architecture serverless vous ment sur la scalabilité
Le serverless promet une scalabilité infinie et une surcharge nulle. Des plateformes comme AWS Lambda ou Google Cloud Run font évoluer vos couches de calcul instantanément.
Mais votre backend plante toujours.
Le problème ne vient pas de votre calcul. Le problème vient de votre base de données.
Lorsque vos fonctions montent en charge, elles créent une tempête de connexions. Chaque nouvelle instance de fonction tente d'ouvrir une nouvelle connexion à votre base de données. Si vous avez 1 000 fonctions, vous avez 1 000 requêtes de connexion qui frappent votre instance Postgres ou MySQL simultanément.
Les bases de données relationnelles ont des limites strictes. Une fois cette limite atteinte, les nouvelles connexions échouent. Cela entraîne une latence élevée et des erreurs 5xx. Votre puissance de calcul est prête, mais votre base de données plie sous la pression.
Vous pouvez résoudre ce problème avec trois stratégies :
Utilisez un proxy de connexion Ne connectez pas vos fonctions directement à votre base de données. Utilisez un proxy comme AWS RDS Proxy ou Google Cloud SQL Proxy. Cette couche se situe entre vos fonctions et votre base de données. Elle gère un petit pool de connexions persistantes et les partage entre vos nombreuses fonctions.
Implémentez des couches de proxy de données Les proxys avancés font plus que simplement gérer les connexions. Ils peuvent :
- Séparer les lectures et les écritures vers différentes instances de base de données.
- Mettre en cache les requêtes fréquentes pour réduire la charge de la base de données.
- Optimiser les requêtes avant qu'elles n'atteignent la base de données.
- Passez aux écritures asynchrones Arrêtez de faire de chaque action utilisateur une écriture de base de données synchrone. De nombreuses tâches n'ont pas besoin d'une cohérence instantanée.
Au lieu de ceci : Action utilisateur -> Fonction -> Écriture DB synchrone -> Réponse
Essayez ceci : Action utilisateur -> Fonction -> Envoyer l'événement dans une file d'attente -> Réponse rapide
Une fonction distincte peut ensuite récupérer cet événement et écrire dans la base de données plus tard. Cela protège votre base de données contre les pics de trafic soudains.
La véritable scalabilité exige plus que le simple passage à l'échelle du calcul. Vous devez concevoir un accès aux données élastique. Arrêtez de provisionner pour des maximums théoriques. Commencez à construire des tampons entre vos fonctions à forte activité et vos données.
Source: https://dev.to/prabashanadev/your-serverless-is-lying-to-you-about-scale-4cga