Qu'est-ce que Redis Avalanche ? L'article suivant vous donnera une brève introduction, j'espère qu'il vous sera utile.
Qu'est-ce qu'une avalanche ?
Étant donné que la couche de cache transporte un grand nombre de requêtes, elle protège efficacement la couche de stockage. Cependant, si le cache n'est pas en mesure de fournir des services pour une raison quelconque, toutes les requêtes arriveront. couche, le nombre d'appels à la couche de stockage augmentera considérablement, provoquant également le blocage de la couche de stockage. L'explication anglaise de l'avalanche de cache est "run bison", ce qui signifie qu'après le crash de la couche de cache, le trafic simultané accédera au stockage principal comme un bison au galop.
La compréhension simple de l'avalanche de cache est la suivante : en raison de la défaillance du cache d'origine (ou les données ne sont pas chargées dans le cache), pendant la période où le nouveau cache n'est pas arrivé (le cache est normalement obtenu depuis Redis, comme indiqué ci-dessous), tout le cache doit être accessible à l'origine. Toutes les requêtes vont interroger la base de données, ce qui exerce une pression énorme sur le processeur et la mémoire de la base de données. Dans les cas graves, cela peut entraîner un temps d'arrêt de la base de données et un crash du système.
L'échec du cache est le suivant :
Un scénario dans lequel ce problème existe est : lorsque le serveur de cache est redémarré Ou un grand nombre de caches peuvent échouer dans un certain laps de temps, donc lorsqu'ils échouent, une grande quantité de données accédera directement à la base de données, ce qui exerce beaucoup de pression sur la base de données.
L'effet avalanche de l'invalidation du cache a un impact terrible sur le système sous-jacent ! Alors quelles sont les solutions à ce problème ?
Solution
1) Configurer la haute disponibilité du cluster redis et du cluster DB Si redis tombe en panne, il peut être immédiatement remplacé par une autre machine. Cela peut prévenir certains risques.
2) Utilisez des verrous mutex
Après l'expiration du cache, contrôlez le nombre de threads lisant et écrivant dans la base de données via le verrouillage ou la mise en file d'attente. Par exemple : un seul thread est autorisé à interroger les données et à écrire dans le cache pour une certaine clé, tandis que les autres threads attendent. S'il s'agit d'une machine autonome, vous pouvez utiliser synchronisé ou verrouiller pour le résoudre. S'il s'agit d'un environnement distribué, vous pouvez utiliser la commande redis setnx pour le résoudre.
3) Pour différentes clés, vous pouvez définir différents délais d'expiration pour rendre les points temporels d'invalidation du cache incohérents et essayer d'obtenir une distribution uniforme.
4) Ne jamais expirer
Redis est configuré pour ne jamais expirer. Cela garantit qu'il n'y aura pas de problèmes de point d'accès, c'est-à-dire qu'il n'expirera pas physiquement.
5), Protection des ressources
À l'aide de l'hystrix de Netflix, vous pouvez isoler le pool de threads de diverses ressources pour protéger le pool de threads principal.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!