Contenu du cache partagé dans le proxy nginx à charge équilibrée

 NGX CACHE - NODE A \ REQUESTS  LB   SHARED FS (NAS)  NGX CACHE - NODE B / 

J’essaie d’accomplir quelque chose comme ça, les requêtes sont équilibrées entre plusieurs nœuds qui doivent servir de contenu partagé en cache lorsqu’ils sont disponibles. Nous connaissons des résultats MISS aléatoires, même si le contenu a été stocké dans le système de fichiers cache par l’un des autres nœuds. Ce que nous pouvons voir dans les journaux, c’est que parfois le nœud A identifie le contenu HIT mis en cache par le nœud B, mais parfois ce n’est pas le cas.

Selon la documentation https://www.nginx.com/blog/nginx-caching-guide/ , le paramètre keys_zone obligatoire configure une zone de mémoire partagée pour stocker les clés de cache et les métadonnées afin de déterminer rapidement si une requête est un HIT ou un MISS sans avoir à aller sur le disque.

Ceci est la partie pertinente de notre configuration:

  proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_zone:10m max_size=10g inactive=60m use_temp_path=off; : : : location ~* ^/api/rdPage.aspx { resolver 10.0.0.1; add_header X-Cache-Status $upstream_cache_status; proxy_cache_bypass $http_pragma; proxy_cache_key "$proxy_host$uri$request_body"; proxy_cache_valid 200 10m; proxy_ignore_headers Cache-Control Expires Set-Cookie; proxy_cache_methods POST; proxy_cache_min_uses 0; proxy_cache my_zone; # WITH PROXY LB SERVER proxy_pass http://api-server/rdPage.aspx$is_args$args; proxy_headers_hash_bucket_size 128; proxy_connect_timeout 15; proxy_send_timeout 15; proxy_read_timeout 1800; } 

Comment la zone de mémoire “partagée” keys_zone fonctionne-t-elle pour plusieurs noeuds? Si c’est en mémoire, comment peut-il être partagé? Des alternatives sans ajout de modules personnalisés tels que le cache SR à nginx ( https://www.nginx.com/resources/wiki/modules/sr_cache/ )?

Nginx ne peut pas partager le cache sur disque entre les nœuds. Placer un cache sur un disque partagé est également une mauvaise idée, c’est une mauvaise conception. Tout problème de réseau avec le disque partagé, toute latence élevée due au retard du réseau et le blocage de la dissortingbution peuvent considérablement réduire les performances de nginx.

Laissez le cache sur le disque local. Si vous utilisez plusieurs nœuds en tant qu’équilibrage de charge, vous pouvez utiliser le partage de cache. Chaque nœud recevra une partie des requêtes et la mettra en cache. Si vous ciblez HA, chaque nœud doit conserver son propre cache complet.

Plus d’informations sur tous ces cas, vous pouvez lire sur le site nginx: https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/ sur le sharding et https: // www. nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/ sur HA.